PodDisruptionBudget (PDB) в Kubernetes: обеспечение доступности приложений

Автор Itworkroom

Что такое PodDisruptionBudget?
PodDisruptionBudget (PDB) — это механизм в Kubernetes, который позволяет администраторам контролировать, сколько подов (pods) приложения могут быть одновременно недоступны во время плановых или внеплановых событий, таких как:
— Обновления узлов (node drain, node upgrades)
— Масштабирование кластера
— Ручное удаление подов (например, `kubectl delete pod`)

PDB гарантирует, что критически важные сервисы останутся работоспособными даже при обслуживании кластера.

Как работает PodDisruptionBudget?
PDB определяет **минимальное количество доступных подов (`minAvailable`) или максимальное количество недоступных подов (`maxUnavailable`) для приложения.

Примеры конфигурации PDB
1. Защита по `minAvailable`
«`yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-app-pdb
spec:
minAvailable: 2 # Должно быть не менее 2 подов в рабочем состоянии
selector:
matchLabels:
app: my-app
«`
→ Если в Deployment 3 пода, Kubernetes не позволит удалить больше 1, чтобы 2 оставались доступны.

2. Ограничение по `maxUnavailable`
«`yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-app-pdb
spec:
maxUnavailable: 1 # Не более 1 пода может быть недоступно
selector:
matchLabels:
app: my-app
«`
→ Если в Deployment 4 пода, можно удалить только 1.

Когда использовать PDB?
PDB особенно полезен для:
✅ Stateful-приложений (БД, Kafka, Elasticsearch) — чтобы избежать потери кворума.
✅ Сервисов с высокой доступностью (API, веб-серверы).
✅ Кандидатов на автоматическое масштабирование (HPA) — для предотвращения резкого снижения capacity.

Как проверить PDB?
1. Создать PDB:
«`bash
kubectl apply -f pdb.yaml
«`
2. Просмотреть статус:
«`bash
kubectl get pdb
«`
Вывод:
«`
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
my-app-pdb 2 N/A 1 5m
«`
3. **Попробовать нарушить бюджет** (например, drain узла):
«`bash
kubectl drain <node-name> —ignore-daemonsets
«`
→ Если нарушает PDB, операция будет заблокирована.

Ограничения PDB
— Не защищает от неплановых сбоев (например, падение узла).
— Работает только с добровольными удалениями (не принудительными `kubectl delete pod —force`).
— Для DaemonSet PDB применяется, но редко требуется (поскольку их поды не перемещаются).


PodDisruptionBudget — это простой, но мощный инструмент для управления доступностью приложений в Kubernetes. Настройка PDB помогает избежать неожиданных простоев во время обслуживания кластера, особенно для stateful- и high-availability сервисов.

> Совет: Всегда тестируйте PDB в staging-среде перед применением в production!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *