PDB đặt sàn tối thiểu cho số Pod phải luôn sẵn sàng khi có voluntary disruption — tức là các thao tác do người/hệ thống chủ động thực hiện: kubectl drain khi bảo trì node, cluster autoscaler thu nhỏ, node pool upgrade.
kind: PodDisruptionBudget
spec:
minAvailable: 2 # hoac maxUnavailable: 1
selector:
matchLabels: { app: api }Khi drain node, API server từ chối eviction nào làm vi phạm PDB; lệnh drain chờ cho tới khi Pod thay thế lên đủ. Không có PDB thì drain một node có thể gỡ hết replica của service cùng lúc.
PDB KHÔNG bảo vệ khỏi involuntary disruption: node kernel panic, VM bị thu hồi, hết phần cứng, OOMKill, Pod bị evict do node pressure. Đó là những sự kiện không đi qua eviction API.
Hai bẫy vận hành:
- Deployment chỉ 1 replica mà đặt minAvailable: 1 → drain bị treo vĩnh viễn vì không thể evict Pod duy nhất. Muốn PDB có nghĩa thì phải chạy ≥2 replica.
- PDB chỉ đếm Pod READY. Nếu readiness probe hỏng hàng loạt, PDB coi như không còn Pod sẵn sàng và chặn mọi eviction.
Thường ghép PDB với pod anti-affinity để replica nằm khác node — nếu cùng dồn một node thì mất node là mất hết bất kể PDB.