Email Doanh NghiệpSSLFirewall Anti DDoS

NỘI DUNG

Banner blog lễ 30.4 và 1.5

Hướng dẫn khắc phục lỗi FailedScheduling Kubernetes hiệu quả

Hưng Nguyễn

Đã kiểm duyệt nội dung

Ngày đăng:25/04/2026
Lượt xem

Quy trình sản xuất nội dung

Đánh giá

[esi kkstarratings cache="private" ttl="3"]

FailedScheduling trong Kubernetes là trạng thái cho biết scheduler không thể tìm được node phù hợp để đặt Pod, khiến Pod bị giữ ở trạng thái Pending thay vì chuyển sang Running. Đây là một trong những tình huống gây đau đầu nhất vì khiến các dịch vụ mới không thể khởi động, gây gián đoạn quy trình triển khai. Bài viết này được mình tổng hợp từ kinh nghiệm vận hành hàng trăm hệ thống Cloud Native, giúp bạn nhanh chóng chẩn đoán chính xác nguyên nhân và áp dụng các biện pháp xử lý triệt để nhất, thay vì chỉ giải quyết phần ngọn của vấn đề.

Những điểm chính

  • Quan điểm của mình: FailedScheduling là một cơ chế bảo vệ thông minh của Kubernetes nhằm đảm bảo sự ổn định của cụm, ngăn chặn việc triển khai các ứng dụng vào những môi trường không đủ điều kiện vận hành.
  • Khái niệm FailedScheduling: Hiểu rõ FailedScheduling là lỗi khi scheduler không tìm được node phù hợp, giúp bạn nhanh chóng xác định nguyên nhân khiến Pod bị kẹt ở trạng thái Pending.
  • Nguyên nhân phổ biến: Nắm vững các nguyên nhân phổ biến từ thiếu tài nguyên đến các ràng buộc không khớp, giúp bạn có một danh sách kiểm tra hiệu quả để khoanh vùng và chẩn đoán sự cố một cách chính xác.
  • Cách chẩn đoán: Nắm vững các lệnh kubectl cần thiết, giúp bạn thu thập thông tin và xác định chính xác lý do tại sao Pod không được lên lịch.
  • Cách khắc phục: Tìm hiểu các giải pháp hiệu quả, giúp bạn có những hành động cụ thể để giải quyết triệt để sự cố và đưa Pod vào trạng thái Running.
  • Giới thiệu Vietnix: Biết đến Vietnix là nhà cung cấp dịch vụ Enterprise Cloud Server giúp bạn có một nền tảng hạ tầng vững chắc để loại bỏ các rủi ro về hạ tầng cho Kubernetes.
  • Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến FailedScheduling Kubernetes.
những điểm chính

FailedScheduling Kubernetes là gì?

FailedScheduling trong Kubernetes là lỗi xảy ra khi scheduler không tìm thấy node phù hợp để đặt Pod mới, dẫn đến Pod ở trạng thái Pending kéo dài. Lỗi này xuất hiện trong phần Events của Pod khi kiểm tra bằng lệnh kubectl describe pod <pod-name>, thường hiển thị thông báo như “0/X nodes are available: X Insufficient cpu, Y Insufficient memory” hoặc các lý do liên quan đến ràng buộc.

FailedScheduling trong Kubernetes là lỗi xảy ra khi scheduler không tìm được node phù hợp để chạy Pod, khiến Pod bị Pending
FailedScheduling trong Kubernetes là lỗi xảy ra khi scheduler không tìm được node phù hợp để chạy Pod, khiến Pod bị Pending

Ngay tại bước thiết kế và vận hành hạ tầng Kubernetes, doanh nghiệp có thể giảm thiểu rủi ro FailedScheduling bằng việc lựa chọn nền tảng cloud đủ mạnh và linh hoạt. Enterprise Cloud Server của Vietnix cung cấp một cụm tài nguyên riêng biệt với CPU AMD EPYC và 100% NVMe, cho phép bạn chủ động phân bổ node, mở rộng tài nguyên và triển khai Kubernetes cluster ổn định trên cùng một hạ tầng. Nhờ mô hình chi phí cố định, minh bạch và khả năng tự tạo, quản lý nhiều máy chủ ảo, doanh nghiệp dễ dàng tối ưu cấu hình node, hạn chế tình trạng thiếu tài nguyên dẫn đến FailedScheduling trong môi trường thực tế.

Nguyên nhân phổ biến gây lỗi FailedScheduling

Lỗi FailedScheduling trong Kubernetes xuất hiện khi scheduler không tìm được node phù hợp do thiếu tài nguyên hoặc các ràng buộc cấu hình không khớp. Các nguyên nhân chính có thể kể đến như:

  • Thiếu hụt tài nguyên: Đây là nguyên nhân hàng đầu. Mỗi Pod khi khởi tạo đều khai báo mức tài nguyên requests (CPU và Memory) cần thiết. Nếu tổng số tài nguyên trống trên mọi Node đều thấp hơn mức Pod yêu cầu, Pod sẽ không được lập lịch.
  • Node Selector hoặc Node Affinity không khớp: Quản trị viên thường dùng nodeSelector hoặc affinity để ép Pod chạy trên các Node có gán nhãn cụ thể (ví dụ: disktype=ssd). Nếu không có Node nào mang nhãn tương ứng, lỗi FailedScheduling sẽ xuất hiện.
  • Pod không vượt qua được Taints và Tolerations: Các node trong cụm đang được gắn nhãn Taint để từ chối những Pod không mong muốn. Nếu Pod của bạn không có Toleration tương ứng thì sẽ bị từ chối lên lịch.
  • Node bị vô hiệu hóa: Khi quản trị viên đang bảo trì một Node bằng lệnh kubectl cordon, Node đó sẽ bị đánh dấu là Unschedulable. Pod mới sẽ không được phép chạy trên Node này.
  • Lỗi ràng buộc Persistent Volume: Nếu Pod yêu cầu một ổ cứng ảo (PVC) đang nằm ở một Zone cụ thể, nhưng Node trống lại nằm ở Zone khác thì Kubernetes sẽ không thể đặt Pod lên Node đó và gây lỗi
  • Xung đột cổng mạng: Pod yêu cầu sử dụng một HostPort cố định trên node, nhưng cổng mạng này đã bị một Pod khác trên cùng node đó chiếm dụng.
Các nguyên nhân phổ biến gây lỗi FailedScheduling
Các nguyên nhân phổ biến gây lỗi FailedScheduling

Chẩn đoán lỗi FailedScheduling

Chẩn đoán lỗi FailedScheduling bắt đầu bằng việc kiểm tra trạng thái Pod qua kubectl get pods để xác định Pod ở trạng thái Pending kéo dài. Bạn sẽ thấu phần Events trong output cung cấp thông báo chi tiết về lý do scheduler loại trừ node. Đồng thời bạn hãy kết hợp kiểm tra node và tài nguyên cluster để xác nhận nguyên nhân cụ thể.

  • Kiểm tra trạng thái pod: Chạy kubectl get pods <pod-name> để liệt kê tất cả Pod và xác định Pod nào bị kẹt ở trạng thái Pending lâu bất thường. Sau đó bạn dùng kubectl get pod <pod-name> -o yaml để xem đầy đủ spec của Pod (requests/limits, nodeSelector, affinity…), từ đó đối chiếu với tình trạng tài nguyên và cấu hình hiện tại của cluster.
  • Phân tích events pod: Thực hiện kubectl describe pod <pod-name> và tập trung vào phần Events có thông báo FailedScheduling. Tại đây Kubernetes sẽ ghi rõ dạng thông báo như “0/4 nodes are available” kèm lý do cụ thể (ví dụ: “Insufficient cpu”, “node(s) had taint” hoặc “no nodes match pod affinity”), bạn có thể dựa vào số node bị loại bởi từng lý do để ưu tiên xử lý đúng vấn đề.
  • Đánh giá tài nguyên node: Sử dụng kubectl describe nodes để xem tổng quan CPU, memory,… trên từng node, bao gồm mục Allocated resources và Available. Dựa vào đó, bạn so sánh requests của Pod với phần tài nguyên còn trống trên node để xác định có thật sự thiếu CPU/memory/storage hay không.
  • Xem labels và Taints Node: Chạy kubectl get nodes --show-labels để liệt kê toàn bộ labels, rồi đối chiếu với nodeSelector/affinity trong Pod spec xem có khớp hay không. Tiếp theo bạn dùng lệnh kubectl describe node <node-name> để kiểm tra các taints và trạng thái như SchedulingDisabled=true. Nếu taint không có toleration tương ứng, node đó sẽ bị loại khỏi danh sách node đủ điều kiện.
  • Kiểm tra PVC và storage: Nếu Pod gắn volume thì bạn hãy dùng kubectl describe pvc <pvc-name> để xem PVC có đang ở trạng thái Pending không và đọc phần Events kèm theo. Các lỗi thường gặp là không tìm được PV phù hợp với storageClass hoặc dung lượng, khiến PVC chưa được bind và scheduler không thể lên lịch Pod vì volume chưa sẵn sàng.
Chẩn đoán lỗi FailedScheduling
Chẩn đoán lỗi FailedScheduling

Bổ sung tài nguyên cho hệ thống

Nếu hệ thống báo lỗi thiếu CPU hoặc RAM, bạn cần cung cấp thêm không gian cho Pod. Bạn có thể mở rộng cụm bằng cách thêm node mới vào hệ thống. Nếu không thể nâng cấp hạ tầng ngay lập tức thì bạn hãy xóa bớt các Pod không còn sử dụng để giải phóng tài nguyên.

Giảm yêu cầu tài nguyên pod

Nếu ứng dụng thực tế không cần nhiều tài nguyên đến vậy thì bạn có thể chỉnh sửa Pod spec giảm requests/limits CPU, memory cho phù hợp với dung lượng node thực tế từ kubectl describe nodes. Bạn dùng lệnh kubectl top pods để xác định Pod tiêu thụ nhiều tài nguyên trên node và tối ưu hóa chúng trước, sau đó hãy áp dụng thay đổi bằng lệnh kubectl apply -f pod.yaml để scheduler tìm node phù hợp ngay lập tức.

Mẹo từ chuyên gia: Hạn chế giảm limits quá sát usage hiện tại, hãy chừa một khoảng headroom (ví dụ 20–30%) để tránh Pod bị throttling hoặc OOM khi lưu lượng tăng đột ngột.

Điều chỉnh Node Selector và Affinity

Bạn kiểm tra labels node hiện có qua kubectl get nodes --show-labels và cập nhật nodeSelector trong Pod spec khớp chính xác key/value. Nếu sử dụng nodeAffinity, bạn sửa preferredDuringSchedulingIgnoredDuringExecution hoặc requiredDuringSchedulingIgnoredDuringExecution cho phù hợp node khả dụng. Với podAntiAffinity xung đột thì bạn cần nới lỏng weight hoặc podAffinityTerm để cho phép lập kế hoạch trên node có Pod tương tự.

Xử lý Taints và Tolerations

Khi Pod bị chặn bởi Taints, bạn cần đồng bộ lại cấu hình. Bạn thêm tolerations vào Pod spec với key, value, operator (Equal/Exists), effect khớp taints trên node từ kubectl describe node. Ví dụ: tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" cho node master. Nếu taint không cần thiết, bạn xóa bằng kubectl taint nodes key=value:NoSchedule- để mở node cho Pod thông thường.

Mẹo từ chuyên gia: Đừng vội xóa taint trên node control-plane/infra chỉ để “cho Pod lên được”; hãy đảm bảo bạn hiểu rõ lý do taint được đặt (ví dụ: dành riêng cho control-plane hoặc workload đặc biệt).

Kích hoạt lại node bị cordon

Bạn dùng kubectl get nodes kết hợp với kubectl describe node <node-name> để xác định node nào đang ở trạng thái SchedulingDisabled=true (bị cordon). Sau đó bạn chạy lệnh kubectl uncordon <node-name> để cho phép scheduler đặt Pod lên node này trở lại, rồi dùng lại kubectl get nodes kiểm tra node đã ở trạng thái Ready trước khi kỳ vọng Pod được lên lịch lại.

Giải quyết PVC Pending

Bạn chạy kubectl describe pvc <pvc-name> để xem chi tiết lý do PVC bị Pending, thường là do storageClassName không khớp hoặc dung lượng yêu cầu lớn hơn các PV hiện có. Từ đó, bạn có thể tạo PV thủ công phù hợp hoặc chỉnh sửa storageClassName trong PVC để cơ chế dynamic provisioning tạo PV mới, và khi PVC chuyển sang trạng thái Bound thì scheduler sẽ có đủ điều kiện để đặt lại Pod.

Mở rộng Cluster Capacity

Khi thực sự thiếu CPU/memory/storage trên toàn cụm, bạn cần bổ sung node mới vào cluster (qua cloud provider hoặc máy chủ on‑premise) để tăng tổng tài nguyên khả dụng. Sau đó có thể triển khai Cluster Autoscaler (ví dụ kubectl apply -f autoscaler.yaml) để tự động thêm/bớt node khi có nhiều Pod Pending và dùng kubectl get nodes theo dõi đến khi các node mới ở trạng thái Ready để Pod được reschedule tự động.

Mẹo từ chuyên gia: Khi cấu hình Cluster Autoscaler, hãy đặt ngưỡng min/max node hợp lý và giới hạn instance type phù hợp ngân sách, tránh việc autoscaler mở quá nhiều node lớn chỉ vì một vài Pod thử nghiệm cấu hình sai requests.

Enterprise Cloud Vietnix: Giải pháp điện toán đám mây cấp cao cho doanh nghiệp

Enterprise Cloud Vietnix là giải pháp IaaS thế hệ mới, mang đến sức mạnh vượt trội cho doanh nghiệp. Hệ thống trang bị 100% ổ cứng NVMe Enterprise cùng CPU AMD EPYC 7773x mạnh mẽ, đảm bảo xử lý dữ liệu siêu tốc và ổn định tuyệt đối. Với cơ chế nhân bản dữ liệu Replicas 3 và khả năng mở rộng linh hoạt, Vietnix giúp tối ưu chi phí vận hành, bảo mật đa lớp và sẵn sàng đồng hành cùng sự tăng trưởng bền vững của mọi dự án.

Thông tin liên hệ:

  • Website: https://vietnix.vn/
  • Hotline: 1800 1093
  • Email: sales@vietnix.com.vn
  • Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh

Câu hỏi thường gặp

Làm thế nào để Taints và Tolerations hoạt động để kiểm soát việc lập lịch Pod?

Taints được đặt trên Node để “đẩy” (repel) các Pod khỏi việc lên lịch trên Node đó, trừ khi Pod có một Toleration phù hợp với Taint. Cơ chế này hoạt động theo nguyên tắc chỉ cho phép những ai có chìa khóa phù hợp mới được vào, giúp dành riêng các node cho các workload cụ thể.

Khi một PVC ở trạng thái Pending tại sao lại gây ra lỗi FailedScheduling?

Khi một PVC ở trạng-thái Pending, điều đó có nghĩa là nó chưa tìm được một Persistent Volume (PV) phù hợp để liên kết vào. Scheduler sẽ không lên lịch cho một Pod yêu cầu PVC đó cho đến khi PVC chuyển sang trạng thái Bound, vì Pod cần volume để có thể khởi động.

Lệnh kubectl uncordon có tác dụng gì?

Lệnh kubectl uncordon <node-name> được sử dụng để đánh dấu một node là “schedulable” (có thể lên lịch). Thao tác này ngược lại với kubectl cordon, vốn đánh dấu một node là “unschedulable” để ngăn scheduler đặt các Pod mới lên đó, thường được dùng trong quá trình bảo trì.

Pod bị lỗi FailedScheduling có tự động chạy lại không?

Có, thành phần kube-scheduler sẽ liên tục chạy ngầm và thử tìm Node định kỳ. Ngay khi bạn mở rộng thêm tài nguyên hoặc sửa lại cấu hình, Pod sẽ tự động chuyển sang trạng thái Running mà không cần bạn phải khởi động lại.

Làm sao để hệ thống Kubernetes cảnh báo sớm lỗi này?

Quản trị viên nên tích hợp công cụ giám sát Prometheus và Grafana vào cụm Cluster. Các hệ thống này sẽ thiết lập những biểu đồ theo dõi lượng tài nguyên tiêu thụ của Node và tự động gửi cảnh báo qua email hoặc Slack trước khi tài nguyên bị cạn kiệt hoàn toàn.

Lỗi FailedScheduling là một tín hiệu quan trọng trong Kubernetes, cho thấy bộ lập lịch không thể tìm thấy một node phù hợp để triển khai Pod, thường do thiếu tài nguyên hoặc các ràng buộc cấu hình không được đáp ứng. Việc thiết lập các yêu cầu tài nguyên hợp lý, quản lý các ràng buộc một cách cẩn thận và có kế hoạch mở rộng cluster sẽ là chìa khóa để phòng tránh hiệu quả lỗi FailedScheduling, đảm bảo các ứng dụng luôn được triển khai một cách liền mạch và đáng tin cậy.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

kien-thuc-dich-vu

kien-thuc-kubernetes

text
icon popup single post

CẢM ƠN BẠN ĐÃ ĐÁNH GIÁ BÀI VIẾT

Vietnix sẽ luôn cố gắng cải thiện chất lượng dịch vụ mỗi ngày

ĐÓNG

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG