Доступно только в Enterprise Edition.

Модуль автоматически включается для всех облачных кластеров, развёрнутых в OpenStack.

Количество и параметры процесса заказа машин в облаке настраиваются в custom resource NodeGroup модуля node-manager, в котором также указывается название используемого для этой группы узлов инстанс-класса (параметр cloudInstances.classReference NodeGroup). Инстанс-класс для cloud-провайдера OpenStack — это custom resource OpenStackInstanceClass, в котором указываются конкретные параметры самих машин.

Настройки модуля устанавливаются автоматически на основании выбранной схемы размещения. В большинстве случаев нет необходимости в ручной конфигурации модуля.

Если вам необходимо настроить модуль, потому что, например, у вас bare metal кластер, для которого нужно включить возможность добавлять дополнительные инстансы из OpenStack, то смотрите раздел как настроить Hybrid кластер в OpenStack.

Внимание! При изменении настроек модуля пересоздания существующих Machines НЕ происходит (новые Machines будут создаваться с новыми параметрами). Пересоздание происходит только при изменении параметров NodeGroup и OpenStackInstanceClass. См. подробнее в документации модуля node-manager. Для настройки аутентификации с помощью модуля user-authn необходимо в Crowd’е проекта создать новое Generic приложение.

Чтобы настроить модуль используйте 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 имеет self-signed сертификат).

    • 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строка

      Путь до network, которая будет подключена к виртуальной машине как основная сеть (шлюз по умолчанию).

    • 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 subnet, в котором создать load balancer virtual IP.

  • podNetworkModeстрока

    Способ организации трафика в той сети, которая используется для коммуникации между Pod’ами (обычно это internal сеть, но бывают исключения):

    • DirectRouting – между узлами работает прямая маршрутизация.
    • DirectRoutingWithPortSecurityEnabled — между узлами работает прямая маршрутизация, но только если в OpenStack явно разрешить на Port’ах диапазон адресов, используемых во внутренней сети:
      • Внимание! Убедитесь, что у username есть доступ на редактирование AllowedAddressPairs на Port’ах, подключенных в сеть 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.