kubectl drain omsk-n3 --ignore-daemonsets --delete-emptydir-data --forcekubectl uncordon omsk-n3kubectl cordon omsk-n3
kubectl get nodes -o widedrain = 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 показывает такое сразу.