Развертывание Nested-кластера
Развертывание Nested-кластера подразумевает создание рабочих узлов в необходимой инфраструктуре.
Подготовка конфигурации подчиненного кластера
Для разверывания Nested-кластера необходимо заполнить форму создания кластера в Web-интерфейсе или подготовить объекты Cluster.yaml и Workerpool.yaml согласно необходимому типу развертывания:
Подготовьте конфигурацию подчиненного кластера, согласно документации на необходимый тип развертывания:
- Baremetal
- VSphere
- Brest
- VMManager
- VK
- Yandex
Внесение дополнительных изменений в настройки работы control plane
Необходимо активировать использование провайдера Nested для развертывания данного кластера.
При создании кластера через WEB-интерфейс необходимо в блоке Провайдер Control Plane изменить значение с kubeadm на BootsmanNested.
Выбор данного значения также добавляет ниже блок Настройки для BootsmanNested со следующими опциями:
-
внешний etcd- при активации дает воможность более тонко настроить etcd для Nested-кластера. -
реплики- при активации параметравнешний etcdдает возможность указать, сколько подов etcd будет создано для подчиненного Nested-кластера. Большее количество подов приводит к увеличению отказоустойчивости etcd. -
Persistence- при активации параметравнешний etcdдает возможность указать, нужно ли создавать персистентное хранилище для пода(-ов) etcd. По умолчанию отключено. -
Имя StorageClass- при активации параметраPersistenceдает возможность указать имяstorageClassв управляющем кластере для создания PVC. Пустое поле приведет к использованиюstorageClassпо умолчанию. -
Размер хранилища- при активации параметраPersistenceдает возможность указать размер PVC для каждого пода etcd.
При создании кластера через yaml-манифесты, в манифесте Cluster.yaml нужно заменить блок
spec.capiConfig.controlPlane.kubeadmControlPlane
на
spec.capiConfig.controlPlane.bootsmanNestedControlPlane с необходимым содержимым, например:
Пример
Внимание
В манифесте Workerpool.yaml ничего править не нужно.
Пример полной конфигурации baremetal
apiVersion: provisioning.bootsman.tech/v1alpha1
kind: Cluster
metadata:
name: SUBCLUSTER_NAME (1)
namespace: SUBCLUSTER_NAMESPACE (2)
spec:
capiConfig:
controlPlane:
endpoint:
host: KCP_IP (3)
port: KUBE_API_PORT (4)
machineHealthCheck:
maxUnhealthy: MHC_MAX_UNHEALTHY (5)
timeoutDuration: MHC_TIMEOUT (6)
bootsmanNestedControlPlane:
etcd:
replicas: ETCD_REPLICAS (7)
persistence:
storageSize: ETCD_STORAGE_SIZE (8)
replicas: KCP_REPLICAS (9)
infrastructure:
bareMetalProviderConfig:
resources: {}
selector:
matchLabels: {}
provider: baremetal
sshAuthorizedKeys:
- SSH_PUBLIC_KEY (10)
kubernetesVersion: SUBCLUSTER_KUBERNETES_VERSION (11)
network:
podsCidrBlocks:
- SUBCLUSTER_POD_CIDR (12)
servicesCidrBlocks:
- SUBCLUSTER_SERVICE_CIDR (13)
registry:
credentialsSecret:
hostKey: host
name: REGISTRY_CREDS_SECRET_NAME (14)
namespace: REGISTRY_CREDS_SECRET_NAMESPACE (15)
passwordKey: password
usernameKey: username
url: REGISTRY_URL (16)
targetCluster: Workload
- Имя подчиненного Nested-кластера.
Должно быть уникальным в пределах namespace.
- Namespace, в который будут помещены все объекты, связанные с кластером.
- IP-адрес kube-vip endpoint control-plane подчиненного кластера.
Адрес должен быть свободен и не состоять в dhcp-пулах.
- Порт Kubernetes API.
По умолчанию 6443.
- Максимальный процент нездоровых control-plane нод, при превышении которого MachineHealthCheck инициирует восстановление.
- Период времени, в течение которого нода может оставаться нездоровой, до запуска восстановления.
- Количество реплик etcd для Nested control-plane.
Большее количество повышает отказоустойчивость etcd.
- Размер персистентного хранилища для каждого пода etcd.
- Количество реплик control-plane подчиненного кластера.
- Публичный SSH-ключ, который будет добавлен на узлы подчиненного кластера.
- Версия Kubernetes.
- Блок адресов для Pods.
Не должен пересекаться с CIDR управляющего кластера и физической сети.
- Блок адресов для Services.
Не должен пересекаться с CIDR управляющего кластера и физической сети.
- Имя секрета с учетными данными для доступа к registry.
- Namespace, в котором находится секрет с учетными данными для доступа к registry.
- URL репозитория образов.
apiVersion: provisioning.bootsman.tech/v1alpha1
kind: WorkerPool
metadata:
name: WORKERPOOL_NAME (1)
namespace: SUBCLUSTER_NAMESPACE (2)
spec:
bootstrapConfig:
kubeadm: {}
clusterName: SUBCLUSTER_NAME (3)
infrastructure:
bareMetalProviderConfig:
resources: {}
selector:
matchLabels:
role: MATCH_LABEL_VALUE (4)
provider: baremetal
kubernetesVersion: SUBCLUSTER_KUBERNETES_VERSION (5)
machineHealthCheck:
maxUnhealthy: MHC_MAX_UNHEALTHY (6)
timeoutDuration: MHC_TIMEOUT (7)
replicas: WORKER_REPLICAS (8)
roles:
- name: bootsman-worker
- Имя WorkerPool.
Должно быть уникальным в пределах namespace.
- Namespace, должен соответствовать namespace, указанному в Cluster.yaml.
- Имя подчиненного кластера, к которому будет подключен WorkerPool.
- Значение лейбла, по которому будут выбираться byohost-узлы в качестве worker-узлов.
- Версия Kubernetes.
Должна совпадать с версией, указанной в Cluster.yaml. Поддерживаемые версии
- Максимальный процент нездоровых worker-узлов, при превышении которого MachineHealthCheck инициирует восстановление.
- Период времени, в течение которого узел может оставаться нездоровым, до запуска восстановления.
- Число worker-узлов в пуле.
После сохранения заполненной формы в WEB-интерфейсе или применения объектов Cluster.yaml и Workerpool.yaml запустится процесс создания подчиненного Nested-кластера.
Что происходит дальше:
- В управляющем-кластере создается пространство имен с указанным именем. В нем создаются поды:
kube-apiserver,etcd,konnectivity-server,cloud-controller-manager,kube-controller-manager,kube-scheduler. - Создаются рабочие узлы с использованием указанного провайдера, машины проходят bootstrap и присоединяются к кластеру.
- Устанавливаются аддоны вложенного кластера (cilium, coredns, konnectivity-agent, metrics-server, ingress-nginx).
Заметка
Установка Nested-кластера может занимать от двух до десяти минут, в зависимости от инфраструктуры.

