Kubernetes gán QoS class tự động dựa trên cách bạn khai requests và limits:
- Guaranteed — mọi container có đủ cả request và limit cho CPU + memory, và request bằng limit.
- Burstable — có ít nhất một request/limit được đặt, nhưng không thỏa điều kiện Guaranteed.
- BestEffort — không đặt request lẫn limit nào.
Khi node bị memory pressure, kubelet evict theo thứ tự: BestEffort trước → Burstable đang dùng vượt request → Guaranteed sau cùng. Trong cùng nhóm, Pod vượt request nhiều hơn bị chọn trước.
yaml
resources:
requests: { cpu: "500m", memory: "512Mi" }
limits: { cpu: "500m", memory: "512Mi" } # request == limit -> GuaranteedThực chiến: workload quan trọng (payment, auth) nên để Guaranteed cho memory để không bị chọn evict; batch job hoặc dev workload để Burstable/BestEffort.
Lưu ý QoS chi phối eviction do node pressure, khác với OOMKill — OOMKill xảy ra khi một container vượt memory limit của chính nó, không phụ thuộc node còn RAM hay không.