K3S là một phiên bản rút gọn của Kubernetes với nhiều thành phần không cần thiết đã bị loại bỏ. Bài này sẽ hướng dẫn giải quyết khi một node trong cụm K3S có trạng thái NotReady thể gặp phải khi sử dụng K3S và cách khắc phục các vấn đề đó.

Trạng thái NotReady của Node có thể xảy ra nếu node không thể giao tiếp với cụm. Nếu node đang hoạt động và có kết nối mạng ổn định, bạn có thể kiểm tra thêm với lệnh kubectl describe node <node-hostname>
để xem chi tiết trạng thái của node, chẳng hạn như memory pressure, disk pressure, PID pressure và kiểm tra xem kubelet có khởi động thành công không. Có một số nguyên nhân phổ biến như:
Over-committing resources: Nếu tổng tài nguyên (CPU, RAM) của tất cả container vượt quá khả năng của node, có thể xảy ra tình trạng memory pressure hoặc CPU pressure, dẫn đến node không sẵn sàng. Để khắc phục, bạn có thể thay đổi cấu hình kernel và cho phép hệ thống xử lý việc over-committing tài nguyên với các dòng cấu hình sau trong tệp /etc/sysctl.d/50-kubelet.conf
:
kernel.panic=10
kernel.panic_on_oops=1
vm.overcommit_memory=1
Sau đó chạy sysctl --system -p
để áp dụng thay đổi và khởi động lại dịch vụ K3S nếu cần.
InvalidDiskCapacity: Lỗi này thường chỉ là cảnh báo và sẽ tự động hết sau một thời gian, tuy nhiên trong lúc nó xuất hiện, node có thể không khả dụng. Bạn có thể tham khảo thêm trên GitHub để biết thêm chi tiết.
Giới hạn tài nguyên cho pod: Để tránh việc over-committing tài nguyên trên node, bạn nên đặt giới hạn tài nguyên trong các file cấu hình triển khai dịch vụ để đảm bảo các pod không sử dụng quá mức tài nguyên của node.
Ba tùy chọn kernel trên giúp hệ thống duy trì trạng thái hoạt động khi gặp sự cố và cho phép cấp phát bộ nhớ linh hoạt hơn, giúp Kubernetes không bị gián đoạn khi tài nguyên bị overcommit:
Với kernel.panic=10
🔹 Tác dụng: Khi kernel gặp lỗi nghiêm trọng (kernel panic), hệ thống sẽ tự động khởi động lại sau 10 giây thay vì dừng hoàn toàn.
🔹 Tại sao giúp sửa lỗi? Nếu node bị lỗi do áp lực tài nguyên (MemoryPressure
, DiskPressure
, PIDPressure
), kernel có thể panic và hệ thống sẽ restart lại nhanh chóng, giúp node không bị treo trong trạng thái NotReady
quá lâu.
📌 Mặc định: 0
(không tự động khởi động lại khi kernel panic).
Với kernel.panic_on_oops=1
🔹 Tác dụng: Khi kernel gặp lỗi “Oops” (lỗi phần mềm nghiêm trọng nhưng không gây crash toàn bộ hệ thống), hệ thống sẽ coi đó là một kernel panic và khởi động lại.
🔹 Tại sao giúp sửa lỗi?
- Nếu kubelet hoặc các tiến trình hệ thống gặp lỗi do thiếu tài nguyên (
OOM
– Out of Memory), lỗi “Oops” có thể xảy ra, khiến node không hoạt động đúng. - Khi bật tùy chọn này, hệ thống sẽ khởi động lại thay vì tiếp tục chạy trong trạng thái lỗi, giúp Kubernetes nhanh chóng phục hồi node.
📌 Mặc định: 0
(lỗi “Oops” chỉ ghi log mà không khởi động lại).
Với vm.overcommit_memory=1
🔹 Tác dụng: Cho phép hệ thống cấp phát bộ nhớ vượt quá tổng lượng RAM vật lý (Overcommit).
0
: Cấp phát bộ nhớ bảo thủ, không cho phép cấp phát quá tổng RAM.1
: Cho phép overcommit bộ nhớ (có thể cấp phát nhiều hơn RAM thực tế, tin tưởng rằng không phải tất cả tiến trình đều sử dụng hết bộ nhớ của chúng).2
: Cấp phát bộ nhớ theo mô hình strict (yêu cầu đủ swap để cấp phát).
🔹 Tại sao giúp sửa lỗi?
- Kubernetes thường bị lỗi
OutOfMemory (OOM)
do container bị overcommit tài nguyên. - Khi bật
vm.overcommit_memory=1
, kernel vẫn cấp phát bộ nhớ cho tiến trình ngay cả khi tổng RAM bị overcommit, tránh tình trạng kubelet bị crash hoặc bị kill do thiếu bộ nhớ. - Điều này giúp Kubernetes tiếp tục hoạt động thay vì đưa node vào trạng thái
NotReady
.
📌 Mặc định: 0
(không cấp phát bộ nhớ quá mức).
🔥 Mình nói ngắn gọn lại tại sao các tùy chọn này giúp sửa lỗi?
✅ kernel.panic=10
& kernel.panic_on_oops=1
: Đảm bảo node tự động khởi động lại nếu gặp lỗi nghiêm trọng thay vì bị treo.
✅ vm.overcommit_memory=1
: Cho phép hệ thống cấp phát bộ nhớ linh hoạt hơn, giảm nguy cơ OutOfMemory (OOM) làm kubelet hoặc container bị crash.
⚠️ Lưu ý: Việc bật vm.overcommit_memory=1
có thể khiến hệ thống chạy vào trạng thái OOM nhanh hơn nếu không quản lý tốt tài nguyên. Giải pháp tốt hơn là giới hạn tài nguyên hợp lý trong Kubernetes.
Trên đây là một tập hợp các cách khắc phục các vấn đề liên quan đến trạng thái NotReady của node trong K3S, bao gồm việc cấu hình lại hệ thống, áp dụng giới hạn tài nguyên hợp lý cho các pod và theo dõi tình trạng của node thông qua các lệnh như kubectl describe node
.
Tham khảo https://dev.to/arthurkay/k3s-node-status-notready-4j3m