Перейти к основному содержанию

Kubernetes — ввод ноды в режим обслуживания

kubernetes k8s

В процессе администрирования кластера Kubernetes у системных администраторов часто возникают задачи по обслуживанию нод кластера. Иногда нужно выключить физическую ноду для технического обслуживания или апгрейда. Если нода виртуальная, то может понадобиться выключение для апгрейда системных ресурсов.

Краткая инструкция по вводу ноды в режим обслуживания и выводу из него.

Kubernetes — проект с открытым исходным кодом для оркестрации кластера контейнеров Linux. Kubernetes управляет и запускает контейнеры Docker на большом количестве хостов, а так же обеспечивает совместное размещение и репликацию большого количества контейнеров.

Имеем кластер из тридцати с лишним серверов.

kubectl get node

k8s

Ноду test-kube-worker01 планируется отключить и добавить немного памяти и процессоров. Нам нужно будет ввести ноду в режим обслуживания, выключить, добавить ресурсов, включить и вывести из режима обслуживания.

При этом мы хотим корректно завершить работу подов на выбранной ноде.

Ввод ноды в режим обслуживания

Выполняю команду:

kubectl drain --ignore-daemonsets --delete-local-data test-kube-worker01
  • kubectl drain — данная команда переводит ноду в режим обслуживания. Поды на указанной ноде корректно завершают работу, или киляются по таймауту, если они так и не успели выключиться. Не все поды завершают работу по умолчанию. Все поды, запущенные на выбранном узле, будут поставлены в состояние "Terminating" и перенесены на другие доступные узлы в кластере. Replication Controllers, ReplicaSets и Deployments, управляющие переносимыми подами, будут создавать новые поды на других узлах для поддержания желаемого количества запущенных подов.
  • ignore-daemonsets — этот параметр нужен для того, чтобы игнорировать поды, созданные через DaemonSets. DaemonSets-поды должны работать на каждом узле, например, для мониторинга или сетевых служб.
  • delete-local-data (deprecated) — удаляет поды, использующие EmptyDir (локальные данные будут удалены)

Flag --delete-local-data has been deprecated, This option is deprecated and will be deleted. Use --delete-emptydir-data.

k8s

Все поды, кроме созданных через DaemonSets, корректно завершили работу на выбранной ноде и будут подняты на какой-то другой.

kubectl get node

k8s

У ноды появился статус SchedulingDisabled. Значит, новые поды на ноде запускаться не будут.

k8s

У ноды 12 CPU и 24 ГБ RAM.

k8s

Список подов, которые остались на ноде. Они нам не помешают. Выключаем ноду, добавляем в неё CPU и память, включаем снова.

kubectl get node

k8s

Статус выключенной ноды: NotReady,SchedulingDisabled.

Спокойно добавляем CPU и память, включаем ноду.

kubectl get node

k8s

Дожидаемся, когда статус ноды сменится на Ready,SchedulingDisabled.

k8s

Ресурсов стало больше: 16 CPU и 40 ГБ RAM.

Вывод ноды из режима обслуживания

Выводим ноду из режима обслуживания.

kubectl uncordon test-kube-worker01

k8s

kubectl get node

k8s

Статус ноды Ready.

Примечания

Можно отслеживать количество подов на ноде командой:

kubectl get pods -o wide --all-namespaces | grep <имя_узла>

Посмотреть статус ноды:

kubectl get node | grep <имя_узла>

Запретить создавать новые поды на ноде, при этом старые поды не удалять:

kubectl cordon <имя_узла>

С помощью cordon можно предотвратить размещение планировщиком новых подов на хосте, при этом не оказывая влияние на существующие поды. Это полезно в качестве подготовительного шага перед перезагрузкой узла или другим обслуживанием. Статус ноды при этом Ready,SchedulingDisabled.

Теги

 

Похожие материалы

Ansible is being run in a world writable directory

Поймал WARNING при попытке запустить ansible-playbook. Горе-разработчики сделали очередную палку в колёса. Теперь нельзя просто так взять и запустить команду из директории, доступной всем на запись. Команда запустится, но конфигурационный файл ansible.cfg применён не будет.

Теги

Building Secure & Reliable Systems

Heather Adkins, Betsy Beyer, Paul Blankinship, Ana Oprea, Piotr Lewandowski, Adam Stubblefield
Может ли система считаться по-настоящему надёжной, если она не является фундаментально безопасной? Можно ли её считать безопасной, если она ненадёжна?

Теги