Конфигурация кластера в YAML-манифесте
Общие шаги конфигурации постоянного кластера:
- Получите шаблон YAML-манифеста, выполнив команду
./shtil-2.13.0 install ТИП-ПРОВАЙДЕРА-ИНФРАСТРУКТУРЫ example. Шаблон включает конфигурацию инфраструктурного провайдера и кластера управления. - Заполните шаблон своими данными и сохраните в YAML-файле.
- Запустите команду создания кластера, указав флаг инсталляции с YAML-манифестом:
./shtil-2.13.0 install ТИП-ПРОВАЙДЕРА-ИНФРАСТРУКТУРЫ --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Вы можете инсталлировать постоянный кластер управления с провайдером:
- Shturval v2;
- oVirt. Шаблоны для oVirt подобных провайдеров (zVirt, HostVM, РЕД Виртуализация, ROSA Virtualization) идентичны, потребуется указать дополнительно только подтип;
- vSphere
- OpenStack, VK Cloud, Selectel.
Инсталляция кластера с провайдером Shturval v2
Команда запроса шаблона манифеста:
./shtil-2.13.0 install shturvalv2 example
Шаблон YAML-манифеста
---
# Шаблон YAML-манифеста инсталляции платформы с провайдером Shturval v2
type: CapsmProviderConfig
name: cluster-management-provider # [НЕОБЯЗАТЕЛЬНО] Имя экземпляра провайдера. По умолчанию - cluster-management-provider
# [ОБЯЗАТЕЛЬНО] Общие учетные данные для SSH-подключения к хостам
credentials:
SSH:
privateKey: # [ОБЯЗАТЕЛЬНО] Путь до приватного ключа пользователя для SSH-подключения
userName: # [ОБЯЗАТЕЛЬНО] Имя пользователя для SSH-подключения к указанным хостам
# Список хостов для узлов кластера
hosts:
- address: # [ОБЯЗАТЕЛЬНО] IP-адрес или FQDN хоста (например, 11.12.13.14)
labelsSelector: # [ОБЯЗАТЕЛЬНО] Селектор должен содержать метку роли хоста с ключом `role`. Рекомендуемые роли хостов: controlplane, worker, infra, ingress, other
role: controlplane
credentials: null # Значение null означает, что для хоста будут использованы общие SSH-учетные данные
# SSH: # [НЕОБЯЗАТЕЛЬНО] Переопределение общих SSH-учетных данных для хоста. При переопределении удалите null из поля credentials
# userName: admin
# privateKey: c2RzZHNk
#ingressCerts: # Сертификат кластера. По умолчанию кластер будет инсталлирован с самоподписным сертификатом. Только один из подтипов сертификата может быть выбран
# ca:
# crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до цепочки сертификатов (ваш промежуточный сертификат -> сертификат корпоративного центра сертификации) в формате "pem" файла. Должен быть задан в паре с `ca.keyPath`
# keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа промежуточного сертификата CA. Должен быть задан в паре с `ca.crtPath`
# tls:
# crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до корпоративного сертификата("pem" файла), который был выпущен CA (в этом случае в файле будет цепочка сертификатов) или самоподписан для доменного имени Ingress. Должен быть задан в паре с `tls.keyPath`
# keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа корпоративного сертификата Ingress. Должен быть задан в паре с `tls.crtPath`
# acme:
# rootPath: </some/path> # [НЕОБЯЗАТЕЛЬНО] Путь до файла корневого сертификата CA для ACME. Должен быть задан в паре с `acme.url`
# url: example.com # [НЕОБЯЗАТЕЛЬНО] Адрес ACME сервера с портом и путем к ресурсу, например: https://acme.corp.lan:8443/directory. Должен быть задан в паре с `acme.rootPath`
# email: user@domain.com # [НЕОБЯЗАТЕЛЬНО] Email, который должен быть связан с учетной записью Let's Encrypt
---
type: CapsmClusterConfig
# Конфигурация кластера управления
cluster:
apiEndpoint: # [ОБЯЗАТЕЛЬНО] Адрес API-сервера кластера (IP или FQDN без порта и протокола, например, 192.168.1.100)
clusterName: cluster-management # [НЕОБЯЗАТЕЛЬНО] Имя создаваемого кластера управления. По умолчанию - cluster-management
enabledServices: [] # [НЕОБЯЗАТЕЛЬНО] Список включенных сервисов из репозитория shturval. По умолчанию (если не задано) в кластере будут установлены критически важные для работы платформы сервисы, а также сервисы мониторинга и логирования. Если установлено minimal: true, значения этого параметра будут проигнорированы
externalKubeAPILB: false # [НЕОБЯЗАТЕЛЬНО] Использовать внешний балансировщик для API-сервера. По умолчанию - false
externalingresslb: false # [НЕОБЯЗАТЕЛЬНО] Использовать внешний балансировщик для Ingress. По умолчанию - false
ingress: '' # [ОБЯЗАТЕЛЬНО, если не задан ingressvip] Wildcard DNS-запись для ingress (например, <cluster_name>.<base_domain>). Чтобы задать DNS-запись для ingress, переопределите значение поля externalingresslb на true
controlPlaneNodesCount: 1 # [НЕОБЯЗАТЕЛЬНО] Количество Control Plane узлов. Должно быть не менее 1. По умолчанию - 1
ingressvip: # [ОБЯЗАТЕЛЬНО, если externalingresslb: false] VIP-адрес для Ingress контроллера. Чтобы задать VIP-адрес для ingress, должен быть указан externalingresslb: false
podSubnet: 172.16.0.0/16 # [НЕОБЯЗАТЕЛЬНО] Подсеть подов. По умолчанию - 172.16.0.0/16
secure: false # [НЕОБЯЗАТЕЛЬНО] Включить расширенные параметры безопасности. По умолчанию - false
serviceSubnet: 10.96.0.0/12 # [НЕОБЯЗАТЕЛЬНО] Подсеть сервисов. По умолчанию - 10.96.0.0/12
shturvalVersion: 2.13.0 # [НЕОБЯЗАТЕЛЬНО] Версия платформы. Соответствует версии утилиты shtil. Переданное значение будет проигнорировано
minimal: false # [НЕОБЯЗАТЕЛЬНО] Определяет инсталляцию кластера управления с минимальным набором сервисов. Если задать true, будут установлены только критически важные для работы платформы сервисы. При этом сервисы в enabledServices будут проигнорированы
# Конфигурации узлов
# По умолчанию конфигурация групп Control Plane и Worker-узлов предзаполнена. Создание дополнительных Worker групп недоступно
#provider:
#
## Конфигурация Control Plane узлов
# controlPlaneNodeConfig:
# controlPlaneSelector:
# matchExpressions: [] # [НЕОБЯЗАТЕЛЬНО] Совпадающие выражения хостов для группы Control Plane узлов
# matchLabels:
# role: controlplane # [НЕОБЯЗАТЕЛЬНО] Лейбл хостов для узлов группы Control Plane. [Не переопределять] Роль для группы Control Plane узлов, должна быть строго controlplane
# nodeConfig:
# groupName: control-plane # [Не переопределять] Имя группы Control Plane узлов
# roles:
# - name: node-role.kubernetes.io/control-plane # [Не переопределять] Роль группы Control Plane узлов
# name: cluster-management-provider # [НЕОБЯЗАТЕЛЬНО] Должно совпадать с именем экземпляра провайдера. По умолчанию name: cluster-management-provider
#
## Конфигурация Worker-узлов
# workerNodeConfigs:
# - nodeConfig:
# groupName: default # [Не переопределять] Имя дефолтной группы Worker-узлов
# roles:
# - name: node-role.kubernetes.io/workers # [Не переопределять] Роль группы Worker-узлов
# workersCount: 3 # [НЕОБЯЗАТЕЛЬНО] Количество узлов в дефолтной Worker группе. По умолчанию - 3
# workerSelector:
# matchExpressions: [] # [НЕОБЯЗАТЕЛЬНО] Совпадающие выражения хостов для узлов группы Worker-узлов
# matchLabels: # Совпадающие лейблы
# role: workers # [НЕОБЯЗАТЕЛЬНО] Совпадающий лейбл роли хоста для узлов дефолтной группы Worker-узлов. Рекомендовано и по умолчанию workers
Пример конфигурации в YAML-манифесте
type: CapsmProviderConfig
name: myprovidername
credentials:
SSH:
privateKey: /home/username/.ssh/id_ed25519
userName: shturval
hosts:
- address: 10.11.11.11
labelsSelector:
role: controlplane
credentials: null
- address: 10.11.12.12
labelsSelector:
role: workers
credentials: null
---
type: CapsmClusterConfig
cluster:
apiEndpoint: 10.11.12.13
clusterName: myclustername
controlPlaneNodesCount: 1
ingressvip: 10.11.12.14
provider:
controlPlaneNodeConfig:
controlPlaneSelector:
matchExpressions: []
matchLabels:
role: controlplane
nodeConfig:
groupName: control-plane
roles:
- name: node-role.kubernetes.io/control-plane
workerNodeConfigs:
- nodeConfig:
groupName: default
roles:
- name: node-role.kubernetes.io/workers
workersCount: 1
workerSelector:
matchExpressions: []
matchLabels:
role: workers
Пример команды создания постоянного кластера управления
./shtil-2.13.0 install shturvalv2 --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Инсталляция кластера с провайдером oVirt/zVirt/HostVM/РЕД Виртуализация/ROSA Virtualization
Команда запроса шаблона манифеста
./shtil-2.13.0 install ovirt example
Шаблон YAML-манифеста
---
# Шаблон YAML-манифеста инсталляции платформы с провайдером oVirt
# Конфигурация провайдера
type: CapovProviderConfig
#name: cluster-management-provider # [НЕОБЯЗАТЕЛЬНО] Имя экземпляра провайдера. По умолчанию - cluster-management-provider
credentials: # [ОБЯЗАТЕЛЬНО] Учетные данные для подключения к API Engine oVirt
oVirt:
url: <https://ovirt-engine.example.com/ovirt-engine/api> # [ОБЯЗАТЕЛЬНО] URL для подключения к API Engine oVirt. Требуется указать полный адрес Engine провайдера, добавив на конце /ovirt-engine/api
username: <admin@internal> # [ОБЯЗАТЕЛЬНО] Имя пользователя для аутентификации в API oVirt
password: <password> # [ОБЯЗАТЕЛЬНО] Пароль для аутентификации в API oVirt
#connection: # [НЕОБЯЗАТЕЛЬНО] Настройки TLS подключения к API oVirt
#tlsInsecure: true # [НЕОБЯЗАТЕЛЬНО] Отключить проверку TLS сертификата. По умолчанию - true. Установите false для продакшена с валидными сертификатами
#tlsCertPath: '' # [НЕОБЯЗАТЕЛЬНО] Путь к файлу CA сертификата для проверки TLS. Используется при tlsInsecure: false. Пример: /path/to/ca-bundle.crt
providerConfig: # [ОБЯЗАТЕЛЬНО] Конфигурация провайдера oVirt
#subtype: zvirt # [НЕОБЯЗАТЕЛЬНО] Подтип ovirt-подобного провайдера. Может быть задано одно из значений: zvirt, hostvm, redvirt, rosavirt
datacenter: <Default> # [ОБЯЗАТЕЛЬНО] Имя датацентра oVirt, где будут создаваться ВМ
datacenterCluster: <Default> # [ОБЯЗАТЕЛЬНО] Имя кластера oVirt внутри датацентра
vnicProfile: <ovirtmgmt/ovirtmgmt> # [ОБЯЗАТЕЛЬНО] Имя VNIC профиля oVirt для сетевых интерфейсов ВМ
template: <rocky9-template> # [ОБЯЗАТЕЛЬНО] Имя шаблона ВМ в выбранном датацентре (базовый образ для узлов кластера)
#csiStorage: '' # [НЕОБЯЗАТЕЛЬНО] Имя домена хранения для динамических постоянных томов через CSI драйвер. Оставьте пустым для отключения CSI
#vmType: server # [НЕОБЯЗАТЕЛЬНО] Тип ВМ для создаваемых виртуальных машин. По умолчанию - server. Не переопределяйте без специальных требований
#templateNetInterface: eth0 # [НЕОБЯЗАТЕЛЬНО] Имя сетевого интерфейса в шаблоне. По умолчанию - eth0. Не переопределяйте, если шаблон не использует другой интерфейс
ingressCerts: # Сертификат кластера. По умолчанию кластер будет инсталлирован с самоподписным сертификатом. Только один из подтипов сертификата может быть выбран
ca:
crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до цепочки сертификатов (ваш промежуточный сертификат -> сертификат корпоративного центра сертификации) в формате "pem" файла. Должен быть задан в паре с `ca.keyPath`
keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа промежуточного сертификата CA. Должен быть задан в паре с `ca.crtPath`
tls:
crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до корпоративного сертификата("pem" файла), который был выпущен CA (в этом случае в файле будет цепочка сертификатов) или самоподписан для доменного имени Ingress. Должен быть задан в паре с `tls.keyPath`
keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа корпоративного сертификата Ingress. Должен быть задан в паре с `tls.crtPath`
acme:
rootPath: </some/path> # [НЕОБЯЗАТЕЛЬНО] Путь до файла корневого сертификата CA для ACME. Должен быть задан в паре с `acme.url`
url: example.com # [НЕОБЯЗАТЕЛЬНО] Адрес ACME сервера с портом и путем к ресурсу, например: https://acme.corp.lan:8443/directory. Должен быть задан в паре с `acme.rootPath`
email: user@domain.com # [НЕОБЯЗАТЕЛЬНО] Email, который должен быть связан с учетной записью Let's Encrypt
---
type: CapovClusterConfig # Конфигурация кластера управления
cluster: # [ОБЯЗАТЕЛЬНО] Конфигурация кластера управления
apiEndpoint: <192.168.1.100> # [ОБЯЗАТЕЛЬНО] Адрес API-сервера кластера (IP или FQDN)
#clusterName: cluster-management # [НЕОБЯЗАТЕЛЬНО] Имя создаваемого кластера управления. По умолчанию - cluster-management
#enabledServices: [] # [НЕОБЯЗАТЕЛЬНО] Список включенных сервисов, перечисленных через запятую. По умолчанию (если не задано) в кластере будут установлены критически важные для работы платформы сервисы, а также сервисы мониторинга и логирования. Если установлено minimal: true, значения этого параметра будут проигнорированы
#externalingresslb: false # [НЕОБЯЗАТЕЛЬНО] Использовать внешний балансировщик для Ingress. По умолчанию - false
#ingress: '' # [ОБЯЗАТЕЛЬНО, если не задан ingressvip] Wildcard DNS-запись для ingress (например, <cluster_name>.<base_domain>)
#controlPlaneNodesCount: 1 # [НЕОБЯЗАТЕЛЬНО] Количество Control Plane узлов. Должно быть не менее 1. По умолчанию - 1
ingressvip: <192.168.1.101> # [НЕОБЯЗАТЕЛЬНО] VIP-адрес для Ingress контроллера. Чтобы задать VIP-адрес для ingress, должен быть указан externalingresslb: false
#podSubnet: 172.16.0.0/16 # [НЕОБЯЗАТЕЛЬНО] CIDR подсети подов. По умолчанию - 172.16.0.0/16
#secure: false # [НЕОБЯЗАТЕЛЬНО] Включить расширенные параметры безопасности. По умолчанию - false
#serviceSubnet: 10.96.0.0/12 # [НЕОБЯЗАТЕЛЬНО] CIDR подсети сервисов. По умолчанию - 10.96.0.0/12
#shturvalVersion: 2.13.0 # [НЕОБЯЗАТЕЛЬНО] Версия платформы. Должна соответствовать версии утилиты shtil
#minimal: false # [НЕОБЯЗАТЕЛЬНО] Определяет инсталляцию кластера управления с минимальным набором сервисов. Если задать true, будут установлены только критически важные для работы платформы сервисы. При этом сервисы в enabledServices будут проигнорированы
#provider: # [НЕОБЯЗАТЕЛЬНО] Конфигурации узлов. По умолчанию конфигурация групп Control Plane и Worker-узлов предзаполнена. Создание дополнительных Worker групп недоступно
#name: cluster-management-provider # [НЕОБЯЗАТЕЛЬНО] Должно совпадать с именем экземпляра провайдера. По умолчанию - cluster-management-provider
# # Конфигурация Control Plane узлов
#controlPlaneNodeConfig: # [НЕОБЯЗАТЕЛЬНО] Конфигурация Control Plane узлов
# nodeConfig:
# groupName: control-plane # [Не переопределять] Имя группы Control Plane узлов
# roles:
# - name: node-role.kubernetes.io/control-plane # [Не переопределять] Роль группы Control Plane узлов, должна быть строго control-plane
# capovNodeConfig:
# cpu:
# cores: 4 # [НЕОБЯЗАТЕЛЬНО] Количество ядер CPU на Control Plane узел. По умолчанию - 4
# sockets: 1 # [НЕОБЯЗАТЕЛЬНО] Количество CPU сокетов на Control Plane узел. По умолчанию - 1
# threads: 1 # [НЕОБЯЗАТЕЛЬНО] Количество потоков CPU на сокет. По умолчанию - 1
# memory:
# sizeMB: 16000 # [НЕОБЯЗАТЕЛЬНО] Размер памяти в МБ на Control Plane узел. По умолчанию - 16000
# guaranteedMB: 16000 # [НЕОБЯЗАТЕЛЬНО] Гарантированная память в МБ. Должна совпадать с sizeMB. По умолчанию - 16000
# osDiskSizeGB: 100 # [НЕОБЯЗАТЕЛЬНО] Размер диска ОС в ГБ на Control Plane узел. По умолчанию - 100
# # Конфигурация Worker-узлов
#workerNodeConfigs: # [НЕОБЯЗАТЕЛЬНО] Конфигурация Worker-узлов
# - nodeConfig: # [НЕОБЯЗАТЕЛЬНО] Создание дефолтной (default) группы Worker-узлов
# groupName: default # [Не переопределять] Имя дефолтной группы Worker-узлов
# roles:
# - name: node-role.kubernetes.io/workers # [НЕОБЯЗАТЕЛЬНО] Роль группы Worker-узлов
# workersCount: 3 # [НЕОБЯЗАТЕЛЬНО] Количество узлов в дефолтной Worker группе. По умолчанию - 3
# capovNodeConfig:
# cpu:
# cores: 8 # [НЕОБЯЗАТЕЛЬНО] Количество ядер CPU на Worker-узел. По умолчанию - 8
# sockets: 1 # [НЕОБЯЗАТЕЛЬНО] Количество CPU сокетов на Worker-узел. По умолчанию - 1
# threads: 1 # [НЕОБЯЗАТЕЛЬНО] Количество потоков CPU на сокет. По умолчанию - 1
# memory:
# sizeMB: 32000 # [НЕОБЯЗАТЕЛЬНО] Размер памяти в МБ на Worker-узел. По умолчанию - 32000
# guaranteedMB: 32000 # [НЕОБЯЗАТЕЛЬНО] Гарантированная память в МБ. Должна совпадать с sizeMB. По умолчанию - 32000
# osDiskSizeGB: 300 # [НЕОБЯЗАТЕЛЬНО] Размер диска ОС в ГБ на Worker-узел. По умолчанию - 300
Пример конфигурации в YAML-манифесте
type: CapovProviderConfig
credentials:
oVirt:
url: https://rhv-mg.example.su/ovirt-engine/api
username: myname@internal
password: password
connection:
tlsInsecure: true
providerConfig:
subtype: zvirt
datacenter: ND
datacenterCluster: RHV
vnicProfile: LAN_3245
template: my-template-ubuntu734-2.13.0
csiStorage: Pure_VM_Store
---
type: CapovClusterConfig
cluster:
apiEndpoint: 11.11.12.12
clusterName: myclustername
controlPlaneNodesCount: 1
ingressvip: 11.11.12.13
provider:
controlPlaneNodeConfig:
nodeConfig:
groupName: control-plane
roles:
- name: node-role.kubernetes.io/control-plane
capovNodeConfig:
cpu:
cores: 4
sockets: 1
threads: 1
memory:
sizeMB: 9000
osDiskSizeGB: 60
workerNodeConfigs:
- nodeConfig:
groupName: default
roles:
- name: node-role.kubernetes.io/workers
workersCount: 2
capovNodeConfig:
cpu:
cores: 8
sockets: 1
threads: 1
memory:
sizeMB: 10000
osDiskSizeGB: 60
Команда создания
./shtil-2.13.0 install ovirt --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Инсталляция кластера с провайдером vSphere
Команда запроса шаблона манифеста
./shtil-2.13.0 install vsphere example
Шаблон YAML-манифеста
---
# Шаблон YAML-манифеста для инсталляции платформы с провайдером vSphere
type: CapvsProviderConfig # Конфигурация провайдера
# name: cluster-management-provider # [НЕОБЯЗАТЕЛЬНО] Имя экземпляра провайдера. По умолчанию - cluster-management-provider
# [ОБЯЗАТЕЛЬНО] Учетные данные для подключения к vCenter
credentials:
vSphere:
addressVcenter: <https://vcenter.example.com> # [ОБЯЗАТЕЛЬНО] IP-адрес или полное доменное имя Engine провайдера
usernameVcenter: <administrator@vsphere.local> # [ОБЯЗАТЕЛЬНО] Имя пользователя учетной записи для подключения к Engine провайдеру
passwordVcenter: <password> # [ОБЯЗАТЕЛЬНО] Пароль учетной записи для подключения к Engine провайдеру
# Настройки TLS-соединения для vCenter
# connection:
# tlsInsecure: true # [НЕОБЯЗАТЕЛЬНО] Отключить проверку TLS-сертификатов. По умолчанию - true.
# tlsCertPath: '' # [НЕОБЯЗАТЕЛЬНО] Путь к файлу CA-сертификата для проверки TLS. Используется при tlsInsecure: false
# # Пример: /path/to/ca-bundle.crt
# Конфигурация провайдера vSphere
providerConfig:
datacenter: <Datacenter> # [ОБЯЗАТЕЛЬНО] Имя datacenter vSphere, где будут создаваться виртуальные машины (например, /MyCloud)
datastore: <datastore1> # [ОБЯЗАТЕЛЬНО] Datastore в dataсenter Engine провайдера (например, MyCloud-example)
resourcePool: <ResourcePool> # [ОБЯЗАТЕЛЬНО] Путь к пулу ресурсов для виртуальных машин (например, /Datacenter/host/Cluster/Resources/ResourcePool)
network: <VM Network> # [ОБЯЗАТЕЛЬНО] Имя сети для сетевых интерфейсов виртуальных машин (например, /Datacenter/network/dvPG-example-3245)
folder: <vm-folder> # [ОБЯЗАТЕЛЬНО] Путь к папке виртуальных машин в инвентаре vCenter (например, /Datacenter/vm/folder)
template: <rocky9-template> # [ОБЯЗАТЕЛЬНО] Имя шаблона виртуальной машины в выбранном датацентре (базовый образ для узлов кластера)
# cloneMode: linkedClone # [НЕОБЯЗАТЕЛЬНО] Режим клонирования для создания виртуальных машин. По умолчанию - linkedClone.
# # linkedClone быстрее и использует меньше места, fullClone создает независимые виртуальные машины
# storagePolicy: '' # [НЕОБЯЗАТЕЛЬНО] Имя политики хранения для дисков виртуальных машин. Оставьте пустым для использования настроек хранилища по умолчанию
# enableCSI: true # [НЕОБЯЗАТЕЛЬНО] Включить драйвер vSphere CSI для динамических постоянных томов. По умолчанию - true
# templateNetInterface: eth0 # [НЕОБЯЗАТЕЛЬНО] Имя сетевого интерфейса в шаблоне. По умолчанию - eth0. Не переопределяйте, если шаблон не использует другой интерфейс
ingressCerts: # Сертификат кластера. По умолчанию кластер будет инсталлирован с самоподписным сертификатом. Только один из подтипов сертификата может быть выбран
ca:
crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до цепочки сертификатов (ваш промежуточный сертификат -> сертификат корпоративного центра сертификации) в формате "pem" файла. Должен быть задан в паре с `ca.keyPath`
keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа промежуточного сертификата CA. Должен быть задан в паре с `ca.crtPath`
tls:
crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до корпоративного сертификата("pem" файла), который был выпущен CA (в этом случае в файле будет цепочка сертификатов) или самоподписан для доменного имени Ingress. Должен быть задан в паре с `tls.keyPath`
keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа корпоративного сертификата Ingress. Должен быть задан в паре с `tls.crtPath`
acme:
rootPath: </some/path> # [НЕОБЯЗАТЕЛЬНО] Путь до файла корневого сертификата CA для ACME. Должен быть задан в паре с `acme.url`
url: example.com # [НЕОБЯЗАТЕЛЬНО] Адрес ACME сервера с портом и путем к ресурсу, например: https://acme.corp.lan:8443/directory. Должен быть задан в паре с `acme.rootPath`
email: user@domain.com # [НЕОБЯЗАТЕЛЬНО] Email, который должен быть связан с учетной записью Let's Encrypt
---
type: CapvsClusterConfig # Конфигурация кластера управления
cluster:
apiEndpoint: <192.168.1.100> # [ОБЯЗАТЕЛЬНО] Адрес API-сервера кластера (IP или FQDN без порта и протокола, например, 192.168.1.100)
# clusterName: cluster-management # [НЕОБЯЗАТЕЛЬНО] Имя создаваемого кластера управления. По умолчанию - cluster-management
# enabledServices: [] # [НЕОБЯЗАТЕЛЬНО] Список включенных сервисов, перечисленных через запятую. По умолчанию (если не задано) в кластере будут установлены критически важные для работы платформы сервисы, а также сервисы мониторинга и логирования. Если установлено minimal: true, значения этого параметра будут проигнорированы
# externalingresslb: false # [НЕОБЯЗАТЕЛЬНО] Использовать внешний балансировщик нагрузки для Ingress. По умолчанию - false
# ingress: '' # [ОБЯЗАТЕЛЬНО, если не задан ingressvip] Wildcard DNS-запись для ingress (например, <cluster_name>.<base_domain>)
# controlPlaneNodesCount: 1 # [НЕОБЯЗАТЕЛЬНО] Количество узлов Control Plane. Должно быть не менее 1. По умолчанию - 1
ingressvip: <192.168.1.101> # [ОБЯЗАТЕЛЬНО, если externalingresslb: false] VIP-адрес для Ingress-контроллера
# podSubnet: 172.16.0.0/16 # [НЕОБЯЗАТЕЛЬНО] CIDR подсети для подов. По умолчанию - 172.16.0.0/16
# secure: false # [НЕОБЯЗАТЕЛЬНО] Включить расширенные настройки безопасности. По умолчанию - false
# serviceSubnet: 10.96.0.0/12 # [НЕОБЯЗАТЕЛЬНО] CIDR подсети для сервисов. По умолчанию - 10.96.0.0/12
# shturvalVersion: 2.13.0 # [НЕОБЯЗАТЕЛЬНО] Версия платформы. Должна совпадать с версией утилиты shtil
# minimal: false # [НЕОБЯЗАТЕЛЬНО] Определяет инсталляцию кластера управления с минимальным набором сервисов. Если задать true, будут установлены только критически важные для работы платформы сервисы. При этом сервисы в enabledServices будут проигнорированы
# Конфигурации узлов
# По умолчанию конфигурация групп Control Plane и Worker-узлов предзаполнена. Создание дополнительных Worker групп недоступно
# provider:
# name: cluster-management-provider # [НЕОБЯЗАТЕЛЬНО] Должно соответствовать имени экземпляра провайдера. По умолчанию - cluster-management-provider
# Конфигурация узлов Control Plane
# controlPlaneNodeConfig:
# nodeConfig:
# groupName: control-plane # [Не переопределять] Имя группы узлов Control Plane
# roles:
# - name: node-role.kubernetes.io/control-plane # [Не переопределять] Роль узлов Control Plane
# capvsNodeConfig:
# cpu:
# cores: 4 # [НЕОБЯЗАТЕЛЬНО] Количество ядер CPU на узел control plane. По умолчанию - 4
# memory:
# sizeMB: 16000 # [НЕОБЯЗАТЕЛЬНО] Размер памяти в МБ на узел control plane. По умолчанию - 16000
# osDiskSizeGB: 100 # [НЕОБЯЗАТЕЛЬНО] Размер диска ОС в ГБ на узел control plane. По умолчанию - 100
# Конфигурация Worker-узлов
# workerNodeConfigs:
# Создание дефолтной (default) группы Worker-узлов
# - nodeConfig:
# groupName: default # [Не переопределять] Имя дефолтной группы Worker-узлов
# roles:
# - name: node-role.kubernetes.io/workers # [Не переопределять] Роль группы Worker-узлов
# workersCount: 3 # [НЕОБЯЗАТЕЛЬНО] Количество узлов в дефолтной Worker группе. По умолчанию - 3
# capvsNodeConfig:
# cpu:
# cores: 8 # [НЕОБЯЗАТЕЛЬНО] Количество ядер CPU на Worker-узел. По умолчанию - 8
# memory:
# sizeMB: 32000 # [НЕОБЯЗАТЕЛЬНО] Размер памяти в МБ на Worker-узел. По умолчанию - 32000
# osDiskSizeGB: 300 # [НЕОБЯЗАТЕЛЬНО] Размер диска ОС в ГБ на Worker-узел. По умолчанию - 300
Команда создания
./shtil-2.13.0 install vsphere --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Инсталляция кластера с провайдером OpenStack/VK Cloud/Selectel
Команда запроса шаблона манифеста
./shtil-2.13.0 install openstack example
Команда запроса шаблона манифеста VK Cloud
./shtil-2.13.0 install vkcloud example
Команда запроса шаблона манифеста Selectel
./shtil-2.13.0 install selectel example
Шаблон YAML-манифеста
---
# Шаблон YAML-манифеста для инсталляции платформы с провайдером OpenStack/VK Cloud/Selectel
type: CaposProviderConfig # Конфигурация провайдера
#name: my-openstack-provider # [НЕОБЯЗАТЕЛЬНО] Имя экземпляра провайдера. По умолчанию - cluster-management-provider
cloudName: vkcloud # [ОБЯЗАТЕЛЬНО] Имя облака, напр. 'vkcloud', 'openstack' и т.д.
connection: # [ОБЯЗАТЕЛЬНО] Учётные данные для подключения к OpenStack
authURL: https://openstack.example.com:5000/v3 # [ОБЯЗАТЕЛЬНО] URL-адрес доступа к службе авторизации OpenStack (Keystone). Требуется указание порта, например, http://10.11.111.111:5000
projectID: project-id # [ОБЯЗАТЕЛЬНО] ID проекта OpenStack
projectDomainID: project-domain-id # [ОБЯЗАТЕЛЬНО] ID домена проекта OpenStack
# tlsInsecure: false # [НЕОБЯЗАТЕЛЬНО] Пропустить проверку TLS-сертификата для API OpenStack
# tlsCertPath: /path/to/cert # [НЕОБЯЗАТЕЛЬНО] Путь к файлу CA-сертификата в формате PEM для API OpenStack
# region: RegionOne # [НЕОБЯЗАТЕЛЬНО] Имя региона OpenStack
# interface: public # [НЕОБЯЗАТЕЛЬНО] Интерфейс endpoint OpenStack (напр., public, internal)
# identityAPIVersion: "3" # [НЕОБЯЗАТЕЛЬНО] Identity API OpenStack. По умолчанию - 3
# token: # [НЕОБЯЗАТЕЛЬНО] Токен аутентификации. Не может быть использован одновременно с парой login и password. Доступен только для OpenStack
# login: username # [НЕОБЯЗАТЕЛЬНО] Имя сервисной учетной записи с ролями heat_stack_owner, admin. Необходимо задать совместно с –password
# password: password # [НЕОБЯЗАТЕЛЬНО] Пароль сервисной учетной записи. Необходимо задать совместно с –login
# userDomainName: users # [НЕОБЯЗАТЕЛЬНО] Имя домена пользователя. Должен быть задан для OpenStack, VK Cloud
resources: # [ОБЯЗАТЕЛЬНО] Конфигурация провайдера OpenStack
sshKeyName: ssh-key-name # [ОБЯЗАТЕЛЬНО] Имя пары SSH-ключей для доступа к ВМ по протоколу SSH
nodeCIDR: 10.0.0.0/24 # [ОБЯЗАТЕЛЬНО] Подсеть узлов. Например, 10.0.0.0/24. Не должен пересекаться с подсетью подов (podSubnet) и сервисов (serviceSubnet)
externalNetworkID: external-network-id # [ОБЯЗАТЕЛЬНО] ID внешней сети для floating IP и внешнего доступа
flavors: # [ОБЯЗАТЕЛЬНО] Список типов ВМ
- flavor-name
volumeTypes: # [ОБЯЗАТЕЛЬНО] Список типов дисков
- volume-type
# availabilityZones: # [НЕОБЯЗАТЕЛЬНО] Список зон доступности
# - zone
# managedSecurityGroups: true # [НЕОБЯЗАТЕЛЬНО] Управление группами безопасности. По умолчанию - true
# disablePortSecurity: false # [НЕОБЯЗАТЕЛЬНО] Отключить port security. По умолчанию - false
# dns: # [НЕОБЯЗАТЕЛЬНО] DNS-серверы
machineImageName: image-name # [ОБЯЗАТЕЛЬНО] Имя шаблона виртуальной машины. Версия Kubernetes шаблона ВМ должна соответствовать соответствовать версии Штурвала и shtil
# enableCSI: # [НЕОБЯЗАТЕЛЬНО] Включить интеграцию CSI. По умолчанию - false
ingressCerts: # [НЕОБЯЗАТЕЛЬНО] Сертификат кластера. По умолчанию кластер будет инсталлирован с самоподписным сертификатом. Только один из подтипов сертификата может быть выбран
ca:
crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до цепочки сертификатов (ваш промежуточный сертификат -> сертификат корпоративного центра сертификации) в формате "pem" файла. Должен быть задан в паре с `ca.keyPath`
keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа промежуточного сертификата CA. Должен быть задан в паре с `ca.crtPath`
tls:
crtPath: # [НЕОБЯЗАТЕЛЬНО] Путь до корпоративного сертификата("pem" файла), который был выпущен CA (в этом случае в файле будет цепочка сертификатов) или самоподписан для доменного имени Ingress. Должен быть задан в паре с `tls.keyPath`
keyPath: # [НЕОБЯЗАТЕЛЬНО] Путь до закрытого ключа корпоративного сертификата Ingress. Должен быть задан в паре с `tls.crtPath`
acme:
rootPath: /some/path # [НЕОБЯЗАТЕЛЬНО] Путь до файла корневого сертификата CA для ACME. Должен быть задан в паре с `acme.url`
url: example.com # [НЕОБЯЗАТЕЛЬНО] Адрес ACME сервера с портом и путем к ресурсу, например: https://acme.corp.lan:8443/directory. Должен быть задан в паре с `acme.rootPath`
email: user@domain.com # [НЕОБЯЗАТЕЛЬНО] Email, который должен быть связан с учетной записью Let's Encrypt
---
type: CaposClusterConfig # Конфигурация кластера управления
cluster:
clusterName: cluster-name # [НЕОБЯЗАТЕЛЬНО] Имя создаваемого кластера управления. По умолчанию - cluster-management
# enabledServices: [] # [НЕОБЯЗАТЕЛЬНО] Список включенных сервисов, перечисленных через запятую. По умолчанию (если не задано) в кластере будут установлены критически важные для работы платформы сервисы, а также сервисы мониторинга и логирования. Если установлено minimal: true, значения этого параметра будут проигнорированы
# externalingresslb: false # [НЕОБЯЗАТЕЛЬНО] Использовать внешний балансировщик для Ingress. По умолчанию - false
# ingress: '' # [НЕОБЯЗАТЕЛЬНО] Wildcard DNS-запись для ingress (например, <cluster_name>.<base_domain>)
# controlPlaneNodesCount: 1 # [НЕОБЯЗАТЕЛЬНО] Количество узлов Control Plane. Не менее 1. По умолчанию - 1
# podSubnet: 172.16.0.0/16 # [НЕОБЯЗАТЕЛЬНО] CIDR подсети Pod. По умолчанию - 172.16.0.0/16
# secure: false # [НЕОБЯЗАТЕЛЬНО] Включить расширенные настройки безопасности. По умолчанию - false
# serviceSubnet: 10.96.0.0/12 # [НЕОБЯЗАТЕЛЬНО] CIDR подсети Service. По умолчанию - 10.96.0.0/12
# shturvalVersion: 2.13.0 # [НЕОБЯЗАТЕЛЬНО] Версия платформы. Должна совпадать с версией утилиты shtil
# minimal: false # [НЕОБЯЗАТЕЛЬНО] Определяет инсталляцию кластера управления с минимальным набором сервисов. Если задать true, будут установлены только критически важные для работы платформы сервисы. При этом сервисы в enabledServices будут проигнорированы
# Конфигурации узлов
# По умолчанию конфигурация групп Control Plane и Worker-узлов предзаполнена. Создание дополнительных Worker групп недоступно
#provider:
# name: my-openstack-provider # [НЕОБЯЗАТЕЛЬНО] Имя экземпляра провайдера. По умолчанию - cluster-management-provider
# Конфигурация узлов Control Plane
# controlPlaneNodeConfig:
# nodeConfig:
# groupName: control-plane # [Не переопределять] Имя группы узлов Control Plane
# roles:
# - name: control-plane # [Не переопределять] Роль узлов Control Plane
# caposNodeConfig:
# openstackFlavorName: flavor-name # [НЕОБЯЗАТЕЛЬНО] Тип виртуальной машины для Control Plane узлов. Если не задано, будет использован первый из списка в flavors конфигурации провайдера
# volumeSize: 100 # [НЕОБЯЗАТЕЛЬНО] Размер корневого тома в ГБ. По умолчанию - 100
# volumeType: volume-type # [НЕОБЯЗАТЕЛЬНО] Тип диска Control Plane узлов. Если не задано, будет использован первый из списка в volumeTypes
# availabilityZone: zone # [НЕОБЯЗАТЕЛЬНО] Зона доступности Control Plane узлов. Если не задано, будет использован первый из списка в availabilityZones
# Конфигурация Worker-узлов
# workerNodeConfigs: # Создание дефолтной (default) группы Worker-узлов
# - nodeConfig:
# groupName: default # [Не переопределять] Имя дефолтной группы Worker-узлов
# roles:
# - name: worker # [Не переопределять] Роль группы Worker-узлов
# workersCount: 3 # [НЕОБЯЗАТЕЛЬНО] Количество узлов в дефолтной Worker группе. По умолчанию - 3
# caposNodeConfig:
# openstackFlavorName: flavor-name # [НЕОБЯЗАТЕЛЬНО] Тип виртуальной машины для Worker узлов. Если не задано, будет использован первый из списка в flavors конфигурации провайдера
# volumeSize: 100 # [НЕОБЯЗАТЕЛЬНО] Размер корневого тома в ГБ. По умолчанию - 300
# volumeType: volume-type # [НЕОБЯЗАТЕЛЬНО] Тип диска Worker узлов. Если не задано, будет использован первый из списка в volumeTypes
# availabilityZone: zone # [НЕОБЯЗАТЕЛЬНО] Зона доступности Worker узлов. Если не задано, будет использован первый из списка в availabilityZones
Пример конфигурации в YAML-манифесте с провайдером VK Cloud
type: CaposProviderConfig
name: mgmtvk-prov
cloudName: vkcloud
connection:
authURL: https://ex.mail.ru:35357/v3/
projectID: c30c
projectDomainID: 384
tlsInsecure: true
region: RegionOne
interface: public
identityAPIVersion: 3
login: "user@example.ru"
password: "mypassw"
userDomainName: users
resources:
sshKeyName: ssh-rsa
nodeCIDR: 10.0.0.0/24
externalNetworkID: eddd4
flavors:
- STD2-8-8
volumeTypes:
- ceph-ssd
availabilityZones:
- ME1
managedSecurityGroups: true
machineImageName: mymachine-2130
---
type: CaposClusterConfig
cluster:
clusterName: myclustername
externalingresslb: true
controlPlaneNodesCount: 1
provider:
controlPlaneNodeConfig:
nodeConfig:
groupName: control-plane
roles:
- name: control-plane
caposNodeConfig:
openstackFlavorName: STD2-8-8
volumeSize: 40
volumeType: ceph-ssd
availabilityZone: ME1
workerNodeConfigs:
- nodeConfig:
groupName: default
roles:
- name: worker
workersCount: 1
caposNodeConfig:
openstackFlavorName: STD2-8-8
volumeSize: 50
volumeType: ceph-ssd
availabilityZone: ME1
Команда создания OpenStack
./shtil-2.13.0 install openstack --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Команда создания VK Cloud
./shtil-2.13.0 install vkcloud --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Команда создания Selectel
./shtil-2.13.0 install selectel --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА
Примеры команды инсталляции платформы
Чтобы запустить инсталляцию платформы одной командой, необходимо задать требуемые параметры создания временного кластера и параметр пути до файла с YAML-манифестом --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА в команде инсталляции постоянного кластера управления с одним из провайдеров.
После успешного поднятия временного кластера, автоматически запустится инсталляция постоянного кластера.
Пример команды создания платформы с провайдером Shturval v2 через YAML-манифест для открытого контура
./shtil-2.13.0 install shturvalv2 --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА --bootstrap-license="ВВЕДИТЕ-ВАШУ-ЛИЦЕНЗИЮ"
Пример команды создания платформы с провайдером oVirt через YAML-манифест для закрытого контура
./shtil-2.13.0 install ovirt --yaml-path=ПУТЬ-ДО-РАСПОЛОЖЕНИЯ-YAML-МАНИФЕСТА --bootstrap-registry="ВВЕДИТЕ-АДРЕС-ВАШЕГО-REGISTRY" --bootstrap-license="ВВЕДИТЕ-ВАШУ-ЛИЦЕНЗИЮ"