Ручное удаление нод из кластера
Предисловие
Боцман в стандартном исполнении реализует подход cattle для управления инфраструктурой. Это значит, что он относится к серверам, на которых он работает, как к стаду. При запуске процесса уменьшения количества серверов (ScaleDown) он выберет рандомный сервер и удалит его из кластера.
Но иногда требуется контролировать, какой именно сервер будет удалён из кластера. Такой подход называется pet. С этой инструкцией вы сможете самостоятельно управлять процессом удаления машин из кластера.
Подготовка к удалению
Для начала подготовьте кластер к удалению одной из машин. Это стандартные действия.
- Отправить машину в cordon
- Отправить машину в drain
- Перевезти с неё реплики Longhorn
Помимо этих действий измените стандартное поведение боцмана при удалении машин - переключите политику удаления нод.
Определите имя MachineSet
kubectl get 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
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
Очистка кластера от зарегистрированного агента
Для очистки отключите host-agent на сервере и удалите сущности внутри кластера.
Описывать удаление каждого ресурса не имеет смысла, работает алгоритм:
kubectl get %RESOURCE_NAME%
kubectl delete %RESOURCE_NAME%
Типы ресурсов, подлежащих удалению:
- ServiceAccount
- ClusterRoleBinding
- ClusterRole
- Secret
- csr
- ByoHost
Затем перезапустите byoh-controller-manager.