☸️ Безопасно удаляем worker ноду из кластера Kubernetes

Как безопасно удалить воркер хост

by itisgood

В этом руководстве вы узнаете, как изящно воркер ноду  из кластера Kubernetes.

При управлении кластером Kubernetes может возникнуть необходимость удаления воркер ноды.

Процесс удаления узла из кластера Kubernetes может несколько отличаться в зависимости от инструмента или платформы, используемой для развертывания кластера Kubernetes.

Например, процесс удаления из кластера Kubernetes с помощью kubeadm может отличаться от удаления рабочего узла из Kubernetes, развернутого с помощью GKE, Rancher, OpenShift, Kubermatic или kops.

Правильное удаление воркер хоста из кластера Kubernetes

В этом руководстве мы узнаем, как безопасно удалить хсот из кластера Kubernetes, созданного с помощью kubeadm.

Ранее мы уже рассмотрели обратный процесс:

☸️ Как добавить рабочие ноды в кластеры Kubernetes – IT is good

Подготовка хоста к удалению

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

Необходимо подготовиться к удалению, чтобы минимизировать риск простоя или проблем с производительностью Kubernetes.

Подготовка хоста к удалению из кластера Kubernetes включает в себя выполнение различных задач, таких как;

Убедиться, что в кластере имеется достаточно ресурсов для поддержки рабочих нагрузок кластера

Убедиться, что сервисы, размещенные на конкретном удаляемом хосте , распределены между узлами кластера Kubernetes.

Резервное копирование всех данных и конфигураций на удаляемой ноде.

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

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

kubectl drain – это команда, которая может использоваться для миграции узлов, работающих на узле, помеченном для вывода из эксплуатации, на другие узлы кластера.

Команда должна быть выполнена на плоскости управления Kubernetes/мастер-узле.

Синтаксис команды kubectl drain следующий;

kubectl drain NODE [options]

Перечислим хосты кластера;

kubectl get nodes

После этого можно выполнить приведенную ниже команду для слива данных с рабочего хоста, помеченного для вывода из эксплуатации.

Например, в приведенном выше примере выполним слив wk01;

kubectl drain wk01.itisgood-demo.com

Команда ‘drain’ дожидается плавного завершения.

Не следует работать с машиной до тех пор, пока команда не завершится.

Команда drain также оцепит узел. Это означает, что узел помечается как не планируемый и не позволяет планировщику Kubernetes размещать на нем новые стручки.

Если на узле есть управляемые набором демонов стручки, команда drain не удалит их.

Аналогично, если на узле есть стручки, которые не являются зеркальными стручками и не управляются контроллером репликации, набором реплик, набором демонов, набором состояний или заданием, то команда drain не удалит ни одной стручки, если только вы не используете опцию –force.

Параметр –force также позволит продолжить удаление, если управляющий ресурс одного или нескольких стручков отсутствует.

Пример вывода в моей команде drain выше;


node/wk01.itisgood-demo.com cordoned
error: unable to drain node "wk01.itisgood-demo.com" due to error:cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): calico-system/calico-node-g4vlv, calico-system/csi-node-driver-9b9xx, kube-system/kube-proxy-sn66b, continuing command...
There are pending nodes to be drained:
 wk01.itisgood-demo.com
cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): calico-system/calico-node-g4vlv, calico-system/csi-node-driver-9b9xx, kube-system/kube-proxy-sn66b

Чтобы принудительно слить узел, достаточно добавить в команду опции –force, –ignore-daemonsets.

kubectl drain wk01.itisgood-demo.com --force --ignore-daemonsets

Используйте эти флаги с осторожностью, так как это может привести к нарушению работы запущенных подсистем.

Как уже говорилось, пусть команда завершится изящно.

Обратите внимание, что этот процесс может занять некоторое время.

Дополнительные параметры можно узнать с помощью опции –help.

kubectl drain --help

Удаление воркер ноды

После того как узел был успешно выселен, можно удалить его из кластера.

Удалить выселенный узел из кластера можно с помощью команды kubectl delete.

kubectl delete node wk01.itisgood-demo.com

Подтверждение удаления ноды

Убедиться в том, что узел был удален, можно с помощью команды kubectl get nodes.

kubectl get nodes

wk01 больше нет!

Вы также можете проверить Pods;

kubectl get pod --all-namespaces

Для получения списка подов, работающих на определенном хосте;

kubectl get pods --field-selector spec.nodeName=<node-name>

Например:

kubectl get pods --field-selector spec.nodeName=wk01.itisgood-demo.com

Теперь вы должны успешно и удалить хост из кластера kubeadm Kubernetes.

Опциональный сброс узла

При желании можно удалить все конфигурации, связанные с K8s, на хосте.

Для этого войдите в систему хоста, с которого был произведен сброс, и выполните приведенную ниже команду;

kubeadm reset

Заключение

В итоге можно сделать вывод о том, какие шаги необходимо предпринять для изящного удаления рабочего узла из кластера;

  • убедиться, что кластер готов поддерживать рабочую нагрузку после удаления конкретного узла
  • удалить узел из кластера (kubectl drain <node-name>)
  • устранить все ограничения, которые могут препятствовать удалению узла
  • удалить узел из кластера.

На этом мы заканчиваем наше руководство по изящному удалению воркер ноды из кластера Kubernetes.

Loading

You may also like

Leave a Comment