Тема
Установка подчиненного кластера
Требования к запуску нового подчинённого кластера
Внимание!
Если для создания виртуальных машин используется гипервизор VMmanager, то в интерфейсе управления VMmanager, в настройках виртуальных машин, необходимо активировать опцию "Антиспуфинг отключен"
Заметка
Для работы кластера Bootsman c внешним ETCD потребуется дополнительная подготовка. Подробнее
Перед началом установки подчинённого кластера следует удовлетворить следующие требования:
- Успешная установка управляющего кластера Bootsman
- DNS-имя управляющего кластера должно разрешаться на каждом узле будущего кластера
- Доступ подчинённого кластера к управляющему
- Сумма символов будущего имени кластера и имени Namespace не должно превышать 30 символов
Наименования кластеров
Имя подчиненного кластера: test-cluster
Namespace: test-cluster
Сумма символов: 24
Имя подчиненного кластера: very-very-long-name-cluster
Namespace: test-cluster
Сумма символов: 39
Имя подчиненного кластера: test-cluster
Namespace: very-very-long-namespace
Сумма символов: 36
Заметка
Для установки подчиненного кластера необходимо подготовить три sub-master и три sub-worker узла, аналогично подготовке машин из документации по установке управляющего кластера.
Установка
Установку можно провести двумя способами:
- Использовать установщик Bootsman
- Применить yaml-манифесты
Разворачивание с помощью установщика
Заметка
Во время заполнения формы вы можете в любой момент переключится в режим yaml
Для создания подчинённого кластера авторизуйтесь в управляющий кластер и нажмите кнопку


Вас перенаправит на страничку установщика для заполнения данных о будущем кластере.
Сначала укажите имя нового подчинённого кластера (1)
- SUBCLUSTER_NAME


Kubernetes Options


| Имя параметра | Описание |
|---|---|
| SUBCLUSTER_KUBERNETES_VERSION | Версия Kubernetes. Поддерживаемые версии |
| SUBCLUSTER_NAMESPACE | Namespace управляющего кластера, который будет содержать объекты подчинённого кластера |
| SUBCLUSTER_POD_CIDR | Блок адресов для Pods. Должен не пересекаться с другими блоками внутри одного Kubernetes кластера и реальными сетями вашей инфраструктуры. Допустимый размер блока /[1-20] Пример: podsCidrBlocks: ["172.20.0.0/16"] |
| SUBCLUSTER_SERVICE_CIDR | Блок адресов для Service. Должен не пересекаться с другими блоками внутри одного Kubernetes кластера и реальными сетями вашей инфраструктуры. Допустимый размер блока /[1-20] Пример: servicesCidrBlocks: ["172.21.0.0/16"] |
Provider Configuration


Private Registry
В случае, если вы хотите использовать наш репозиторий образов, то переключите параметр "Use private registry" в выключенное состояние и продолжайте заполнять в соотвествии с следующим разделом.


Если хотите произвести установку из локального репозитория, то заполните поля из формы ниже


Заметка
В случае использования уже существующего секрета на управляющем кластере, следует использовать настройку "Credential settings" "Use existing" Формы помогут найти секрет и указать имена полей, которые соответствуют пользователю и паролю
Заметка
Advanced mode поможет вам задать специфические имена ключей в секрете. По умолчанию, username - пользователь, password - пароль
| Имя параметра | Описание |
|---|---|
| PRIVATE_REGISTRY_URL | URL вашего репозитория образов. Если установка будет производится online блок registry можно удалить |
| PRIVATE_REGISTRY_SECRET_NAMESPACE | Namespace, в котором размещен secret для авторизации в приватный репозиторий образов |
| PRIVATE_REGISTRY_SECRET_NAME | Имя secret для авторизации в приватный репозиторий образов |
| PRIVATE_REGISTRY_USERNAME | Имя пользователя в репозитории образов. Если установка будет производится online блок registry можно удалить |
| PRIVATE_REGISTRY_PASSWORD | Пароль для пользователя в репозитории образов. Если установка будет производится online блок registry можно удалить |
| PRIVATE_REGISTRY_SECRET_HOST_KEY | При использовании существующего secret. Имя ключа, содержащее параметр HOST |
| PRIVATE_REGISTRY_SECRET_USERNAME_KEY | При использовании существующего secret. Имя ключа, содержащее параметр USERNAME |
| PRIVATE_REGISTRY_SECRET_PASSWORD_KEY | При использовании существующего secret. Имя ключа, содержащее параметр PASSWORD |
Control Plane
Предупреждение
K8SCPIP - это IP-адрес, который будет использоваться как адрес kube-apiserver. Он должен быть зарезервирован под задачу обеспечения отказоустойчивости IP сервера и не должен выделяться каким либо другим ресурсом


Заметка
Для работы кластера Bootsman c внешним ETCD потребуется дополнительная подготовка. Подробнее
| Имя параметра | Описание |
|---|---|
| KCP_REPLICAS | Количество узлов с ролью master. Может принимать значения 3 или 5 |
| K8SCPIP | IP-адрес балансировщика kube-apiserver для обеспечения отказоустойчивости. Адрес должен быть свободен и не состоять в dhcp-пулах Подробнее |
| KUBE_API_PORT | Порт kube-api. По-умолчанию 6443 |
| MHC_MAX_UNHEALTY | Пороговое значение для MachineHealthCheck, при превышении которого не будет выполняться исправления. Для узлов с ролью master, значение по-умолчанию 100%. Для узлов с ролью worker, значение по-умолчанию 40% Подробнее |
| MHC_TIMEOUT | Время, которое дается узлу на самостоятельное восстановление, прежде чем вмешается MachineHealthCheck. По-умолчанию 10m Подробнее |
| MATCH_LABEL_KEY | Опционально. Выбор узла из списка ByoHost по лейблу |
| MATCH_LABEL_VALUE | Выбор узла из списка ByoHost по лейблу |
| MATCH_RESOURCE_TYPE | Опционально. Выбор узла из списка ByoHost по типу ресурсов |
| MATCH_RESOURCE_RESERVATION | Опционально. Минимальное требуемое число ресурсов. Узлы с меньшим значением не будут использованы |
| MATCH_RESOURCE_LIMIT | Опционально. Максимальное требуемое число ресурсов. Узлы с большим значением не будут использованы |
WorkerPool
Заметка
Вы не ограничены в одном типе ВМ, предназначенных для нагрузки. Для создания дополнительного пула виртуальных машин используйте кнопку
Заметка
Для работы графических ускорителей установите значения для выбора узлов по GPU ( MATCH_RESOURCE_TYPE и MATCH_RESOURCE_RESERVATION )
Если потребуется используйте дополнительные селекторы по LABEL


| Имя параметра | Описание |
|---|---|
| SUBCLUSTER_WORKERPOOL_NAME | Имя пула виртуальных машин |
| WORKER_REPLICAS | Число узлов в workerpool. Сумма узлов во всех workerpool должна быть >=3 |
| Roles | Для большинства инсталляций используйте роль bootsman-worker. Подробнее о ролях |
| MHC_MAX_UNHEALTY | Пороговое значение для MachineHealthCheck, при превышении которого не будет выполняться исправления. Для узлов с ролью master, значение по-умолчанию 100%. Для узлов с ролью worker, значение по-умолчанию 40% Подробнее |
| MHC_TIMEOUT | Время, которое дается узлу на самостоятельное восстановление, прежде чем вмешается MachineHealthCheck. По-умолчанию 10m Подробнее |
| MATCH_LABEL_KEY | Опционально. Выбор узла из списка ByoHost по лейблу |
| MATCH_LABEL_VALUE | Выбор узла из списка ByoHost по лейблу |
| MATCH_RESOURCE_TYPE | Опционально. Выбор узла из списка ByoHost по типу ресурсов |
| MATCH_RESOURCE_RESERVATION | Опционально. Минимальное требуемое число ресурсов. Узлы с меньшим значением не будут использованы |
| MATCH_RESOURCE_LIMIT | Опционально. Максимальное требуемое число ресурсов. Узлы с большим значением не будут использованы |
Установка с помощью yaml-манифестов
Если вам удобнее способ применения yaml-манифестов, то ниже есть примеры. Заполните их в соответствии с описанием из главы, представленной ранее.
Для применения yaml-манифестов можно использовать kubectl
Заметка
Манифест secret_private_registry.yaml требуется только для установки из вашего приватного репозитория, в случае установки из репозитория Bootsman - пропустите.
bash
kubectl apply -f secret_private_registry.yaml
kubectl apply -f Cluster.yaml
kubectl apply -f Workerpool.yamlyaml
apiVersion: v1
kind: Secret
metadata:
name: {++PRIVATE_REGISTRY_SECRET_NAME++} (1)
namespace: {++PRIVATE_REGISTRY_SECRET_NAMESPACE++} (2)
stringData:
host: {++PRIVATE_REGISTRY_HOST++} (3)
username: {++PRIVATE_REGISTRY_USERNAME++} (4)
password: {++PRIVATE_REGISTRY_PASSWORD++} (5)- Имя secret для авторизации в приватный репозиторий образов
- Namespace, в котором размещен secret для авторизации в приватный репозиторий образов
- Доменное имя вашего репозитория образов
- Имя пользователя в репозитории образов.
Если установка будет производится online блок registry можно удалить - Пароль для пользователя в репозитории образов.
Если установка будет производится online блок registry можно удалить
yaml
apiVersion: provisioning.bootsman.tech/v1alpha1
kind: Cluster
metadata:
name: {++SUBCLUSTER_NAME++} (1)
namespace: {++SUBCLUSTER_NAMESPACE++} (2)
spec:
clusterType: capi
capiConfig:
kubernetesVersion: {++SUBCLUSTER_KUBERNETES_VERSION++} (3)
registry:
url: {++REGISTRY_URL++} (4)
credentials:
username: {++REGISTRY_USERNAME++} (5)
password: {++REGISTRY_PASSWORD++} (6)
controlPlane:
replicas: {++KCP_REPLICAS++} (7)
endpoint:
host: {++KCP_IP++} (8)
port: {++KUBE_API_PORT++} (9)
infrastructure:
provider: baremetal
bareMetalProviderConfig:
selector:
matchLabels:
{++MATCH_LABEL_KEY++}:{++MATCH_LABEL_VALUE++} (10)
resources:
requests:
{++MATCH_RESOURCE_TYPE++}:{++MATCH_RESOURCE_RESERVATION++} (11)
limits:
{++MATCH_RESOURCE_TYPE++}:{++MATCH_RESOURCE_LIMIT++} (12)
network:
podsCidrBlocks:
- {++SUBCLUSTER_POD_CIDR++} (13)
servicesCidrBlocks:
- {++SUBCLUSTER_SERVICE_CIDR++} (14)
kubeletExtraArgsFlags:
eviction-hard: ""
eviction-max-pod-grace-period: ""
eviction-minimum-reclaim: ""
kube-reserved: ""
max-pods: ""
seccomp-default: ""
system-reserved: ""- Имя подчиненного кластера.
Должен быть уникальным в пределах namespace. - Имя namespace, в который будут помещены все объекты связанные с кластером
- Версия Kubernetes. Поддерживаемые версии
- URL вашего репозитория образов.
Если установка будет производится online блок registry можно удалить - Имя пользователя в репозитории образов.
Если установка будет производится online блок registry можно удалить - Пароль для пользователя в репозитории образов.
Если установка будет производится online блок registry можно удалить - Количество узлов с ролью master.
Может принимать значения 3 или 5 - IP ControlPlane подчиненного кластера.
Адрес должен быть "свободен" и не состоять в dhcp-пулах Подробнее - Порт kube-api. По-умолчанию 6443
- Опционально.
Выбор узла по лейблу и его значению, по которым требуется выбирать узлы из списка свободных byohost - Опционально.
Выбор узла по минимальному требуемым ресурсам, по которым требуется выбирать узлы из списка свободных byohost. Byohost находящийся ниже этой границы использованы не будут - Опционально.
Выбор узла по максимальным требуемым ресурсам, по которым требуется выбирать узлы из списка свободных byohost. Byohost находящийся выше этой границы использованы не будут - Блок адресов для Pods.
Должен не пересекаться с другими блоками внутри одного Kubernetes кластера.
Минимальный размер блока /16
Пример:podsCidrBlocks: - "172.20.0.0/16" - Блок адресов для Service.
Должен не пересекаться с другими блоками внутри одного Kubernetes кластера.
Минимальный размер блока /16
Пример:servicesCidrBlocks: - "172.21.0.0/16"
yaml
apiVersion: provisioning.bootsman.tech/v1alpha1
kind: WorkerPool
metadata:
name: {++SUBCLUSTER_WORKERPOOL_NAME++} (1)
namespace: {++SUBCLUSTER_NAMESPACE++} (2)
spec:
clusterName: {++SUBCLUSTER_NAME++} (3)
kubernetesVersion: {++SUBCLUSTER_KUBERNETES_VERSION++} (4)
replicas: {++WORKER_REPLICAS++} (5)
infrastructure:
provider: baremetal
bareMetalProviderConfig:
selector:
matchLabels:
{++MATCH_LABEL_KEY++}:{++MATCH_LABEL_VALUE++} (6)
resources:
requests:
{++MATCH_RESOURCE_TYPE++}:{++MATCH_RESOURCE_RESERVATION++} (7)
limits:
{++MATCH_RESOURCE_TYPE++}:{++MATCH_RESOURCE_LIMIT++} (8)
kubeletExtraArgsFlags:
eviction-hard: ""
eviction-max-pod-grace-period: ""
eviction-minimum-reclaim: ""
kube-reserved: ""
max-pods: ""
seccomp-default: ""
system-reserved: ""
roles:
- name: bootsman-worker- Имя workerpool кластера.
Должен быть уникальным в пределах namespace. - Имя namespace, должен соответствовать имени namespace указанный в Cluster.yaml
- Имя кластера SUBCLUSTER_NAME, к которому будет подключен workerpool
- Версия Kubernetes. Поддерживаемые версии
- Число узлов в workerpool. Сумма узлов во всех workerpool должна быть >=3
- Опционально.
Выбор узла по лейблу и его значению, по которым требуется выбирать узлы из списка свободных byohost - Опционально.
Выбор узла по минимальному требуемым ресурсам, по которым требуется выбирать узлы из списка свободных byohost. Byohost находящийся ниже этой границы использованы не будут - Опционально.
Выбор узла по максимальным требуемым ресурсам, по которым требуется выбирать узлы из списка свободных byohost. Byohost находящийся выше этой границы использованы не будут