OpenStackClusterConfiguration
Version: deckhouse.io/v1
Описывает конфигурацию облачного кластера в OpenStack.
Используется облачным провайдером, если управляющий слой (control plane) кластера размещен в облаке.
Выполните следующую команду, чтобы изменить конфигурацию в работающем кластере:
d8 system edit provider-cluster-configuration
После изменения параметров узлов необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.
Пример:
apiVersion: deckhouse.io/v1
kind: OpenStackClusterConfiguration
layout: Standard
sshPublicKey: "<SSH_PUBLIC_KEY>"
zones:
- eu-3a
standard:
  internalNetworkDNSServers:
  - 8.8.8.8
  internalNetworkCIDR: 192.168.195.0/24
  internalNetworkSecurity: false
  externalNetworkName: external-network
provider:
  authURL: "<AUTH_URL>"
  domainName: "<DOMAIN_NAME>"
  tenantID: "<TENANT_ID>"
  username: "<USERNAME>"
  password: "<PASSWORD>"
  region: eu-3
masterNodeGroup:
  replicas: 1
  instanceClass:
    rootDiskSize: 50
    flavorName: m1.large
    imageName: debian-11-genericcloud-amd64-20220911-1135
  volumeTypeMap:
    eu-3a: fast.eu-3a
nodeGroups:
- name: front
  replicas: 2
  instanceClass:
    flavorName: m1.large
    imageName: debian-11-genericcloud-amd64-20220911-1135
    rootDiskSize: 50
    configDrive: false
    floatingIPPools:
    - public
    - shared
    additionalSecurityGroups:
    - sec_group_1
    - sec_group_2
  zones:
  - eu-1a
  - 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. Default-группа также должна быть добавлена в этот список.Используется для задания правил файрвола по отношению к заказываемым инстансам. SecurityGroupsмогут не поддерживаться провайдером.
- объектДополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации облачного провайдера. Пример: additionalTags: project: cms-production severity: critical
- целочисленныйmasterNodeGroup.instanceClass.etcdDiskSizeGbРазмер диска для etcd. Значение указывается в гигабайтах. По умолчанию: 10Пример: etcdDiskSizeGb: 10
- строкаmasterNodeGroup.instanceClass.flavorNameОбязательный параметр Тип заказываемых виртуальных машин. Чтобы узнать список всех доступных flavor’ов, выполните команду: openstack flavor list.Для всех узлов, кроме master, рекомендуется выбирать 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Объединяет инстансы в группу. Инстансы в такой группе будут размещены на одном гипервизоре (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— получить список типов дисков.
 Пример: volumeTypeMap: eu-1a: fast-eu-1a eu-1b: fast-eu-1b
 
- массив объектовnodeGroupsМассив дополнительных NodeGroup для создания статических узлов (например, для выделенных frontend-узлов или шлюзов). - массив строкnodeGroups.instanceClass.additionalNetworksСписок сетей, которые будут подключены к инстансу. Получить список доступных сетей можно командой: openstack network list.Пример: additionalNetworks: - BGP-network-VLAN-3894 - External-VLAN-3699
- массив строкnodeGroups.instanceClass.additionalSecurityGroupsДополнительный список security groups, которые будут добавлены на заказанные инстансы соответствующего OpenStackInstanceClass. Default-группа также должна быть добавлена в этот список.Используется для задания правил файрвола по отношению к заказываемым инстансам. SecurityGroupsмогут не поддерживаться провайдером.
- объектДополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации облачного провайдера. Пример: additionalTags: project: cms-production severity: critical
- булевыйnodeGroups.instanceClass.configDriveНеобязательный параметр. Флаг, указывающий, будет ли монтироваться на узел дополнительный диск, содержащий конфигурацию для узла. Параметр необходимо устанавливать, если в сети, указанной в качестве mainNetwork, отключен DHCP.По умолчанию: false
- строкаnodeGroups.instanceClass.flavorNameОбязательный параметр Тип заказываемых виртуальных машин. Чтобы узнать список всех доступных flavor’ов, выполните команду: openstack flavor list.Для всех узлов, кроме master, рекомендуется выбирать 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.Пример: annotations: ai.fleet.com/discombobulate: 'true'
- объектnodeGroups.nodeTemplate.labelsСписок лейблов, которые будут прикреплены ко всем ресурсам кластера (если они это поддерживают). Аналогично стандартному полю metadata.labels.Если поменять лейблы в рабочем кластере, после применения изменений необходимо пересоздать все машины. Пример: labels: environment: production app: warp-drive-ai
- массив объектовnodeGroups.nodeTemplate.taintsАналогично полю .spec.taintsиз объекта Node.Доступны только поля effect,key,values.Пример: taints: - effect: NoExecute key: ship-class 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.Внимание. Ограничение по зонам доступности работает только при использовании параметра zones(nodeGroups.zones). Если параметрzonesне задан, будут использованы все зоны доступности.Master-узлы будут создаваться в зонах в алфавитном порядке, указанных в этом параметре. Исходя из примера ниже, master-0будет создан в зонеeu-1a,master-1будет создан в зонеeu-1b, аmaster-2будет создан в зонеeu-1a.Полезные команды: - openstack availability zone list— получить список зон доступности.
- openstack volume type list— получить список типов дисков.
 Пример: volumeTypeMap: eu-1a: fast-eu-1a eu-1b: fast-eu-1b
- массив строкnodeGroups.zonesНеобязательный параметр. Список зон, в которых допустимо создавать узлы. 
 
- объектproviderОбязательный параметр Параметры подключения к API OpenStack. Совпадают с параметрами, передаваемыми в поле connectionв модуле cloud-provider-openstack.- строкаprovider.authURLOpenStack Identity API URL. 
- строкаprovider.caCertCA x509 сертификат, использовавшийся для подписи (можно указать, если OpenStack API имеет самоподписанный сертификат). Пример: caCert: | -----BEGIN CERTIFICATE----- MIIFyDCCBLCgAwIBAgIQBwDIWH1asdaKNaALUa4NUzANBgkqhkiG9w0BAQsFADBc ... -----END CERTIFICATE-----
- строкаprovider.domainNameИмя домена. Переменная OS_USER_DOMAIN_NAMEиз файла openrc.
- строкаprovider.passwordПароль пользователя. 
- строкаprovider.regionРегион OpenStack, где будет развернут кластер. 
- строкаprovider.tenantIDID проекта. Не может использоваться вместе с tenantName.
- строкаprovider.tenantNameИмя проекта. Не может использоваться вместе с tenantID.
- строкаprovider.usernameИмя пользователя с полными правами на проект. 
 
- булевыйsimple.externalNetworkDHCPФлаг, который указывает, включен ли DHCP в сети, указанной в качестве внешней. По умолчанию: true
- строкаsimple.externalNetworkNameОбязательный параметр Имя сети для внешнего взаимодействия. Получить список доступных сетей можно командой: openstack network list.
- строкаsimple.podNetworkModeОпределяет способ организации трафика в той сети, которая используется для коммуникации между подами (обычно это внутренняя сеть, но бывают исключения): - DirectRouting– между узлами работает прямая маршрутизация, в этом режиме отключены SecurityGroups.
- VXLAN– между узлами не работает прямая маршрутизация, необходимо использовать VXLAN, в этом режиме отключены SecurityGroups.
 Внимание. После изменения этого параметра необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.Внимание. После переключения с/на VXLAN требуется перезагрузка всех узлов кластера. По умолчанию: VXLANДопустимые значения: VXLAN,DirectRouting
 
- булевый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.bastionСпецификация для описания bastion-узла. - объектДополнительные теги, которые будут присвоены созданному инстансу в дополнение к указанным в конфигурации облачного провайдера. Пример: additionalTags: project: cms-production 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.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
 
- объектНеобязательный параметр. Список тегов, которые будут созданы на всех ресурсах, имеющих такую возможность. Если поменять теги в рабочем кластере, после применения изменений необходимо пересоздать все машины. 
- массив строкzonesНеобязательный параметр. Глобальное ограничение набора зон, с которыми работает данный облачный провайдер.