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

Ручное удаление нод из кластера

Предисловие

Боцман в стандартном исполнении реализует подход cattle для управления инфраструктурой. Это значит, что он относится к серверам, на которых он работает, как к стаду. При запуске процесса уменьшения количества серверов (ScaleDown) он выберет рандомный сервер и удалит его из кластера.

Но иногда требуется контролировать, какой именно сервер будет удалён из кластера. Такой подход называется pet. С этой инструкцией вы сможете самостоятельно управлять процессом удаления машин из кластера.

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

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

  • Отправить машину в cordon
  • Отправить машину в drain
  • Перевезти с неё реплики Longhorn

Помимо этих действий измените стандартное поведение боцмана при удалении машин - переключите политику удаления нод.

Определите имя MachineSet

kubectl get ms
В выводе команды скопируйте имя текущего работающего MS.

Пример вывода команды:

NAME                                CLUSTER        REPLICAS   READY   AVAILABLE   AGE   VERSION
bootsman-201-md-0-5669468d6xslhcs   bootsman-201   4          4       4           21h   v1.27.6
bootsman-201-md-0-f7d65fcc6xcccl8   bootsman-201   0          0       0           21h   v1.27.4
В нашем примере это - bootsman-201-md-0-5669468d6xslhcs Далее выполните команду на замену политики:

kubectl patch ms bootsman-201-md-0-5669468d6xslhcs --type merge -p '{"spec":{"deletePolicy": "Newest"}}'
Теперь можно удалить сервер.

Удаление сервера

Процесс прост и состоит из двух команд. Сначала узнайте, какую именно машину хотите удалить, следующей командой:

kubectl get machine
Пример вывода команды:
NAME                                      CLUSTER        NODENAME                        PROVIDERID                                    PHASE     AGE     VERSION
bootsman-201-control-plane-4dljr          bootsman-201   worker-9.bootsman-redos-732-2   byoh://worker-9.bootsman-redos-732-2/jz05g3   Running   22h     v1.27.6
bootsman-201-control-plane-5rbct          bootsman-201   worker-0.bootsman-redos-732-2   byoh://worker-0.bootsman-redos-732-2/aa5rh1   Running   22h     v1.27.6
bootsman-201-control-plane-bx2c8          bootsman-201   worker-8.bootsman-redos-732-2   byoh://worker-8.bootsman-redos-732-2/yxoe34   Running   21h     v1.27.6
bootsman-201-md-0-5669468d6xslhcs-hjlx5   bootsman-201   worker-7.bootsman-redos-732-2   byoh://worker-7.bootsman-redos-732-2/pfc3ru   Running   81m     v1.27.6
bootsman-201-md-0-5669468d6xslhcs-n5spd   bootsman-201   worker-1.bootsman-redos-732-2   byoh://worker-1.bootsman-redos-732-2/zohulq   Running   3h11m   v1.27.6
bootsman-201-md-0-5669468d6xslhcs-ps7bj   bootsman-201   worker-4.bootsman-redos-732-2   byoh://worker-4.bootsman-redos-732-2/74h5qi   Running   115m    v1.27.6
bootsman-201-md-0-5669468d6xslhcs-ps32j   bootsman-201   worker-5.bootsman-redos-732-2   byoh://worker-4.bootsman-redos-732-2/77h5qi   Running   116m    v1.27.6

где NODENAME это хостнейм сервера. Скопируйте имя нужного из графы NAME.

Далее пометьте этот сервер на удаление:

kubectl annotate machine bootsman-201-md-0-5669468d6xslhcs-n5spd cluster.x-k8s.io/delete-machine="100"

Теперь можете уменьшить количество воркеров. Определите имя MachineDeployment:

kubectl get md

Пример вывода команды:

NAME                CLUSTER        REPLICAS   READY   UPDATED   UNAVAILABLE   PHASE     AGE   VERSION
bootsman-201-md-0   bootsman-201   4          4       4         0             Running   22h   v1.27.6
И уменьшите количество реплик:

kubectl scale md bootsman-201-md-0 --replicas=3
Процесс удаления завершён. Подождите несколько минут, и машина будет очищена от компонентов k8s.

Очистка кластера от зарегистрированного агента

Для очистки отключите host-agent на сервере и удалите сущности внутри кластера.

Описывать удаление каждого ресурса не имеет смысла, работает алгоритм:

kubectl get %RESOURCE_NAME%
kubectl delete %RESOURCE_NAME%

Типы ресурсов, подлежащих удалению:

  • ServiceAccount
  • ClusterRoleBinding
  • ClusterRole
  • Secret
  • csr
  • ByoHost

Затем перезапустите byoh-controller-manager.