Обратите внимание, что если в кластере более одного master-узла, режим HA включается автоматически. Это справедливо как для развёртывания кластера сразу с тремя master-узлами, так и при увеличении количества master-узлов с одного до трёх.
Глобальное включение режима HA
Включить режим отказоустойчивости для всей платформы DKP можно одним из следующих способов.
Через кастомный ресурс ModuleConfig/global
-
Установите в
ModuleConfig/globalпараметрsettings.highAvailabilityв значениеtrue:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: global spec: version: 2 settings: highAvailability: true -
Убедитесь, что режим включился. Например, проверьте количество подов
deckhouseв пространстве имёнd8-system, выполнив команду:d8 k -n d8-system get po | grep deckhouseКоличество подов
deckhouseдолжно быть больше одного, как показано в примере вывода ниже:deckhouse-57695f4d68-8rk6l 2/2 Running 0 3m49s deckhouse-5764gfud68-76dsb 2/2 Running 0 3m49s deckhouse-fgrhy4536s-fhu6s 2/2 Running 0 3m49s
Через веб-интерфейс Deckhouse
Если в кластере включен модуль console, откройте веб-интерфейс Deckhouse, перейдите в раздел «Deckhouse» — «Глобальные настройки» — «Глобальные настройки модулей» и установите переключатель «Режим отказоустойчивости» в положение «Да».
Настройка режима HA c двумя master-узлами и arbiter-узлом
В Deckhouse Kubernetes Platform возможна настройка режима HA c двумя master-узлами и arbiter-узлом. Такой подход позволяет обеспечить требования по HA в условиях ограниченных ресурсов.
На arbiter-узле размещается только etcd, без остальных компонентов control plane. Этот узел используется для обеспечения кворума etcd.
Требования к arbiter-узлу:
- не менее 2 ядер CPU;
- не менее 4 ГБ RAM;
- не менее 8 ГБ дискового пространства под etcd.
Требования к сетевым задержкам для arbiter-узла аналогичны требованиям для master-узлов.
Настройка в облачном кластере
Пример ниже актуален для облачного кластера с тремя master-узлами. Чтобы настроить режим HA c двумя master-узлами и arbiter-узлом в облачном кластере, необходимо удалить из кластера один master-узел и добавить один arbiter-узел.
Для этого выполните следующие действия:
Описанные ниже шаги необходимо выполнять с первого по порядку master-узла кластера (master-0). Это связано с тем, что кластер всегда масштабируется по порядку: например, невозможно удалить узлы master-0 и master-1, оставив master-2.
Если в кластере используется модуль stronghold, перед добавлением или удалением master-узла убедитесь, что модуль находится в полностью работоспособном состоянии. Перед началом любых изменений рекомендуется создать резервную копию данных модуля.
- Сделайте резервную копию etcd и директории
/etc/kubernetes. - Скопируйте полученный архив за пределы кластера (например, на локальную машину).
- Убедитесь, что в кластере нет алертов, которые могут помешать обновлению master-узлов.
-
Убедитесь, что очередь DKP пуста:
d8 system queue list -
На локальной машине запустите контейнер установщика DKP соответствующей редакции и версии (измените адрес container registry при необходимости):
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 config edit provider-cluster-configuration --ssh-agent-private-keys=/tmp/.ssh/<SSH_KEY_FILENAME> \ --ssh-user=<USERNAME> --ssh-host <MASTER-NODE-0-HOST>Измените настройки облачного провайдера:
- В параметре
masterNodeGroup.replicasукажите2. -
Создайте NodeGroup для arbiter-узла. На arbiter-узле обязательно должен быть лейбл
node-role.deckhouse.io/etcd-only: ""и taint, предотвращающий размещение на нем пользовательской нагрузки. Пример описания NodeGroup для arbiter-узла:nodeGroups: - name: arbiter replicas: 1 nodeTemplate: labels: node.deckhouse.io/etcd-arbiter: "" taints: - key: node.deckhouse.io/etcd-arbiter effect: NoSchedule zones: - europe-west3-b instanceClass: machineType: n1-standard-4 # ... остальная часть манифеста - Сохраните изменения.
Для 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> --ssh-host <MASTER-NODE-1-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
Настройка в статическом кластере
Чтобы настроить режим HA c двумя master-узлами и arbiter-узлом в статическом кластере, выполните следующие действия:
-
Создайте NodeGroup для arbiter-узла. На arbiter-узле обязательно должен быть лейбл
node-role.deckhouse.io/etcd-only: ""и taint, предотвращающий размещение на нем пользовательской нагрузки. Пример описания NodeGroup для arbiter-узла:apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: arbiter spec: nodeType: Static nodeTemplate: labels: node.deckhouse.io/etcd-arbiter: "" taints: - key: node.deckhouse.io/etcd-arbiter effect: NoSchedule # ... остальная часть манифеста - Добавьте удобным вам способом в кластер узел, который будет использовать как arbiter-узел.
- Убедитесь, что добавленный arbiter-узел находится в списке членов кластера etcd.
- Удалите один master-узел из кластера.
Включение режима HA для отдельных компонентов
Некоторые модули DKP могут иметь собственные настройки режима HA. Чтобы включить режим высокой надежности в конкретном модуле, установите параметр settings.highAvailability в его настройках. При этом работа режима HA в отдельных модулях не зависит от состояния глобального режима HA.
Перечень модулей, для которых доступно управление режимом HA:
deckhouse;openvpn;istio;dashboard;multitenancy-manager;user-authn;ingress-nginx;prometheus-monitoring;monitoring-kubernetes;snapshot-controller.
Чтобы вручную включить режим HA в конкретном модуле, добавьте в его конфигурацию параметр settings.highAvailability:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: deckhouse
spec:
version: 1
enabled: true
settings:
highAvailability: true
Чтобы убедиться, что режим включился, проверьте количество подов выбранного модуля. Например, для проверки работы режима в модуле deckhouse, проверьте количество подов в пространстве имён d8-system, выполнив следующую команду:
d8 k -n d8-system get po | grep deckhouse
Количество подов deckhouse должно быть больше одного:
deckhouse-57695f4d68-8rk6l 2/2 Running 0 3m49s
deckhouse-5764gfud68-76dsb 2/2 Running 0 3m49s
deckhouse-fgrhy4536s-fhu6s 2/2 Running 0 3m49s