Вступить в клуб →
сложнаявопросKubernetes и Helm

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 блокируется из-за локальных данных пода, а сообщение о бюджете вторично
  • Нужно удалить под напрямую: удаление не считается прерыванием и бюджет его не ограничивает, доступность при этом не пострадает

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела