Перейти к содержимому

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

Предисловие ​

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

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

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

Рекомендуется использовать мягкий способ удаления, особенно в высоконагруженных кластерах. для этого выполните действия:

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

Внимание!

Жесткий способ подразумевает, удаление без ручного переноса реплик и приложений. Что может привести к простоям, особенно в нагруженных средах.

Удаление ​

Есть две опции удаления:
1. Удалить узел и получить новый взамен
2. Удалить узел, уменьшая число узлов в WorkerPool (Узел в взамен удаленного создан не будет)

Заметка

При удалении с уменьшение числа узлов, удостоверьтесь, что сумма реплик WorkerPool целевого кластера после уменьшения будет все еще больше 3

Удаление с помощью UI ​

Войдите в Web-интерфейс bootsman и на главной выберете "Manage"

Manage Clusters

Выберите интересующий кластер и нажмите на его имя. Управления узлами для управляющего и подчиненного идентично.

Choose Clusters

Для удаления узла и получение нового используйте опцию "Delete" в панели управления узлом. ​

Recreate Node

Для удаления узла с уменьшением общего числа узлов. ​

Delete Node

Удаление с помощью изменения Yaml-манифестов ​

Пример работы с объектами Kubernetes будет производитсяс помощью kubectl, но вы можете использовать и другие способы.

Получите список всех узлов и найдите интересующий вас узел

bash
kubectl get machine.cluster.x-k8s.io

Интересующий узел далее будет указан как ${NODE_NAME}

Для удаления и создание нового узла взамен ​

bash
kubectl delete machine.cluster.x-k8s.io {++${NODE_NAME}++}

Для удаления с уменьшением общего числа узлов. ​

Проставьте аннотацию для удаления. Это шаг еще не запустит удаление.

bash
kubectl annotate machine.cluster.x-k8s.io {++${NODE_NAME}++} cluster.x-k8s.io/delete-machine="true"

Уменьшите число реплик в Workerpool, к которому принадлежит ${NODE_NAME}

bash
kubectl patch workerpool.provisioning.bootsman.tech  --type=merge -p="{\"spec\": {\"replicas\": {++${NEW_REPLICA_COUNT}++} }}" \
$(kubectl get machinedeployment.cluster.x-k8s.io -o jsonpath='{.metadata.labels.provisioning\.bootsman\.tech/workerpool}' \
$(kubectl get machine.cluster.x-k8s.io {++${NODE_NAME}++} -o jsonpath='{.metadata.labels.cluster\.x-k8s\.io/deployment-name}'))

Где: - <mark>${NEW_REPLICA_COUNT}</mark> - Уменьшенное число реплик на 1

Команда Боцман