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.authURL
OpenStack Identity API URL.
 - строкаprovider.caCert
CA x509 сертификат, использовавшийся для подписи (можно указать, если OpenStack API имеет самоподписанный сертификат).
Пример:
caCert: | -----BEGIN CERTIFICATE----- MIIFyDCCBLCgAwIBAgIQBwDIWH1asdaKNaALUa4NUzANBgkqhkiG9w0BAQsFADBc ... -----END CERTIFICATE----- - строкаprovider.domainName
Имя домена.
Переменная
OS_USER_DOMAIN_NAMEиз файла openrc. - строкаprovider.password
Пароль пользователя.
 - строкаprovider.region
Регион OpenStack, где будет развернут кластер.
 - строкаprovider.tenantID
ID проекта.
Не может использоваться вместе с
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
Необязательный параметр.
Глобальное ограничение набора зон, с которыми работает данный облачный провайдер.