Kubetier
← Permission Reference
T2

create poddisruptionbudgets

A PodDisruptionBudget with maxUnavailable=0 or minAvailable=100% permanently blocks node drains and rolling updates.

kubectl drain fails, Deployments cannot roll out, and cluster upgrades stall.

This is a persistent operational DoS, not a privilege escalation.

API Group
policy
Scope
namespaced
Audit Level
Request

Escalation Paths

  1. Create a PodDisruptionBudget whose selector matches the attacker pod, with minAvailable 1 or maxUnavailable 0.

  2. The eviction API refuses to remove the pod and returns 429, so kubectl drain retries and then gives up.

  3. A bare pod is enough.

    The budget reports disruptionsAllowed 0 with reason InsufficientPods, which blocks eviction just as effectively.

  4. This binds the Eviction API only.

    Deleting the pod outright, drain --disable-eviction, deleting the budget, or deleting the owning controller all get past it.

  5. The value is delay and friction during maintenance or incident response, not durable persistence.

Additional rights needed:

none

Note:

Distinct from bypassing a PodDisruptionBudget by deleting a protected pod outright.

Here the budget is the attacker's own tool.

Cordoning a node does not evict anything, so only eviction-based workflows are affected.

K8s docs ↗
K8s docs ↗