Конфигурация кластера в YAML-манифесте

Общие шаги конфигурации постоянного кластера:

  1. Получите шаблон YAML-манифеста, выполнив команду ./shtil-2.13.0 install ТИП-ПРОВАЙДЕРА-ИНФРАСТРУКТУРЫ example. Шаблон включает конфигурацию инфраструктурного провайдера и кластера управления.
  2. Заполните шаблон своими данными и сохраните в YAML-файле.
  3. Запустите команду создания кластера, указав флаг инсталляции с 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="ВВЕДИТЕ-ВАШУ-ЛИЦЕНЗИЮ"
×