🛠️ kubectl drain не проходит из-за PodDisruptionBudget
Deployment имеет 3 replicas.
PDB:
minAvailable: 2
Кажется:
один Pod всегда можно evict’ить.
Не всегда.
Если все три healthy:
currentHealthy: 3 desiredHealthy: 2 disruptionsAllowed: 1
Но если один Pod уже NotReady:
currentHealthy: 2 desiredHealthy: 2 disruptionsAllowed: 0
Реплик всё ещё три.
Но запас availability уже исчерпан.
Следующая voluntary eviction нарушит budget.
Что проверить:
kubectl get pdb -A kubectl describe pdb -n
Смотрите:
— minAvailable / maxUnavailable; — currentHealthy; — desiredHealthy; — disruptionsAllowed; — expectedPods.
И отдельно — какие Pod реально Ready=True.
PDB регулирует voluntary disruptions.
kubectl drain учитывает его через eviction-механику.
Но PDB не защищает от всех involuntary failures.
Ещё один вопрос:
есть ли capacity для replacement Pod?
Если новый Pod остаётся Pending, budget может не восстановиться.
Также проверьте:
unhealthyPodEvictionPolicy
Default — IfHealthyBudget.
AlwaysAllow может упростить eviction unhealthy running Pod, но это не универсальная production-настройка.
Не начинайте с удаления PDB и не используйте --disable-eviction как стандартный обход.
Диагностический порядок:
drain error → PDB → currentHealthy → desiredHealthy → disruptionsAllowed → Ready Pod → capacity → unhealthyPodEvictionPolicy
Сохраните проверку PDB перед maintenance и обновлением worker nodes.
🔹🔹🔹🔹