Модуль автоматически включается для всех облачных кластеров, развернутых в 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

  • tags
    объект

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

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

    Список зон по умолчанию для заказа инстансов. Может быть переопределен индивидуально для каждой NodeGroup.