Ответ
Pod Disruption Budget (PDB) — это объект Kubernetes API, который позволяет администраторам декларативно задавать ограничения на количество одновременно недоступных подов определенного приложения во время добровольных нарушений (voluntary disruptions).
Ключевое различие:
- Добровольные нарушения: Запланированные события, инициируемые администратором (обновление узла, дренайн узла, обновление Deployment).
- Недобровольные нарушения: Непредвиденные сбои (падение узла, исчерпание ресурсов). PDB не защищает от них.
PDB гарантирует, что во время плановых работ будет доступно как минимум (или максимум недоступно) определенное количество подов.
Пример PDB для приложения с 3 репликами:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-webapp-pdb
spec:
selector:
matchLabels:
app: nginx-webapp
minAvailable: 2 # Всегда должно быть доступно не менее 2 подов из 3.
# Альтернатива: maxUnavailable: 1 (максимум 1 под может быть недоступен)
Как это работает на практике:
- При попытке дренайна узла
kubectl drain <node-name>планировщик Kubernetes проверяет все PDB в кластере. - Если вытеснение пода нарушит условие
minAvailableилиmaxUnavailableкакого-либо PDB, операция дренайна блокируется для этого пода. - Дренайн продолжится только после того, как контроллер развертывания (например, Deployment) запустит новую реплику пода на другом узле и она станет готовой, тем самым снова соблюдая условия PDB.
Использование: PDB критически важен для stateful-приложений (базы данных, очереди) и любого сервиса, где требуется гарантировать минимальный уровень доступности во время планового обслуживания кластера.