KubeErrors

Cannot evict pod: A PodDisruptionBudget is refusing to allow the eviction

Cannot evict pod as it would violate the pod's disruption budget means a PDB is doing its job — evicting this pod would take the workload below its guaranteed availability. Drains block until that changes.

Applies to: All Kubernetes versions

What it means

A PodDisruptionBudget declares how much of a workload may be voluntarily disrupted at once, through minAvailable or maxUnavailable. The eviction API — which kubectl drain uses — checks the budget and refuses evictions that would breach it. A blocked drain is therefore usually correct behaviour, and the right response is to make the budget satisfiable rather than to bypass it. It becomes a genuine deadlock in a few specific configurations: a single-replica workload with minAvailable: 1 can never be evicted, and neither can a workload whose pods are already unhealthy, since evicting one would drop available replicas below the floor.

Most common causes

How to diagnose it

  1. Read the budget's current state: kubectl get pdb -n NAMESPACE shows allowed disruptions, which is the number that matters.
  2. Check pod readiness: kubectl get pods -l SELECTOR. Unready pods are the most common reason the budget has no headroom.
  3. Check what the PDB selects: kubectl describe pdb PDB -n NAMESPACE.
  4. Check whether replacements can be scheduled — if not, the budget will never recover on its own.
  5. Check for other drains in progress against the same workload.

How to fix it

  1. Fix the unready pods so the budget has headroom. This is the correct fix in most cases.
  2. Scale the workload up temporarily so the budget permits a disruption.
  3. Correct a PDB that makes disruption impossible — minAvailable: 1 on a single replica is not a meaningful budget, it is a lock.
  4. Ensure replacement pods can be scheduled somewhere, or the drain cannot make progress.
  5. Use --disable-eviction on a drain only as a deliberate, understood override. It bypasses the protection entirely, which is occasionally right and usually not.

Notes

A PDB only constrains voluntary disruptions. A node that fails outright takes its pods with it regardless of any budget, so a PDB is not a guarantee of availability — it is a guarantee about the operations Kubernetes performs on your behalf.

Related

Sources

Pages on this site are written with AI assistance from the primary sources listed on each page, then checked against those sources before publishing.