OpenStackClusterConfiguration
Version: deckhouse.io/v1
Описывает конфигурацию облачного кластера в OpenStack.
Используется cloud-провайдером если control plane кластера размещен в облаке.
Выполните следующую команду, чтобы изменить конфигурацию в работающем кластере:
kubectl -n d8-system exec -ti deploy/deckhouse -- deckhouse-controller edit provider-cluster-configuration
Пример:
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: 20
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: 20
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
в дополнение к указанным в конфигурации cloud-провайдера.Используется для задания правил firewall по отношению к заказываемым инстансам.
SecurityGroups
могут не поддерживаться провайдером. - объект
Дополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации cloud-провайдера.
Пример:
additionalTags: project: cms-production severity: critical
- masterNodeGroup.instanceClass.etcdDiskSizeGbцелочисленный
Размер диска для etcd. Значение указывается в гигабайтах.
По умолчанию:
10
Пример:
etcdDiskSizeGb: 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
.Внимание! Сейчас поддерживаются и тестируются только
Ubuntu 18.04
,Ubuntu 20.04
,Ubuntu 22.04
,Centos 7
,Centos 8
,Centos 9
,Debian 9
,Debian 10
,Debian 11
. - masterNodeGroup.instanceClass.rootDiskSizeцелочисленный
Размер root-диска. Значение указывается в гигабайтах.
Параметр также влияет на тип диска. Подробнее…
- masterNodeGroup.instanceClass.additionalSecurityGroupsмассив строк
- masterNodeGroup.replicasцелочисленный
Обязательный параметр
Количество создаваемых master-узлов. Важно иметь нечётное количество мастеров для обеспечения кворума.
Допустимые значения:
1 <= X
- 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
- masterNodeGroup.instanceClassобъект
- nodeGroupsмассив объектов
Массив дополнительных NodeGroup для создания статичных узлов (например, для выделенных frontend-узлов или шлюзов).
- nodeGroups.instanceClassобъект
Частичное содержимое полей OpenStackInstanceClass.
- nodeGroups.instanceClass.additionalNetworksмассив строк
Список сетей, которые будут подключены к инстансу.
openstack network list
Пример:
additionalNetworks: - BGP-network-VLAN-3894 - External-VLAN-3699
- nodeGroups.instanceClass.additionalSecurityGroupsмассив строк
Дополнительный список security groups, которые будут добавлены на заказанные инстансы соответствующего
OpenStackInstanceClass
в дополнение к указанным в конфигурации cloud-провайдера.Используется для задания правил firewall по отношению к заказываемым инстансам.
SecurityGroups
могут не поддерживаться провайдером. - объект
Дополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации cloud-провайдера.
Пример:
additionalTags: project: cms-production 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
.Внимание! Сейчас поддерживаются и тестируются только
Ubuntu 18.04
,Ubuntu 20.04
,Ubuntu 22.04
,Centos 7
,Centos 8
,Centos 9
,Debian 9
,Debian 10
,Debian 11
. - nodeGroups.instanceClass.mainNetworkстрока
Обязательный параметр
Путь до сети, которая будет подключена к виртуальной машине как основная (шлюз по умолчанию). Получить список доступных сетей:
openstack network list
. - nodeGroups.instanceClass.networksWithSecurityDisabledмассив строк
Список сетей из параметров
mainNetwork
иadditionalNetworks
, в которых НЕЛЬЗЯ настраиватьSecurityGroups
иAllowedAddressPairs
на портах. - nodeGroups.instanceClass.rootDiskSizeцелочисленный
Размер root-диска. Значение указывается в гигабайтах.
Параметр также влияет на тип диска. Подробнее…
- nodeGroups.instanceClass.additionalNetworksмассив строк
- 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.nodeTemplate.taints.effectстрока
- nodeGroups.nodeTemplate.annotationsобъект
- 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
— получить список типов дисков.
Пример:
volumeTypeMap: eu-1a: fast-eu-1a eu-1b: fast-eu-1b
- nodeGroups.zonesмассив строк
Необязательный параметр.
Список зон, в которых допустимо создавать узлы.
- nodeGroups.instanceClassобъект
- providerобъект
Обязательный параметр
Параметры подключения к API OpenStack.
Совпадают с параметрами, передаваемыми в поле
connection
в модуле cloud-provider-openstack.- provider.authURLстрока
OpenStack Identity API URL.
- provider.caCertстрока
CA x509 сертификат, использовавшийся для подписи (можно указать, если OpenStack API имеет self-signed сертификат).
Пример:
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строка
Имя пользователя с полными правами на проект.
- provider.authURLстрока
- simpleобъект
Настройки для схемы размещения
Simple
.- simple.externalNetworkDHCPбулевый
Флаг, который указывает, включен ли DHCP в сети, указанной в качестве внешней.
По умолчанию:
true
- simple.externalNetworkNameстрока
Обязательный параметр
Имя сети для внешнего взаимодействия. Получить список доступных сетей:
openstack network list
. - simple.podNetworkModeстрока
Определяет способ организации трафика в той сети, которая используется для коммуникации между Pod’ами (обычно это внутренняя сеть, но бывают исключения):
DirectRouting
– между узлами работает прямая маршрутизация, в этом режиме отключены SecurityGroups.VXLAN
– между узлами НЕ работает прямая маршрутизация, необходимо использовать VXLAN, в этом режиме отключены SecurityGroups.
Внимание! После изменения этого параметра необходимо выполнить
dhctl converge
.Внимание! После переключения с/на VXLAN требуется перезагрузка всех узлов кластера.
По умолчанию:
"VXLAN"
Допустимые значения:
VXLAN
,DirectRouting
- simple.externalNetworkDHCPбулевый
- simpleWithInternalNetworkобъект
Настройки для схемы размещения
SimpleWithInternalNetwork
.- simpleWithInternalNetwork.externalNetworkNameстрока
Имя сети для внешнего взаимодействия. Получить список доступных сетей:
openstack network list
. - simpleWithInternalNetwork.internalSubnetNameстрока
Обязательный параметр
Имя подсети, в которой будут работать узлы кластера.
- simpleWithInternalNetwork.masterWithExternalFloatingIPбулевый
Флаг, который указывает создавать ли Floating IP на master-узлах.
По умолчанию:
true
- simpleWithInternalNetwork.podNetworkModeстрока
Определяет способ организации трафика в той сети, которая используется для коммуникации между Pod’ами (обычно это внутренняя сеть, но бывают исключения):
DirectRouting
— между узлами работает прямая маршрутизация, в этом режиме отключены SecurityGroups.DirectRoutingWithPortSecurityEnabled
— между узлами работает прямая маршрутизация, но только если в OpenStack явно разрешить на портах диапазон адресов, используемых во внутренней сети.- Внимание! Убедитесь, что у
username
есть доступ на редактированиеAllowedAddressPairs
на портах, подключенных в сетьinternalNetworkName
. Обычно в OpenStack такого доступа нет, если сеть имеет флагshared
.
- Внимание! Убедитесь, что у
VXLAN
— между узлами НЕ работает прямая маршрутизация, необходимо использовать VXLAN, в этом режиме отключены SecurityGroups.
Внимание! После изменения этого параметра необходимо выполнить
dhctl converge
.Внимание! После переключения с/на VXLAN требуется перезагрузка всех узлов кластера.
По умолчанию:
"DirectRoutingWithPortSecurityEnabled"
Допустимые значения:
VXLAN
,DirectRouting
,DirectRoutingWithPortSecurityEnabled
- simpleWithInternalNetwork.externalNetworkNameстрока
- sshAllowListмассив строк
Список CIDR, разрешенных для подключения к узлам по ssh.
По умолчанию,
0.0.0.0/0
. - sshPublicKeyстрока
Обязательный параметр
Публичный ключ для доступа на узлы.
- standardобъект
Настройки для схемы размещения
Standard
.- standard.bastionобъект
Спецификация для описания bastion-узла.
- standard.bastion.instanceClassобъект
Частичное содержимое полей OpenStackInstanceClass.
- объект
Дополнительные теги, которые будут присвоены созданному инстансу в дополнение к указанным в конфигурации cloud-провайдера.
Пример:
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-диска. Значение указывается в гигабайтах.
Параметр также влияет на тип диска. Подробнее…
- объект
- standard.bastion.volumeTypeстрока
Тип корневого диска.
- standard.bastion.zoneстрока
Зона, в которой создавать инстанс для bastion-узла.
- standard.bastion.instanceClassобъект
- 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
- standard.bastionобъект
- 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
- standardWithNoRouter.externalNetworkDHCPбулевый
- объект
Необязательный параметр.
Список тегов, которые будут созданы на всех ресурсах, имеющих такую возможность.
Если поменять теги в рабочем кластере, то после применения изменений необходимо пересоздать все машины.
- zonesмассив строк
Необязательный параметр.
Глобальное ограничение набора зон, с которыми работает данный cloud-провайдер.