Модуль автоматически включается для всех облачных кластеров, развернутых в OpenStack.
Количество и параметры процесса заказа машин в облаке настраиваются в custom resource NodeGroup модуля node-manager, в котором также указывается название используемого для этой группы узлов инстанс-класса (параметр cloudInstances.classReference NodeGroup). Инстанс-класс для cloud-провайдера OpenStack — это custom resource OpenStackInstanceClass, в котором указываются конкретные параметры самих машин.
Настройки модуля устанавливаются автоматически на основании выбранной схемы размещения. В большинстве случаев нет необходимости в ручной конфигурации модуля.
Если вам необходимо настроить модуль, потому что, например, у вас bare-metal-кластер, для которого нужно включить возможность добавлять дополнительные инстансы из OpenStack, смотрите раздел Как настроить Hybrid-кластер в OpenStack.
Внимание! При изменении настроек модуля пересоздания существующих объектов
Machinesв кластере НЕ происходит (новые объектыMachineбудут создаваться с новыми параметрами). Пересоздание происходит только при изменении параметровNodeGroupиOpenStackInstanceClass. См. подробнее в документации модуля node-manager. Для настройки аутентификации с помощью модуляuser-authnнеобходимо в Crowd’е проекта создать новоеGenericприложение.
Список необходимых сервисов OpenStack
Список сервисов OpenStack, необходимых для работы Deckhouse Kubernetes Platform в OpenStack:
| Сервис | Версия API |
|---|---|
| Identity (Keystone) | v3 |
| Compute (Nova) | v2 |
| Network (Neutron) | v2 |
| Block Storage (Cinder) | v3 |
| Load Balancing (Octavia) ⃰ | v2 |
⃰ Если нужно заказывать Load Balancer.
В случае использования публичных облаков, адреса и порты API можно узнать в официальной документации сервиса:
Чтобы настроить модуль, используйте custom resource ModuleConfig с именем cloud-provider-openstack (подробнее о настройке Deckhouse…).
Пример ресурса ModuleConfig/cloud-provider-openstack для настройки модуля:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: cloud-provider-openstack
spec:
version: 1
enabled: true
settings: # <-- Параметры модуля из раздела "Параметры" ниже.
Параметры
Версия схемы: 1
- массив строкadditionalExternalNetworkNames
Имена дополнительных сетей, которые могут быть подключены к виртуальной машине и использованы в
cloud-controller-managerдля проставленияExternalIPв.status.addressesв Node API объект.Если в кластере есть инстансы, для которых будут использоваться External Networks, отличные от указанных в схеме размещения, их следует передавать в параметре
additionalExternalNetworkNames.Пример:
additionalExternalNetworkNames: - some-bgp-network - объектconnection
Параметры подключения к API cloud-провайдера.
- строкаconnection.authURL
OpenStack Identity API URL.
- строкаconnection.caCert
CA x509 сертификат в PEM формате, использовавшийся для подписи (можно указать, если OpenStack API имеет самоподписанный сертификат).
- строкаconnection.domainName
Имя домена.
- строкаconnection.password
Пароль пользователя.
- строкаconnection.region
Регион OpenStack, где будет развернут кластер.
- строкаconnection.tenantID
ID проекта.
Не может использоваться вместе с
tenantName. - строкаconnection.tenantName
Имя проекта.
Не может использоваться вместе с
tenantID. - строкаconnection.username
Имя пользователя с полными правами на проект.
- массив строкexternalNetworkNames
Имена сетей, подключенные к виртуальной машине и используемые
cloud-controller-managerдля проставления ExternalIP в.status.addressesв Node API объект.Пример:
externalNetworkNames: - KUBE-3 - devops-internal - булевыйignoreVolumeMicroversion
Настройка для обратной совместимости. Включите, если версия OpenStack в облаке меньше 3.34 и вы получаете ошибку «Version 3.34 is not supported by the API. Minimum is 3.0 and maximum is 3.x» при заказе PV. Это отключит изменения размеров томов «на лету», но вернет возможность заказа новых PV. (оригинальный PR https://github.com/kubernetes/cloud-provider-openstack/pull/1986/)
По умолчанию:
false - объектinstances
Параметры инстансов, которые используются при создании виртуальных машин.
- массив строкinstances.additionalNetworks
Список сетей, которые будут подключены к инстансу.
- строкаinstances.imageName
Имя образа.
- строкаinstances.mainNetwork
Путь до сети, которая будет подключена к виртуальной машине как основная сеть (шлюз по умолчанию).
- массив строкinstances.securityGroups
Список securityGroups, которые нужно прикрепить к заказанным инстансам. Используется для задания firewall-правил по отношению к заказываемым инстансам.
- строкаinstances.sshKeyPairName
Имя OpenStack ресурса
keypair, который будет использоваться при заказе инстансов.
- массив строкinternalNetworkNames
Имена сетей, подключенные к виртуальной машине и используемые
cloud-controller-managerдля проставления InternalIP в.status.addressesв Node API объект.Пример:
internalNetworkNames: - KUBE-3 - devops-internal - объектloadBalancer
Параметры Load Balancer’а.
- строкаloadBalancer.floatingNetworkID
ID external network, который будет использоваться для заказа Floating IP.
- строкаloadBalancer.subnetID
ID подсети Neutron, в которой необходимо создать load balancer virtual IP.
- строкаpodNetworkMode
Способ организации трафика в той сети, которая используется для коммуникации между подами (обычно это internal-сеть, но бывают исключения):
DirectRouting– между узлами работает прямая маршрутизация.DirectRoutingWithPortSecurityEnabled— между узлами работает прямая маршрутизация, но только если в OpenStack явно разрешить на портах диапазон адресов, используемых во внутренней сети:- Внимание! Убедитесь, что у
usernameесть доступ на редактирование AllowedAddressPairs на портах, подключенных в сетьinternalNetworkName. Обычно в OpenStack такого доступа нет, если сеть имеет флагshared.
- Внимание! Убедитесь, что у
VXLAN– между узлами НЕ работает прямая маршрутизация, необходимо использовать VXLAN.
Допустимые значения:
DirectRouting,DirectRoutingWithPortSecurityEnabled,VXLAN - объектstorageClass
Автоматическое создание StorageClass’ов, которые есть в OpenStack.
- строкаstorageClass.default
Имя StorageClass’а, который будет использоваться в кластере по умолчанию.
Если параметр не задан, фактическим StorageClass’ом по умолчанию будет:
- присутствующий в кластере произвольный StorageClass с default-аннотацией;
- первый StorageClass из создаваемых модулем (в порядке из OpenStack).
Пример:
default: ceph-ssd - массив строкstorageClass.exclude
Полные имена (или regex выражения имен) StorageClass’ов, которые не будут созданы в кластере.
Пример:
exclude: - ".*-hdd" - iscsi-fast - булевыйstorageClass.topologyEnabled
Этот параметр управляет функционалом драйвера, который определяет необходимость учета ограничения топологии облака при заказе дисков. Это учитывается только при создании дисков, существующие PersistentVolume’ы не будут изменены.
Внимание! Если установлено значение
false, все новые PersistentVolume’ы создаются без учета ограничений топологии.По умолчанию:
true
- объект
Словарь тегов, которые будут на всех заказываемых инстансах.
- массив строкzones
Список зон по умолчанию для заказа инстансов. Может быть переопределен индивидуально для каждой NodeGroup.