Доступно только в Enterprise Edition.

OpenStackClusterConfiguration

Version: deckhouse.io/v1

Описывает конфигурацию облачного кластера в OpenStack.

Используется cloud-провайдером, если control plane кластера размещен в облаке.

Выполните следующую команду, чтобы изменить конфигурацию в работающем кластере:

1kubectl -n d8-system exec -ti svc/deckhouse-leader -- deckhouse-controller edit provider-cluster-configuration

Пример:

1apiVersion: deckhouse.io/v1
2kind: OpenStackClusterConfiguration
3layout: Standard
4sshPublicKey: "<SSH_PUBLIC_KEY>"
5zones:
6- eu-3a
7standard:
8  internalNetworkDNSServers:
9  - 8.8.8.8
10  internalNetworkCIDR: 192.168.195.0/24
11  internalNetworkSecurity: false
12  externalNetworkName: external-network
13provider:
14  authURL: "<AUTH_URL>"
15  domainName: "<DOMAIN_NAME>"
16  tenantID: "<TENANT_ID>"
17  username: "<USERNAME>"
18  password: "<PASSWORD>"
19  region: eu-3
20masterNodeGroup:
21  replicas: 1
22  instanceClass:
23    rootDiskSize: 20
24    flavorName: m1.large
25    imageName: debian-11-genericcloud-amd64-20220911-1135
26  volumeTypeMap:
27    eu-3a: fast.eu-3a
28nodeGroups:
29- name: front
30  replicas: 2
31  instanceClass:
32    flavorName: m1.large
33    imageName: debian-11-genericcloud-amd64-20220911-1135
34    rootDiskSize: 20
35    configDrive: false
36    floatingIPPools:
37    - public
38    - shared
39    additionalSecurityGroups:
40    - sec_group_1
41    - sec_group_2
42  zones:
43  - eu-1a
44  - eu-1b
  • apiVersion
    строка

    Обязательный параметр

    Допустимые значения: deckhouse.io/v1, deckhouse.io/v1alpha1

  • kind
    строка

    Обязательный параметр

    Допустимые значения: OpenStackClusterConfiguration

  • layout
    строка

    Обязательный параметр

    Название схемы размещения.

    Подробнее о возможных схемах размещения провайдера.

  • masterNodeGroup

    Обязательный параметр

    Спецификация для описания NodeGroup master-узлов.

    Внимание! После изменения параметров секции masterNodeGroup необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.

    • masterNodeGroup.instanceClass
      объект

      Обязательный параметр

      Частичное содержимое полей OpenStackInstanceClass.

      • masterNodeGroup.instanceClass.additionalSecurityGroups
        массив строк

        Дополнительный список security groups, которые будут добавлены на заказанные инстансы соответствующего OpenStackInstanceClass в дополнение к указанным в конфигурации cloud-провайдера.

        Используется для задания правил firewall по отношению к заказываемым инстансам.

        SecurityGroups могут не поддерживаться провайдером.

      • masterNodeGroup.instanceClass.additionalTags
        объект

        Дополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации cloud-провайдера.

        Пример:

        1additionalTags:
        2  project: cms-production
        3  severity: critical
        
      • masterNodeGroup.instanceClass.etcdDiskSizeGb
        целочисленный

        Размер диска для etcd. Значение указывается в гигабайтах.

        По умолчанию: 10

        Пример:

        1etcdDiskSizeGb: 10
        
      • masterNodeGroup.instanceClass.flavorName
        строка

        Обязательный параметр

        Тип заказываемых виртуальных машин.

        Получить список всех доступных flavor’ов: openstack flavor list.

        Для всех не master-узлов желательно использовать flavor’ы с локальным диском. Если в облаке поддерживаются локальные диски, они обычно быстрее и дешевле. Недостатком использования таких flavor’ов является невозможность миграции узлов между гипервизорами.

        Пример создания flavor’а: openstack flavor create c4m8d50 --ram 8192 --disk 50 --vcpus 4.

      • masterNodeGroup.instanceClass.imageName
        строка

        Обязательный параметр

        Имя образа виртуальной машины, который будет использоваться для инстанса.

        Получить список всех доступных образов можно командой: openstack image list.

        Список поддерживаемых Deckhouse ОС и их версий можно найти в документации (учитывайте используемую версию Deckhouse).

      • masterNodeGroup.instanceClass.rootDiskSize
        целочисленный

        Размер root-диска. Значение указывается в гигабайтах.

        Параметр также влияет на тип диска. Подробнее…

    • masterNodeGroup.replicas
      целочисленный

      Обязательный параметр

      Количество создаваемых master-узлов. Для обеспечения кворума важно, чтобы оно было нечетным.

      Допустимые значения: 1 <= X

    • masterNodeGroup.serverGroup
      объект

      ServerGroup объединяет инстансы в группу. Инстансы в такой группе будут размещены на одном гипервизоре (affinity) или на разных гипервизорах (anti-affinity). Это позволяет повысить отказоустойчивость кластера.

      • masterNodeGroup.serverGroup.manuallyManaged
        объект
        • masterNodeGroup.serverGroup.manuallyManaged.id
          строка

          Обязательный параметр

          Идентификатор объекта ServerGroup.

      • masterNodeGroup.serverGroup.policy
        строка

        Обязательный параметр

        Политика распределения инстансов:

        • AntiAffinity — размещает инстансы на разных гипервизорах.
        • ManuallyManaged — позволяет указать существующую ServerGroup по идентификатору.

        Допустимые значения: AntiAffinity, ManuallyManaged

    • masterNodeGroup.volumeTypeMap
      объект

      Обязательный параметр

      Словарь типов дисков для хранения данных etcd и конфигурационных файлов Kubernetes.

      Формат элементов словаря: <ЗОНА ДОСТУПНОСТИ>: <ТИП ДИСКА> (см. пример).

      Если указан параметр rootDiskSize, этот же тип диска будет использован в качестве загрузочного диска виртуальной машины.

      Всегда рекомендуется использовать самые быстрые диски, предоставляемые провайдером.

      Если значение, указанное в replicas, превышает количество элементов в словаре, master-узлы, чьи номера превышают длину словаря, получают значения, начиная с начала словаря. Если для словаря из примера указано replicas: 5, с типом диска fast-eu-1a будут master-0, master-2 и master-4, а с типом диска fast-eu-1b будут master-1 и master-3.

      Полезные команды:

      • openstack availability zone list — получить список зон доступности.
      • openstack volume type list — получить список типов дисков.

      Пример:

      1volumeTypeMap:
      2  eu-1a: fast-eu-1a
      3  eu-1b: fast-eu-1b
      
  • nodeGroups
    массив объектов

    Массив дополнительных NodeGroup для создания статических узлов (например, для выделенных frontend-узлов или шлюзов).

    • nodeGroups.instanceClass
      объект

      Частичное содержимое полей OpenStackInstanceClass.

      • nodeGroups.instanceClass.additionalNetworks
        массив строк

        Список сетей, которые будут подключены к инстансу. openstack network list

        Пример:

        1additionalNetworks:
        2- BGP-network-VLAN-3894
        3- External-VLAN-3699
        
      • nodeGroups.instanceClass.additionalSecurityGroups
        массив строк

        Дополнительный список security groups, которые будут добавлены на заказанные инстансы соответствующего OpenStackInstanceClass в дополнение к указанным в конфигурации cloud-провайдера.

        Используется для задания правил firewall по отношению к заказываемым инстансам.

        SecurityGroups могут не поддерживаться провайдером.

      • nodeGroups.instanceClass.additionalTags
        объект

        Дополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации cloud-провайдера.

        Пример:

        1additionalTags:
        2  project: cms-production
        3  severity: critical
        
      • nodeGroups.instanceClass.configDrive
        булевый

        Необязательный параметр.

        Флаг, указывающий, будет ли монтироваться на узел дополнительный диск, содержащий конфигурацию для узла.

        Параметр необходимо устанавливать, если в сети, указанной в качестве mainNetwork, отключен DHCP.

        По умолчанию: false

      • nodeGroups.instanceClass.flavorName
        строка

        Обязательный параметр

        Тип заказываемых виртуальных машин.

        Получить список всех доступных flavor’ов: openstack flavor list.

        Для всех не master-узлов желательно использовать flavor’ы с локальным диском. Если в облаке поддерживаются локальные диски, они обычно быстрее и дешевле. Недостатком использования таких flavor’ов является невозможность миграции узлов между гипервизорами.

        Пример создания flavor’а: openstack flavor create c4m8d50 --ram 8192 --disk 50 --vcpus 4.

      • nodeGroups.instanceClass.floatingIPPools
        массив строк

        Список сетей для заказа Floating IP для узлов.

      • nodeGroups.instanceClass.imageName
        строка

        Обязательный параметр

        Имя образа виртуальной машины, который будет использоваться для инстанса.

        Получить список всех доступных образов можно командой: openstack image list.

        Список поддерживаемых Deckhouse ОС и их версий можно найти в документации (учитывайте используемую версию Deckhouse).

      • nodeGroups.instanceClass.mainNetwork
        строка

        Обязательный параметр

        Путь до сети, которая будет подключена к виртуальной машине как основная (шлюз по умолчанию).

        Получить список доступных сетей можно следующей командой: openstack network list.

      • nodeGroups.instanceClass.networksWithSecurityDisabled
        массив строк

        Список сетей из параметров mainNetwork и additionalNetworks, в которых НЕЛЬЗЯ настраивать SecurityGroups и AllowedAddressPairs на портах.

      • nodeGroups.instanceClass.rootDiskSize
        целочисленный

        Размер root-диска. Значение указывается в гигабайтах.

        Параметр также влияет на тип диска. Подробнее…

    • nodeGroups.name
      строка

      Имя NodeGroup, которое будет использоваться для генерации имен узлов.

    • nodeGroups.nodeTemplate

      Настройки Node-объектов в Kubernetes, которые будут добавлены после регистрации узлов.

      • nodeGroups.nodeTemplate.annotations
        объект

        Аналогично стандартному полю metadata.annotations.

        Пример:

        1annotations:
        2  ai.fleet.com/discombobulate: 'true'
        
      • nodeGroups.nodeTemplate.labels
        объект

        Список лейблов, которые будут прикреплены ко всем ресурсам кластера (если они это поддерживают).

        Аналогично стандартному полю metadata.labels.

        Если поменять лейблы в рабочем кластере, после применения изменений необходимо пересоздать все машины.

        Пример:

        1labels:
        2  environment: production
        3  app: warp-drive-ai
        
      • nodeGroups.nodeTemplate.taints
        массив объектов

        Аналогично полю .spec.taints из объекта Node.

        Внимание! Доступны только поля effect, key, values.

        Пример:

        1taints:
        2- effect: NoExecute
        3  key: ship-class
        4  value: frigate
        
        • nodeGroups.nodeTemplate.taints.effect
          строка

          Допустимые значения: NoSchedule, PreferNoSchedule, NoExecute

        • nodeGroups.nodeTemplate.taints.key
          строка
        • nodeGroups.nodeTemplate.taints.value
          строка
    • nodeGroups.replicas
      целочисленный

      Количество узлов.

    • nodeGroups.volumeTypeMap
      объект

      Словарь типов дисков для загрузочного диска.

      Формат элементов словаря: <ЗОНА ДОСТУПНОСТИ>: <ТИП ДИСКА> (см. пример).

      Если значение, указанное в replicas, превышает количество элементов в словаре, узлы, чьи номера превышают длину словаря, получают значения, начиная с начала словаря. Если для словаря из примера указано replicas: 5, с типом диска fast-eu-1a будут worker-0, worker-2 и worker-4, а с типом диска fast-eu-1b будут worker-1 и worker-3.

      Полезные команды:

      • openstack availability zone list — получить список зон доступности.
      • openstack volume type list — получить список типов дисков.

      Пример:

      1volumeTypeMap:
      2  eu-1a: fast-eu-1a
      3  eu-1b: fast-eu-1b
      
    • nodeGroups.zones
      массив строк

      Необязательный параметр.

      Список зон, в которых допустимо создавать узлы.

  • provider
    объект

    Обязательный параметр

    Параметры подключения к API OpenStack.

    Совпадают с параметрами, передаваемыми в поле connection в модуле cloud-provider-openstack.

    • provider.authURL
      строка

      OpenStack Identity API URL.

    • provider.caCert
      строка

      CA x509 сертификат, использовавшийся для подписи (можно указать, если OpenStack API имеет самоподписанный сертификат).

      Пример:

      1caCert:
      2  -----BEGIN CERTIFICATE-----
      3  MIIFyDCCBLCgAwIBAgIQBwDIWH1asdaKNaALUa4NUzANBgkqhkiG9w0BAQsFADBc
      4  ...
      5  -----END CERTIFICATE-----
      
    • provider.domainName
      строка

      Имя домена.

      Переменная OS_USER_DOMAIN_NAME из файла openrc.

    • provider.password
      строка

      Пароль пользователя.

    • provider.region
      строка

      Регион OpenStack, где будет развернут кластер.

    • provider.tenantID
      строка

      ID проекта.

      Не может использоваться вместе с tenantName.

    • provider.tenantName
      строка

      Имя проекта.

      Не может использоваться вместе с tenantID.

    • provider.username
      строка

      Имя пользователя с полными правами на проект.

  • simple
    объект

    Настройки для схемы размещения Simple.

    • simple.externalNetworkDHCP
      булевый

      Флаг, который указывает, включен ли DHCP в сети, указанной в качестве внешней.

      По умолчанию: true

    • simple.externalNetworkName
      строка

      Обязательный параметр

      Имя сети для внешнего взаимодействия. Получить список доступных сетей: openstack network list.

    • simple.podNetworkMode
      строка

      Определяет способ организации трафика в той сети, которая используется для коммуникации между подами (обычно это внутренняя сеть, но бывают исключения):

      • DirectRouting – между узлами работает прямая маршрутизация, в этом режиме отключены SecurityGroups.
      • VXLAN – между узлами НЕ работает прямая маршрутизация, необходимо использовать VXLAN, в этом режиме отключены SecurityGroups.

      Внимание! После изменения этого параметра необходимо выполнить dhctl converge.

      Внимание! После переключения с/на VXLAN требуется перезагрузка всех узлов кластера.

      По умолчанию: "VXLAN"

      Допустимые значения: VXLAN, DirectRouting

  • simpleWithInternalNetwork
    объект

    Настройки для схемы размещения SimpleWithInternalNetwork.

    • simpleWithInternalNetwork.externalNetworkDHCP
      булевый

      Флаг, который указывает, включен ли DHCP в сети, указанной в качестве внешней.

      По умолчанию: true

    • simpleWithInternalNetwork.externalNetworkName
      строка

      Имя сети для внешнего взаимодействия. Получить список доступных сетей: openstack network list.

    • simpleWithInternalNetwork.internalSubnetName
      строка

      Обязательный параметр

      Имя подсети, в которой будут работать узлы кластера.

    • simpleWithInternalNetwork.masterWithExternalFloatingIP
      булевый

      Флаг, который указывает, создавать ли Floating IP на master-узлах.

      По умолчанию: true

    • simpleWithInternalNetwork.podNetworkMode
      строка

      Определяет способ организации трафика в той сети, которая используется для коммуникации между подами (обычно это внутренняя сеть, но бывают исключения):

      • DirectRouting — между узлами работает прямая маршрутизация, в этом режиме отключены SecurityGroups.
      • DirectRoutingWithPortSecurityEnabled — между узлами работает прямая маршрутизация, но только если в OpenStack явно разрешить на портах диапазон адресов, используемых во внутренней сети.
        • Внимание! Убедитесь, что у username есть доступ на редактирование AllowedAddressPairs на портах, подключенных в сеть internalNetworkName. Обычно в OpenStack такого доступа нет, если сеть имеет флаг shared.
      • VXLAN — между узлами НЕ работает прямая маршрутизация, необходимо использовать VXLAN, в этом режиме отключены SecurityGroups.

      Внимание! После изменения этого параметра необходимо выполнить dhctl converge.

      Внимание! После переключения с/на VXLAN требуется перезагрузка всех узлов кластера.

      По умолчанию: "DirectRoutingWithPortSecurityEnabled"

      Допустимые значения: VXLAN, DirectRouting, DirectRoutingWithPortSecurityEnabled

  • sshAllowList
    массив строк

    Список CIDR, разрешенных для подключения к узлам по SSH.

    По умолчанию 0.0.0.0/0.

  • sshPublicKey
    строка

    Обязательный параметр

    Публичный ключ для доступа на узлы.

  • standard
    объект

    Настройки для схемы размещения Standard.

    • standard.bastion
      объект

      Спецификация для описания bastion-узла.

      • standard.bastion.instanceClass
        объект

        Частичное содержимое полей OpenStackInstanceClass.

        • standard.bastion.instanceClass.additionalTags
          объект

          Дополнительные теги, которые будут присвоены созданному инстансу в дополнение к указанным в конфигурации cloud-провайдера.

          Пример:

          1additionalTags:
          2  project: cms-production
          3  severity: critical
          
        • standard.bastion.instanceClass.flavorName
          строка

          Обязательный параметр

          Тип виртуальной машины.

          Получить список всех доступных flavor’ов можно с помощью команды: openstack flavor list.

        • standard.bastion.instanceClass.imageName
          строка

          Обязательный параметр

          Имя образа виртуальной машины, который будет использоваться для инстанса.

          Получить список всех доступных образов можно с помощью команды: openstack image list.

        • standard.bastion.instanceClass.rootDiskSize
          целочисленный

          Размер root-диска. Значение указывается в гигабайтах.

          Параметр также влияет на тип диска. Подробнее…

          По умолчанию: 50

      • standard.bastion.volumeType
        строка

        Тип корневого диска.

      • standard.bastion.zone
        строка

        Зона для создания инстанса для bastion-узла.

    • standard.externalNetworkName
      строка

      Обязательный параметр

      Имя сети для внешнего взаимодействия. Получить список доступных сетей: openstack network list.

    • standard.internalNetworkCIDR
      строка

      Обязательный параметр

      Адресация для внутренней сети узлов кластера.

      Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$

    • standard.internalNetworkDNSServers
      массив строк

      Обязательный параметр

      Список адресов рекурсивных DNS внутренней сети.

      • Элемент массива
        строка

        Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

    • standard.internalNetworkSecurity
      булевый

      Флаг, который определяет необходимость настройки SecurityGroups и AllowedAddressPairs на портах внутренней сети.

      По умолчанию: true

  • standardWithNoRouter
    объект

    Настройки для схемы размещения StandardWithNoRouter.

    • standardWithNoRouter.externalNetworkDHCP
      булевый

      Флаг, который указывает, включен ли DHCP в сети, указанной в качестве внешней.

      По умолчанию: true

    • standardWithNoRouter.externalNetworkName
      строка

      Обязательный параметр

      Имя сети для внешнего взаимодействия. Получить список доступных сетей: openstack network list.

    • standardWithNoRouter.internalNetworkCIDR
      строка

      Обязательный параметр

      Адресация для внутренней сети узлов кластера.

      Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$

    • standardWithNoRouter.internalNetworkSecurity
      булевый

      Флаг, который определяет необходимость настройки SecurityGroups и AllowedAddressPairs на портах внутренней сети.

      По умолчанию: true

  • tags
    объект

    Необязательный параметр.

    Список тегов, которые будут созданы на всех ресурсах, имеющих такую возможность.

    Если поменять теги в рабочем кластере, после применения изменений необходимо пересоздать все машины.

  • zones
    массив строк

    Необязательный параметр.

    Глобальное ограничение набора зон, с которыми работает данный cloud-провайдер.