Масштабирование и переход single-master/multi-master
Режимы работы control plane
Deckhouse Kubernetes Platform (DKP) поддерживает два режима работы control plane:
- Single-master:
kube-apiserverиспользует только локальный экземпляр etcd;- на узле запускается прокси-сервер, который принимает запросы на
localhost; kube-apiserver“слушает” только на IP-адресе master-узла.
- Multi-master:
kube-apiserverработает со всеми экземплярами etcd в кластере;- на всех узлах настраивается дополнительный прокси:
- если локальный
kube-apiserverнедоступен, запросы автоматически перенаправляются на другие узлы;
- если локальный
- это обеспечивает отказоустойчивость и возможность масштабирования.
Автоматическое масштабирование master-узлов
Deckhouse Kubernetes Platform (DKP) позволяет автоматически добавлять и удалять master-узлы, используя лейбл node-role.kubernetes.io/control-plane="".
Автоматическое управление master-узлами:
- Добавление лейбла
node-role.kubernetes.io/control-plane=""на узел:- разворачиваются все компоненты control plane;
- узел подключается к etcd-кластеру;
- автоматически регенерируются сертификаты и конфигурационные файлы.
- Удаление лейбла
node-role.kubernetes.io/control-plane=""с узла:- компоненты control plane удаляются;
- узел корректно исключается из etcd-кластера;
- обновляются связанные конфигурационные файлы.
Переход с 2 master-узлов до 1 требует ручной корректировки etcd. В остальных случаях изменение количества master-узлов выполняется автоматически.
Типовые сценарии масштабирования
Для стабильности кластера необходимо поддерживать нечётное число узлов с etcd для обеспечения кворума.
Deckhouse Kubernetes Platform (DKP) поддерживает автоматическое и ручное масштабирование master-узлов как в облачных, так и в bare-metal кластерах:
-
Миграция single-master → multi-master:
- добавьте один или несколько новых master-узлов;
- установите им лейбл
node-role.kubernetes.io/control-plane=""; - DKP автоматически:
- развернёт все компоненты control plane;
- настроит узлы для работы с etcd-кластером;
- синхронизирует сертификаты и конфигурационные файлы.
-
Миграция multi-master → single-master:
- снимите лейблы
node-role.kubernetes.io/control-plane=""иnode-role.kubernetes.io/master=""со всех лишних master-узлов; - для bare-metal кластеров:
- чтобы корректно исключить узлы из etcd:
- выполните команду
d8 k delete node <имя-узла>; - выключите соответствующие виртуальные машины или серверы.
- выполните команду
- чтобы корректно исключить узлы из etcd:
Важно. В облачных кластерах все необходимые действия автоматически выполняются с помощью команды
dhctl converge. - снимите лейблы
-
Изменение числа master-узлов в облачном кластере:
- Аналогично добавлению/удалению узлов, но чаще всего выполняется с помощью команды
dhctl convergeили вручную через облачные инструменты.
- Аналогично добавлению/удалению узлов, но чаще всего выполняется с помощью команды
-
Миграция multi-master (3 master-узла) → 2 master-узла и 1 arbiter-узел в облачном кластере:
-
В настройках облачного провайдера для параметра
masterNodeGroup.replicasукажите2и создайте NodeGroup для arbiter-узла. Аналогично добавлению/удалению узлов, но чаще всего выполняется с помощью командыdhctl convergeили вручную через облачные инструменты.Подробнее о настройке режима HA c двумя master-узлами и arbiter-узлом в облачном кластере можно почитать в разделе Управление режимом HA.
-
-
Миграция multi-master (3 master-узла) → 2 master-узла и 1 arbiter-узел в статическом кластере:
- создайте NodeGroup для arbiter-узла и добавьте узел в кластер;
- снимите лейблы
node-role.kubernetes.io/control-plane="",node-role.kubernetes.io/master=""иnode.deckhouse.io/group-""с лишнего master-узла; - чтобы корректно исключить узел из etcd в bare-metal кластере:
- выполните команду
d8 k delete node <имя-узла>; - выключите соответствующую виртуальную машину или сервер.
Подробнее о настройке режима HA c двумя master-узлами и arbiter-узлом в статическом кластере можно почитать в разделе Управление режимом HA.
- выполните команду
Удаление роли master с узла без удаления самого узла
Если в кластере используется модуль stronghold, перед изменением master-узлов убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом изменений настоятельно рекомендуется создать резервную копию данных модуля.
Если необходимо вывести узел из состава master-узлов, но сохранить его в кластере для других задач, выполните следующие шаги:
-
Снимите лейблы, чтобы узел больше не рассматривался как master:
d8 k label node <имя-узла> node-role.kubernetes.io/control-plane- d8 k label node <имя-узла> node-role.kubernetes.io/master- d8 k label node <имя-узла> node.deckhouse.io/group- -
Убедитесь, что удаляемый master-узел пропал из списка членов кластера etcd:
Пример:
for pod in $(d8 k -n kube-system get pod -l component=etcd,tier=control-plane -o name); do d8 k -n kube-system exec "$pod" -- etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/ca.key \ --endpoints https://127.0.0.1:2379/ member list -w table if [ $? -eq 0 ]; then break fi done -
Удалите статические манифесты компонентов control plane, чтобы они больше не запускались на узле и лишние файлы PKI. Для этого зайдите на узел и выполните следующие команды:
rm -f /etc/kubernetes/manifests/{etcd,kube-apiserver,kube-scheduler,kube-controller-manager}.yaml rm -f /etc/kubernetes/{scheduler,controller-manager}.conf rm -f /etc/kubernetes/authorization-webhook-config.yaml rm -f /etc/kubernetes/admin.conf /root/.kube/config rm -rf /etc/kubernetes/deckhouse rm -rf /etc/kubernetes/pki/{ca.key,apiserver*,etcd/,front-proxy*,sa.*} rm -rf /var/lib/etcd/member/
После выполнения этих шагов узел больше не будет считаться master-узлом, но останется в кластере и может использоваться для других задач.
Изменение образа ОС master-узлов в мультимастерном кластере
Способ изменения ОС зависит от типа кластера: в облачном кластере узлы заменяются через dhctl converge, в статическом — вручную, по одному узлу.
В облачном кластере
Чтобы изменить образ ОС master-узлов в облачном мультимастерном кластере, выполните следующие шаги:
Если в кластере используется модуль stronghold, перед изменением master-узлов убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом изменений настоятельно рекомендуется создать резервную копию данных модуля.
- Сделайте резервную копию etcd и директории
/etc/kubernetes. - Скопируйте полученный архив за пределы кластера (например, на локальную машину).
- Убедитесь, что в кластере нет алертов, которые могут помешать обновлению master-узлов.
-
Убедитесь, что очередь Deckhouse пуста.
d8 system queue list -
На локальной машине авторизуйтесь в хранилище образов контейнеров (измените адрес хранилища образов при необходимости):
docker login registry.deckhouse.ruВ процессе авторизации необходимо будет ввести
UsernameиPassword.При авторизации в хранилище
registry.deckhouse.ruполеUsernameдолжно иметь значениеlicense-token, аPassword— содержать ключ лицензии Deckhouse Kubernetes Platform. -
На локальной машине запустите контейнер установщика DKP соответствующей редакции и версии (измените адрес хранилища образов при необходимости):
DH_VERSION=$(d8 k -n d8-system get deployment deckhouse -o jsonpath='{.metadata.annotations.core\.deckhouse\.io\/version}') DH_EDITION=$(d8 k -n d8-system get deployment deckhouse -o jsonpath='{.metadata.annotations.core\.deckhouse\.io\/edition}' | tr '[:upper:]' '[:lower:]' ) docker run --pull=always -it -v "$HOME/.ssh/:/tmp/.ssh/" \ registry.deckhouse.ru/deckhouse/${DH_EDITION}/install:${DH_VERSION} bash -
В контейнере с инсталлятором выполните следующую команду, чтобы проверить состояние перед началом работы:
dhctl terraform check --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> \ --ssh-host <MASTER-NODE-0-HOST> --ssh-host <MASTER-NODE-1-HOST> --ssh-host <MASTER-NODE-2-HOST>Ответ должен сообщить, что Terraform не нашёл расхождений и изменений не требуется.
-
В контейнере с инсталлятором выполните следующую команду и укажите необходимый образ ОС в параметре
masterNodeGroup.instanceClass(укажите адреса всех master-узлов в параметре--ssh-host):dhctl config edit provider-cluster-configuration --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> \ --ssh-host <MASTER-NODE-0-HOST> --ssh-host <MASTER-NODE-1-HOST> --ssh-host <MASTER-NODE-2-HOST> -
В контейнере с инсталлятором выполните следующую команду, чтобы провести обновление узлов:
Внимательно изучите действия, которые планирует выполнить
converge, когда запрашивает подтверждение.При выполнении команды узлы будут заменены на новые с подтверждением на каждом узле. Замена будет выполняться по очереди в обратном порядке (2,1,0).
dhctl converge --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> \ --ssh-host <MASTER-NODE-0-HOST> --ssh-host <MASTER-NODE-1-HOST> --ssh-host <MASTER-NODE-2-HOST>Следующие действия выполняйте поочерёдно на каждом master-узле, начиная с узла с наивысшим номером (с суффиксом 2) и заканчивая узлом с наименьшим номером (с суффиксом 0).
-
На созданном узле откройте журнал systemd-юнита
bashible.service. Дождитесь окончания настройки узла — в журнале должно появиться сообщениеnothing to do:journalctl -fu bashible.service -
Проверьте, что узел etcd отобразился в списке узлов кластера:
for pod in $(d8 k -n kube-system get pod -l component=etcd,tier=control-plane -o name); do d8 k -n kube-system exec "$pod" -- etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/ca.key \ --endpoints https://127.0.0.1:2379/ member list -w table if [ $? -eq 0 ]; then break fi done -
Убедитесь, что
control-plane-managerфункционирует на узле.d8 k -n kube-system wait pod --timeout=10m --for=condition=ContainersReady \ -l app=d8-control-plane-manager --field-selector spec.nodeName=<MASTER-NODE-N-NAME> -
Выполните проверку очереди Deckhouse и убедитесь, что отсутствуют ошибки, с помощью команды:
d8 system queue list - Перейдите к обновлению следующего узла.
В статическом кластере
Инструкция ниже описывает замену ОС на master-узлах, которые добавлены в кластер вручную с помощью скрипта bootstrap.sh. Выполняйте шаги поочерёдно для каждого master-узла и переходите к следующему только после того, как текущий узел вернулся в кластер и стал работоспособен.
Если master-узлы управляются Cluster API Provider Static (CAPS) через ресурсы StaticInstance, не используйте эту инструкцию. Сначала удалите StaticInstance, установите требуемую ОС и снова добавьте узел в NodeGroup master.
Если в кластере используется модуль stronghold, перед добавлением или удалением master-узла убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом любых изменений настоятельно рекомендуется создать резервную копию данных модуля.
Чтобы изменить ОС вручную добавленного master-узла, выполните следующие шаги:
- Сделайте резервную копию etcd и директории
/etc/kubernetes. Если используется модульstronghold, убедитесь, что создана резервная копия его данных. -
Проверьте состояние кластера, отсутствие алертов и незавершённых задач в очереди Deckhouse:
d8 status -
Снимите с узла лейблы master-узла:
d8 k label node <MASTER_NODE_NAME> node-role.kubernetes.io/control-plane- \ node-role.kubernetes.io/master- node.deckhouse.io/group-где
<MASTER_NODE_NAME>— имя изменяемого master-узла. -
Убедитесь, что узел удалён из списка членов кластера etcd:
for pod in $(d8 k -n kube-system get pod -l component=etcd,tier=control-plane -o name); do d8 k -n kube-system exec "$pod" -- etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/ca.key \ --endpoints https://127.0.0.1:2379/ member list -w table if [ $? -eq 0 ]; then break fi done -
Вытесните нагрузку с узла командой
d8 k drain:d8 k drain <MASTER_NODE_NAME> --ignore-daemonsets --delete-emptydir-data -
Принудительно удалите оставшиеся на узле поды:
d8 k delete pods --all-namespaces --field-selector spec.nodeName=<MASTER_NODE_NAME> --force -
Удалите объект Node:
d8 k delete node <MASTER_NODE_NAME> -
На удаляемом master-узле очистите данные DKP. Команда необратимо удаляет данные Kubernetes и DKP с узла. Перед выполнением убедитесь, что выбран правильный узел и созданы необходимые резервные копии:
bash /var/lib/bashible/cleanup_static_node.sh --yes-i-am-sane-and-i-understand-what-i-am-doing - Установите на узле требуемую ОС.
-
На одном из оставшихся в кластере master-узлов получите и раскодируйте скрипт для добавления master-узла:
d8 k -n d8-cloud-instance-manager get secret manual-bootstrap-for-master \ -o jsonpath='{.data.bootstrap\.sh}' | base64 -d > bootstrap.sh -
Безопасно скопируйте полученный на предыдущем шаге файл
bootstrap.shна добавляемый узел и выполните его на этом узле от пользователяroot:bash bootstrap.sh -
На добавляемом узле откройте журнал systemd-юнита
bashible.service. Дождитесь окончания настройки узла — в журнале должно появиться сообщениеnothing to do:journalctl -fu bashible.service -
Дождитесь перехода узла в статус
Ready:d8 k wait node <MASTER_NODE_NAME> --for=condition=Ready --timeout=10m -
Проверьте, что узел отобразился в списке членов кластера etcd:
for pod in $(d8 k -n kube-system get pod -l component=etcd,tier=control-plane -o name); do d8 k -n kube-system exec "$pod" -- etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/ca.key \ --endpoints https://127.0.0.1:2379/ member list -w table if [ $? -eq 0 ]; then break fi done -
Убедитесь, что
control-plane-managerфункционирует на узле:d8 k -n kube-system wait pod --timeout=10m --for=condition=ContainersReady \ -l app=d8-control-plane-manager --field-selector spec.nodeName=<MASTER_NODE_NAME> -
Убедитесь, что в кластере нет алертов и незавершённых задач:
d8 status - Повторите процедуру для следующего master-узла.
Изменение образа ОС в кластере с одним master-узлом
Способ зависит от типа кластера: сначала добавьте дополнительные master-узлы, замените ОС в мультимастерном режиме, затем верните исходное число master-узлов.
Если в кластере используется модуль stronghold, перед изменением master-узлов убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом изменений настоятельно рекомендуется создать резервную копию данных модуля.
В облачном кластере
- Преобразуйте кластер с одним master-узлом в мультимастерный в соответствии с инструкцией.
- Измените ОС на master-узлах в соответствии с инструкцией.
- Преобразуйте мультимастерный кластер в кластер с одним master-узлом в соответствии с инструкцией.
В статическом кластере
- Добавьте дополнительные master-узлы в соответствии с инструкцией.
- Измените ОС на master-узлах в соответствии с инструкцией.
- Выведите лишние master-узлы из роли control plane в соответствии с инструкцией. Затем удалите их из кластера командой
d8 k delete node <MASTER_NODE_NAME>и выключите соответствующие серверы.
Добавление master-узлов в статический или гибридный кластер
Важно иметь нечетное количество master-узлов для обеспечения кворума.
Если в кластере используется модуль stronghold, перед изменением master-узлов убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом изменений настоятельно рекомендуется создать резервную копию данных модуля.
В процессе установки Deckhouse Kubernetes Platform с настройками по умолчанию в NodeGroup master отсутствует секция spec.staticInstances.labelSelector с настройками фильтра лейблов по ресурсам staticInstances. Из-за этого после изменения количества узлов staticInstances в NodeGroup master (параметр spec.staticInstances.count) при добавлении обычного узла с помощью Cluster API Provider Static (CAPS) он может быть «перехвачен» и добавлен в NodeGroup master, даже если в соответствующем ему StaticInstance (в metadata) указан лейбл с role, отличающейся от master.
Чтобы избежать этого «перехвата», после установки DKP измените NodeGroup master — добавьте в нее секцию spec.staticInstances.labelSelector с настройками фильтра лейблов по ресурсам staticInstances. Пример NodeGroup master с spec.staticInstances.labelSelector:
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
name: master
spec:
nodeType: Static
staticInstances:
count: 2
labelSelector:
matchLabels:
role: master
Далее при добавлении в кластер master-узлов с помощью CAPS указывайте в соответствующих им StaticInstance лейбл, заданный в spec.staticInstances.labelSelector NodeGroup master. Пример:
apiVersion: deckhouse.io/v1alpha1
kind: StaticInstance
metadata:
name: static-master-1
labels:
# Лейбл, указанный в spec.staticInstances.labelSelector NodeGroup master.
role: master
spec:
# Укажите IP-адрес сервера статического узла.
address: "<SERVER-IP>"
credentialsRef:
kind: SSHCredentials
name: credentials
При добавлении новых master-узлов с помощью CAPS и изменении в NodeGroup master количества master-узлов (параметр spec.staticInstances.count) учитывайте следующее:
При первоначальной установке кластера в конфигурации указывается первый master-узел, на который происходит установка. Если после установки нужно сделать мультимастер и добавить master-узлы с помощью CAPS, в параметре spec.staticInstances.count NodeGroup master необходимо указать количество узлов на один меньше желаемого.
Например, если нужно сделать мультимастер с тремя master-узлами в spec.staticInstances.count NodeGroup master укажите значение 2 и создайте два staticInstances для добавляемых узлов. После их добавления в кластер количество master-узлов будет равно трём: master-узел, на который происходила установка и два master-узла, добавленные с помощью CAPS.
В остальном добавление master-узла в статический или гибридный кластер аналогично добавлению обычного узла.
Воспользуйтесь для этого соответствующими примерами. Все необходимые действия по настройке компонентов control plane кластера на новом узле будут выполнены автоматически, дождитесь их завершения — появления master-узлов в статусе Ready.
Добавление master-узлов в облачном кластере
Далее описана конвертация кластера с одним master-узлом в мультимастерный кластер.
Перед добавлением узлов убедитесь в наличии необходимых квот. Важно иметь нечетное количество master-узлов для обеспечения кворума.
Если в кластере используется модуль stronghold, перед добавлением или удалением master-узла убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом любых изменений настоятельно рекомендуется создать резервную копию данных модуля.
- Сделайте резервную копию etcd и директории
/etc/kubernetes. - Скопируйте полученный архив за пределы кластера (например, на локальную машину).
- Убедитесь, что в кластере нет алертов, которые могут помешать созданию новых master-узлов.
-
Убедитесь, что очередь Deckhouse пуста:
d8 system queue list -
На локальной машине авторизуйтесь в хранилище образов контейнеров (измените адрес хранилища образов при необходимости):
docker login registry.deckhouse.ruВ процессе авторизации необходимо будет ввести
UsernameиPassword.При авторизации в хранилище
registry.deckhouse.ruполеUsernameдолжно иметь значениеlicense-token, аPassword— содержать ключ лицензии Deckhouse Kubernetes Platform. -
На локальной машине запустите контейнер установщика DKP соответствующей редакции и версии (измените адрес хранилища образов при необходимости):
DH_VERSION=$(d8 k -n d8-system get deployment deckhouse -o jsonpath='{.metadata.annotations.core\.deckhouse\.io\/version}') DH_EDITION=$(d8 k -n d8-system get deployment deckhouse -o jsonpath='{.metadata.annotations.core\.deckhouse\.io\/edition}' | tr '[:upper:]' '[:lower:]' ) docker run --pull=always -it -v "$HOME/.ssh/:/tmp/.ssh/" \ registry.deckhouse.ru/deckhouse/${DH_EDITION}/install:${DH_VERSION} bash -
В контейнере с инсталлятором выполните следующую команду, чтобы проверить состояние перед началом работы:
dhctl terraform check --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> --ssh-host <MASTER-NODE-0-HOST>Ответ должен сообщить, что Terraform не нашёл расхождений и изменений не требуется.
-
В контейнере с инсталлятором выполните следующую команду и укажите требуемое количество master-узлов в параметре
masterNodeGroup.replicas:dhctl config edit provider-cluster-configuration --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> \ --ssh-host <MASTER-NODE-0-HOST>Для Yandex Cloud, при использовании внешних адресов на master-узлах, количество элементов массива в параметре
masterNodeGroup.instanceClass.externalIPAddressesдолжно равняться количеству master-узлов. При использовании значенияAuto(автоматический заказ публичных IP-адресов), количество элементов в массиве все равно должно соответствовать количеству master-узлов.Например, при трех master-узлах (
masterNodeGroup.replicas: 3) и автоматическом заказе адресов, параметрmasterNodeGroup.instanceClass.externalIPAddressesбудет выглядеть следующим образом:externalIPAddresses: - "Auto" - "Auto" - "Auto" -
В контейнере с инсталлятором выполните следующую команду для запуска масштабирования:
dhctl converge --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> --ssh-host <MASTER-NODE-0-HOST> -
Дождитесь появления необходимого количества master-узлов в статусе
Readyи готовности всех экземпляровcontrol-plane-manager:d8 k -n kube-system wait pod --timeout=10m --for=condition=ContainersReady -l app=d8-control-plane-manager
Уменьшение числа master-узлов в облачном кластере
Далее описана конвертация мультимастерного кластера в кластер с одним master-узлом.
Описанные ниже шаги необходимо выполнять с первого по порядку master-узла кластера (master-0). Это связано с тем, что кластер всегда масштабируется по порядку: например, невозможно удалить узлы master-0 и master-1, оставив master-2.
Если в кластере используется модуль stronghold, перед добавлением или удалением master-узла убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом любых изменений настоятельно рекомендуется создать резервную копию данных модуля.
- Сделайте резервную копию etcd и директории
/etc/kubernetes. - Скопируйте полученный архив за пределы кластера (например, на локальную машину).
- Убедитесь, что в кластере нет алертов, которые могут помешать обновлению master-узлов.
-
Убедитесь, что очередь DKP пуста:
d8 system queue list -
На локальной машине авторизуйтесь в хранилище образов контейнеров (измените адрес хранилища образов при необходимости):
docker login registry.deckhouse.ruВ процессе авторизации необходимо будет ввести
UsernameиPassword.При авторизации в хранилище
registry.deckhouse.ruполеUsernameдолжно иметь значениеlicense-token, аPassword— содержать ключ лицензии Deckhouse Kubernetes Platform. -
На локальной машине запустите контейнер установщика DKP соответствующей редакции и версии (измените адрес хранилища образов при необходимости):
DH_VERSION=$(d8 k -n d8-system get deployment deckhouse -o jsonpath='{.metadata.annotations.core\.deckhouse\.io\/version}') DH_EDITION=$(d8 k -n d8-system get deployment deckhouse -o jsonpath='{.metadata.annotations.core\.deckhouse\.io\/edition}' | tr '[:upper:]' '[:lower:]' ) docker run --pull=always -it -v "$HOME/.ssh/:/tmp/.ssh/" \ registry.deckhouse.ru/deckhouse/${DH_EDITION}/install:${DH_VERSION} bash -
В контейнере с инсталлятором выполните следующую команду и укажите
1в параметреmasterNodeGroup.replicas:dhctl config edit provider-cluster-configuration --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> \ --ssh-user=<USERNAME> --ssh-host <MASTER-NODE-0-HOST>Для Yandex Cloud при использовании внешних адресов на master-узлах количество элементов массива в параметре
masterNodeGroup.instanceClass.externalIPAddressesдолжно равняться количеству master-узлов. При использовании значенияAuto(автоматический заказ публичных IP-адресов) количество элементов в массиве все равно должно соответствовать количеству master-узлов.Например, при одном master-узле (
masterNodeGroup.replicas: 1) и автоматическом заказе адресов параметрmasterNodeGroup.instanceClass.externalIPAddressesбудет выглядеть следующим образом:externalIPAddresses: - "Auto" -
В контейнере с инсталлятором выполните следующую команду для запуска масштабирования:
dhctl converge --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> --ssh-user=<USERNAME> --ssh-host <MASTER-NODE-0-HOST>Для OpenStack и VK Cloud (OpenStack) после подтверждения удаления узла обязательно проверьте удаление диска
<prefix>kubernetes-data-Nв самом Openstack.Например, при удалении узла
cloud-demo-master-2в веб-интерфейсе Openstack или в OpenStack CLI необходимо проверить отсутствие дискаcloud-demo-kubernetes-data-2.В случае, если диск
kubernetes-dataостанется, при увеличении количества master-узлов могут возникнуть проблемы в работе ETCD. -
Выполните проверку очереди Deckhouse и убедитесь, что отсутствуют ошибки, с помощью команды:
d8 system queue list
Доступ к контроллеру DKP в мультимастерном кластере
В кластерах с несколькими master-узлами DKP запускается в режиме высокой доступности (в нескольких экземплярах). Для доступа к активному контроллеру DKP можно использовать следующую команду (на примере команды deckhouse-controller queue list):
d8 system queue list