Scheduling Preemption Eviction trong Kubernetes là gì?
Trong hệ sinh thái Kubernetes, quản lý tài nguyên hiệu quả đóng vai trò sống còn để đảm bảo tính ổn định và hiệu suất của hệ thống. Ba khái niệm quan trọng thường gặp khi làm việc với scheduler là scheduling, preemption và eviction. Vậy cụ thể scheduling preemption eviction là gì và ảnh hưởng như thế nào đến hệ thống Kubernetes?
1. Scheduling là gì?
Scheduling là quá trình mà Kubernetes Scheduler gán các Pod mới đến các Node phù hợp dựa trên:
-
Khả năng tài nguyên (CPU, RAM).
-
Ràng buộc (nodeSelector, affinity).
-
Toleration và taint.
-
Chính sách ưu tiên (PriorityClass).
Scheduler không khởi chạy Pod, nó chỉ chọn Node phù hợp – kubelet mới là thành phần thực sự chạy Pod đó.
2. Preemption là gì?
Khi Scheduler không tìm được Node phù hợp do thiếu tài nguyên, preemption có thể được kích hoạt (nếu bật). Cơ chế này cho phép:
-
Loại bỏ (evict) các Pod có PriorityClass thấp hơn để nhường chỗ cho Pod có ưu tiên cao hơn.
-
Scheduler sẽ chọn Node phù hợp nhất, tính toán số Pod cần preempt.
-
Preempted Pod bị đánh dấu “Terminating” và được loại khỏi Node.
Điều này đặc biệt hữu ích trong môi trường multi-tenant hoặc workload có tính ưu tiên rõ ràng (VD: dịch vụ người dùng vs batch job).
Lưu ý: Tính năng preemption chỉ hoạt động khi Pod được gán PriorityClass và tính năng preemption được bật.
3. Eviction là gì?
Eviction là quá trình Kubernetes buộc một Pod phải rời khỏi Node vì các lý do sau:
-
Node thiếu tài nguyên (out of memory, disk pressure).
-
Vi phạm chính sách PDB (PodDisruptionBudget).
-
Node bị cordon hoặc drain bởi admin.
Khác với preemption, eviction là hành động phản ứng của kubelet hoặc controller manager, không phải scheduler.
4. Mối quan hệ giữa Scheduling, Preemption và Eviction
Hiểu đúng scheduling preemption eviction là nắm rõ chuỗi tương tác giữa ba cơ chế sau:
-
Scheduler quyết định nơi đặt Pod → nếu không đủ tài nguyên → Preemption kích hoạt (nếu có Priority) → một số Pod bị loại để giải phóng tài nguyên.
-
Nếu sau khi Pod đã chạy, mà tài nguyên Node cạn kiệt → Eviction sẽ xảy ra để đảm bảo Node không bị chết.
5. Làm sao để kiểm soát Preemption và Eviction?
-
Sử dụng
PriorityClass
và đánh dấupreemptionPolicy: Never
nếu không muốn Pod preempt. -
Giới hạn tài nguyên Pod (
requests
vàlimits
) để tránh overcommit. -
Cấu hình
PodDisruptionBudget
để giới hạn số Pod bị evict trong cùng thời điểm. -
Theo dõi Node condition và event logs (
kubectl describe node
,kubectl get events
) để phát hiện lý do eviction.
Kết luận
Việc hiểu rõ scheduling preemption eviction giúp bạn chủ động hơn trong việc thiết kế kiến trúc hệ thống, đảm bảo tính sẵn sàng và hiệu suất của các workload chạy trên Kubernetes. Đây là một phần quan trọng không thể bỏ qua trong kỹ năng của một SysAdmin hoặc DevOps Engineer hiện đại.
Nếu bạn đang tìm cách tối ưu cluster Kubernetes hoặc xây dựng chính sách tài nguyên hợp lý, hãy theo dõi thêm các bài viết tại Sysadmin Skills – nơi chia sẻ kiến thức thực chiến dành riêng cho dân hệ thống!