KubePodDisruptionBudgetViolated
A PodDisruptionBudget has fewer healthy pods than it promises to keep, so the application is already below its minimum safe availability.
| Severity | warning |
| Source | kube-state-metrics v2.x |
| Key metrics | kube_poddisruptionbudget_status_current_healthy, kube_poddisruptionbudget_status_desired_healthy |
What it means
A PDB states how many matching pods must stay available (minAvailable) or how many may be down (maxUnavailable). The disruption controller turns that into a desired healthy count. This alert fires when the number of Ready pods has stayed below that count for a sustained period.
A PDB only blocks voluntary evictions such as drains. It cannot stop crashes, OOM kills or node failures, and those are what usually cause this. The service is running with less redundancy than intended, and further disruption could cause an outage.
Common causes
- Pods crash looping, failing readiness probes or stuck on image pulls.
- A node failure took out several replicas at once (poor spreading across nodes or zones).
- Replicas scaled down below
minAvailableby a person, GitOps sync or HPA minimum. - New pods
Pendingbecause of capacity, quota or unbound volumes. - PDB selector matching more pods than intended, raising the required count.
First checks
- List affected PDBs and the gap:
kube_poddisruptionbudget_status_desired_healthy - kube_poddisruptionbudget_status_current_healthy > 0kubectl get pdb -A - See the selector and status:
kubectl -n <ns> describe pdb <pdb> - List matching pods that are not Ready:
kubectl -n <ns> get pods -l <selector> -o wide - Find out why they are unhealthy:
kubectl -n <ns> describe pod <pod> | sed -n '/Conditions/,$p' kubectl -n <ns> logs <pod> --previous --tail=50 - Check whether the unhealthy pods share a node or zone.
Fixing it
Fix whatever keeps pods from being Ready, following the pod-level alert that is almost certainly also firing. Pause node drains and cluster upgrades until the budget is met again. If replicas were scaled below the budget on purpose, adjust minAvailable to match, and add topology spread constraints so one node failure cannot violate it.
Related alerts
- KubePodDisruptionBudgetBlocksEviction: the budget has no room left for evictions.
- KubePodCrashLooping: a frequent root cause.
- KubePodNotReady: pods counted as unhealthy.