Вывести ноду на обслуживание и вернуть в работу

drain с нужными флагами, чем он отличается от cordon и почему старый --delete-local-data больше не работает

kubectl drain omsk-n3 --ignore-daemonsets --delete-emptydir-data --force
kubectl uncordon omsk-n3
kubectl cordon omsk-n3
kubectl get nodes -o wide

drain = cordon (пометить ноду как непригодную для планирования) плюс выселение уже работающих подов. Если нужно просто перестать подкидывать на ноду новое, а текущее оставить дорабатывать — хватит cordon, и это гораздо мягче.

Три флага почти всегда обязательны, иначе команда откажется работать:

  • --ignore-daemonsets — поды DaemonSet выселить невозможно в принципе, они тут же вернутся; без флага drain останавливается на первом же;
  • --delete-emptydir-data — согласие потерять содержимое томов emptyDir у выселяемых подов;
  • --force — согласие снести поды без контроллера (созданные напрямую), которые никто не пересоздаст.

Флаг переименовали: раньше это был --delete-local-data, в новых версиях kubectl его нет, и старые шпаргалки падают с ошибкой про неизвестный флаг. Замена — --delete-emptydir-data, смысл тот же.

drain уважает PodDisruptionBudget и будет ждать, если выселение нарушит доступность. Зависшая на минуты команда — чаще всего не проблема ноды, а честная работа PDB: смотреть надо на реплики приложения, а не на саму ноду.

После обслуживания uncordon легко забыть — нода останется в статусе SchedulingDisabled, кластер будет работать, но с меньшей ёмкостью, и выяснится это в самый неподходящий момент. kubectl get nodes показывает такое сразу.