Предисловие
Иногда нет возможности разместить серверы внутри одного broadcast домена, тогда можно добавить машину самостоятельно, без механизма auto discovery.
Для выполнения этой инструкции понадобится:
- openssl
- base64
- kubectl
- kubeconfig администратора
- Адрес (K8SCPIP) и CA controlplane
Подготовка сервера
Подробно процесс подготовки описан в разделе Требования к подготовке инфраструктуры. Выполните все шаги из той инструкции.
Генерация конфигурации для host-agent
Генерация нового приватного ключа
Генерация CSR и кодирование его в base64
Внимание!
При генерации CSR очень важно заполнить поля Organization name (O) и Common Name (CN).
Organization Name всегда должен быть равен byoh:hosts
Common Name заполните по следующему паттерну byoh:host:HOSTNAME
Запустите генерацию CSR:
Появится помощник с интерактивными вопросами. Для регистрации сервера в кластере заполните их без ошибок.
Ответы на интерактивные вопросы
Organization Name (eg, company) [Internet Widgits Pty Ltd]: byoh:hosts
Common Name (e.g. server or YOUR name) []: byoh:host:HOSTNAME
Получите содержимое запроса сертификата в base64:
Получившуюся строку сохраните, она понадобится позже. В месте её использования будет переменнаяCSR_BASE64.
Создайте CertificateSigningRequest
---
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: byoh-csr-HOSTNAME
spec:
request: CSR_BASE64
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
expirationSeconds: 31536000
Примените его в менеджмент кластере с помощью kubectl apply.
Проверьте его статус:
В правой колонке должно быть Approved, Issued.Получите сертификат
Получившуюся строку сохраните, она понадобится далее. В месте её использования будет переменная CERT_BASE64.
Закодируйте ключ в base64
Получившуюся строку сохраните, она понадобится далее. В месте её использования будет переменная KEY_BASE64.Создаем kubeconfig для машины
Переменные API_SERVER_ADDRESS и API_SERVER_CA можно скопировать с уже зарегистрированных машин или в cluster-admin kubeconfig, который хранится на любом мастере по пути /etc/kubernetes/admin.conf
Заметка
kubeconfig из веб-интерфейса rancher не подойдёт.
---
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: API_SERVER_CA
server: API_SERVER_ADDRESS
name: default-cluster
contexts:
- context:
cluster: default-cluster
namespace: default
user: default-auth
name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
user:
client-certificate-data: CERT_BASE64 # можно получить с помощью kubectl get csr byoh-csr-$hostname -o jsonpath='{.status.certificate}'
client-key-data: KEY_BASE64 # можно получить с помощью cat $hostname.key | base64 | tr -d '\n'
Сохраните этот конфиг на машине, которую планируете завести в кластер по пути /root/.byoh/config.
Владелец и группа файла должны быть root, права 0600(rw-------).
Запустите агент с помощью systemctl start host-agent. Проверьте в менеджмент кластере появление машины с помощью
Ручное удаление узлов из кластера
Предисловие
Боцман в стандартном исполнении реализует подход cattle для управления инфраструктурой. Это значит, что он относится к серверам, на которых он работает, как к стаду.
При запуске процесса уменьшения количества серверов (ScaleDown) он выберет рандомный сервер и удалит его из кластера.
Но иногда требуется контролировать, какой именно сервер будет удалён из кластера. Такой подход называется pet.
С этой инструкцией вы сможете самостоятельно управлять процессом удаления машин из кластера.
Подготовка к удалению
Рекомендуется использовать мягкий способ удаления, особенно в высоконагруженных кластерах. для этого выполните действия:
- Отправить машину в
cordon - Отправить машину в
drain - Перевезти с неё реплики
Longhorn
Внимание!
Жесткий способ подразумевает, удаление без ручного переноса реплик и приложений. Что может привести к простоям, особенно в нагруженных средах.
Удаление
Есть две опции удаления:
1. Удалить узел и получить новый взамен
2. Удалить узел, уменьшая число узлов в WorkerPool (Узел в взамен удаленного создан не будет)
Заметка
При удалении с уменьшение числа узлов, удостоверьтесь, что сумма реплик WorkerPool целевого кластера после уменьшения будет все еще больше 3
Удаление с помощью UI
Войдите в Web-интерфейс bootsman и на главной выберете "Manage"
Выберите интересующий кластер и нажмите на его имя. Управления узлами для управляющего и подчиненного идентично.
Для удаления узла и получение нового используйте опцию "Delete" в панели управления узлом.
Для удаления узла с уменьшением общего числа узлов.
Удаление с помощью изменения Yaml-манифестов
Пример работы с объектами Kubernetes будет производитсяс помощью kubectl, но вы можете использовать и другие способы.
Получите список всех узлов и найдите интересующий вас узел
Интересующий узел далее будет указан как NODE_NAMEДля удаления и создание нового узла взамен
Для удаления с уменьшением общего числа узлов.
Проставьте аннотацию для удаления. Это шаг еще не запустит удаление.
Уменьшите число реплик в Workerpool, к которому принадлежит NODE_NAME
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}'))
NEW_REPLICA_COUNT - Уменьшенное число реплик на 1



