kubectl drain не может выселить под из-за PodDisruptionBudget
Идёт обновление нод. У платёжного сервиса две реплики и такой бюджет прерываний:
apiVersion: policy/v1
kind: PodDisruptionBudget
spec:
minAvailable: 2
selector:
matchLabels:
app: payments
Один под сервиса живёт на выводимой ноде. Команда kubectl drain node-07 --ignore-daemonsets висит и повторяет:
evicting pod default/payments-6c4f8d9b7-tq5vw
error when evicting pod "payments-6c4f8d9b7-tq5vw": Cannot evict pod as it would violate the pod's disruption budget.
Что происходит и что здесь правильно сделать?
- Бюджет прерываний влияет только на обновление Deployment и к выводу ноды отношения не имеет: чтобы drain продолжился, его запускают с флагом `--force`, который выселяет поды в обход бюджета
- Бюджет требует держать доступными все две реплики, поэтому добровольное выселение невозможно в принципе — нужно увеличить число реплик или ослабить бюджет до одной доступной
- Достаточно добавить `--delete-emptydir-data`: drain блокируется из-за локальных данных пода, а сообщение о бюджете вторично
- Нужно удалить под напрямую: удаление не считается прерыванием и бюджет его не ограничивает, доступность при этом не пострадает
