Если control plane кластера размещен на виртуальных машинах или bare-metal-серверах, cloud-провайдер использует настройки модуля cloud-provider-vsphere в конфигурации Deckhouse. Иначе, если control plane кластера размещен в облаке, cloud-провайдер использует структуру VsphereClusterConfiguration для настройки.

Дополнительная информация о Vsphere Cloud Load Balancers.

VsphereClusterConfiguration

Version: deckhouse.io/v1

Описывает конфигурацию облачного кластера в vSphere.

Используется облачным провайдером, если управляющий слой (control plane) кластера размещен в облаке.

Выполните следующую команду, чтобы изменить конфигурацию в работающем кластере:

kubectl -n d8-system exec -ti svc/deckhouse-leader -c deckhouse -- deckhouse-controller edit provider-cluster-configuration

После изменения параметров узлов необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.

Пример:

apiVersion: deckhouse.io/v1
kind: VsphereClusterConfiguration
sshPublicKey: "<SSH_PUBLIC_KEY>"
layout: Standard
vmFolderPath: folder/prefix
regionTagCategory: k8s-region
zoneTagCategory: k8s-zone
region: region2
zones:
- region2-a
externalNetworkNames:
- net3-k8s
internalNetworkNames:
- K8S_3
internalNetworkCIDR: 172.16.2.0/24
baseResourcePool: kubernetes/cloud
masterNodeGroup:
  replicas: 1
  instanceClass:
    numCPUs: 4
    memory: 8192
    template: Templates/ubuntu-focal-20.04
    mainNetwork: net3-k8s
    additionalNetworks:
    - K8S_3
    datastore: lun10
    rootDiskSize: 50
    runtimeOptions:
      nestedHardwareVirtualization: false
nodeGroups:
- name: worker
  replicas: 1
  zones:
  - ru-central1-a
  instanceClass:
    numCPUs: 4
    memory: 8192
    template: Templates/ubuntu-focal-20.04
    datastore: lun10
    mainNetwork: net3-k8s
provider:
  server: "<SERVER>"
  username: "<USERNAME>"
  password: "<PASSWORD>"
  insecure: true
  • apiVersion
    строка

    Обязательный параметр

    Допустимые значения: deckhouse.io/v1, deckhouse.io/v1alpha1

  • baseResourcePool
    строка

    Относительный (от vSphere Cluster) путь до существующего родительского resourcePool для всех создаваемых (в каждой зоне) resourcePool'ов.

  • disableTimesync
    булевый

    Отключение синхронизации времени со стороны vSphere.

    Внимание! Отключение этого параметра не отключает NTP-демоны в гостевой ОС, а лишь отключает корректировки времени со стороны ESXi.

    По умолчанию: true

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

    Имена сетей (не полный путь, а просто имя), подключенных к виртуальным машинам и используемых vsphere-cloud-controller-manager для проставления ExternalIP в .status.addresses в Node API объект.

    Пример:

    externalNetworkNames:
    - MAIN-1
    - public
    
  • internalNetworkCIDR
    строка

    Подсеть для master-узлов во внутренней сети.

    Адреса выделяются с десятого адреса. Например, для подсети 192.168.199.0/24 будут использованы адреса начиная с 192.168.199.10.

    Будет использоваться при использовании additionalNetworks в masterInstanceClass.

    Шаблон: ^(([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]))$

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

    Имена сетей (не полный путь, а просто имя), подключенных к виртуальным машинам и используемых vsphere-cloud-controller-manager для проставления InternalIP в .status.addresses в Node API объект.

    Пример:

    internalNetworkNames:
    - KUBE-3
    - devops-internal
    
  • kind
    строка

    Обязательный параметр

    Допустимые значения: VsphereClusterConfiguration

  • layout
    строка

    Обязательный параметр

    Название схемы размещения.

    Подробнее о возможных схемах размещения провайдера.

  • masterNodeGroup
    объект

    Обязательный параметр

    Спецификация для описания NodeGroup master-узлов.

    Внимание! После изменения параметров секции masterNodeGroup необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.

    • masterNodeGroup.instanceClass
      объект

      Обязательный параметр

      Частичное содержимое полей VsphereInstanceClass.

      • masterNodeGroup.instanceClass.additionalNetworks
        массив строк

        Список путей до сетей, которые будут подключены к виртуальной машине.

        Указывается относительно vSphere datacenter.

        Пример:

        additionalNetworks:
        - DEVOPS_32
        - DEVOPS_50
        
      • masterNodeGroup.instanceClass.datastore
        строка

        Обязательный параметр

        Путь до Datastore, на котором будут созданы склонированные виртуальные машины.

        Указывается относительно vSphere datacenter.

        Пример:

        datastore: lun-1201
        
      • masterNodeGroup.instanceClass.mainNetwork
        строка

        Обязательный параметр

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

        Указывается относительно vSphere datacenter.

        Пример:

        mainNetwork: k8s-msk-178
        
      • masterNodeGroup.instanceClass.mainNetworkIPAddresses
        массив объектов

        Cписок статических IP-адресов (с CIDR-префиксом), назначаемых (по очереди) узлам в основной сети (параметр mainNetwork).

        По умолчанию включен DHCP-клиент.

        Пример:

        mainNetworkIPAddresses:
        - address: 10.1.14.20/24
          gateway: 10.1.14.254
          nameservers:
            addresses:
            - 8.8.8.8
            - 8.8.4.4
        
        • masterNodeGroup.instanceClass.mainNetworkIPAddresses.address
          строка

          Обязательный параметр

          IP-адрес с CIDR префиксом.

          Шаблон: ^(([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]))$

        • masterNodeGroup.instanceClass.mainNetworkIPAddresses.gateway
          строка

          Обязательный параметр

          IP-адрес шлюза по умолчанию.

          Должен находится в подсети, указанной в параметре address.

          Шаблон: ^(([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])$

        • masterNodeGroup.instanceClass.mainNetworkIPAddresses.nameservers
          объект

          Обязательный параметр

          • masterNodeGroup.instanceClass.mainNetworkIPAddresses.nameservers.addresses
            массив строк

            Список DNS-серверов.

            Пример:

            addresses:
            - 8.8.8.8
            - 8.8.4.4
            
            • Элемент массива
              строка

              Шаблон: ^(([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])$

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

            Список доменов для поиска на указанных DNS-серверах.

            Пример:

            search:
            - tech.lan
            
      • masterNodeGroup.instanceClass.memory
        целочисленный

        Обязательный параметр

        Количество памяти (в мегабайтах), выделенной виртуальной машине.

        Пример:

        memory: 8192
        
      • masterNodeGroup.instanceClass.numCPUs
        целочисленный

        Обязательный параметр

        Количество виртуальных процессорных ядер, выделяемых виртуальной машине.

        Пример:

        numCPUs: 2
        
      • masterNodeGroup.instanceClass.resourcePool
        строка

        Путь до Resource Pool, в котором будут созданы склонированные виртуальные машины.

        Указывается относительно зоны (vSphere Cluster).

        Пример:

        resourcePool: rp-2012
        
      • masterNodeGroup.instanceClass.rootDiskSize
        целочисленный

        Размер (в гигабайтах) корневого диска в виртуальной машине.

        Если в template указан диск меньшего размера, автоматически произойдет его расширение.

        Пример:

        rootDiskSize: 50
        
      • masterNodeGroup.instanceClass.runtimeOptions
        объект

        Дополнительные (опциональные) параметры виртуальных машин.

        • masterNodeGroup.instanceClass.runtimeOptions.cpuLimit
          целочисленный

          Верхний лимит (в MHz) потребляемой частоты процессоров для создаваемых виртуальных машин.

        • masterNodeGroup.instanceClass.runtimeOptions.cpuReservation
          целочисленный

          Величина зарезервированной для виртуальной машины частоты CPU (в MHz).

        • masterNodeGroup.instanceClass.runtimeOptions.cpuShares
          целочисленный

          Относительная величина CPU Shares для создаваемых виртуальных машин.

        • masterNodeGroup.instanceClass.runtimeOptions.memoryLimit
          целочисленный

          Верхний лимит (в мегабайтах) потребляемой памяти для создаваемых виртуальных машин.

        • masterNodeGroup.instanceClass.runtimeOptions.memoryReservation
          целочисленный

          Процент зарезервированной для виртуальной машины памяти в кластере. В процентах относительно .spec.memory.

          Допустимые значения: 0 <= X <= 100

        • masterNodeGroup.instanceClass.runtimeOptions.memoryShares
          целочисленный

          Относительная величина Memory Shares для создаваемых виртуальных машин.

          Допустимые значения: 0 <= X <= 100

        • masterNodeGroup.instanceClass.runtimeOptions.nestedHardwareVirtualization
          булевый

          Включение Hardware Assisted Virtualization на созданных виртуальных машинах.

      • masterNodeGroup.instanceClass.template
        строка

        Обязательный параметр

        Путь до VirtualMachine Template, который будет склонирован для создания новой виртуальной машины.

        Пример:

        template: dev/golden_image
        
    • masterNodeGroup.replicas
      целочисленный

      Обязательный параметр

      Количество создаваемых master-узлов. Для обеспечения кворума важно, чтобы оно было нечетным.

      Допустимые значения: 1 <= X

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

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

  • nodeGroups
    массив объектов

    Массив дополнительных NodeGroup для создания статических узлов (например, для выделенных frontend-узлов или шлюзов).

    • nodeGroups.instanceClass
      объект

      Обязательный параметр

      Частичное содержимое полей VsphereInstanceClass.

      • nodeGroups.instanceClass.additionalNetworks
        массив строк

        Список путей до сетей, которые будут подключены к виртуальной машине.

        Указывается относительно vSphere datacenter.

        Пример:

        additionalNetworks:
        - DEVOPS_32
        - DEVOPS_50
        
      • nodeGroups.instanceClass.datastore
        строка

        Обязательный параметр

        Путь до Datastore, на котором будут созданы склонированные виртуальные машины.

        Указывается относительно vSphere datacenter.

        Пример:

        datastore: lun-1201
        
      • nodeGroups.instanceClass.mainNetwork
        строка

        Обязательный параметр

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

        Указывается относительно vSphere datacenter.

        Пример:

        mainNetwork: k8s-msk-178
        
      • nodeGroups.instanceClass.mainNetworkIPAddresses
        массив объектов

        Cписок статических IP-адресов (с CIDR-префиксом), назначаемых (по очереди) узлам в основной сети (параметр mainNetwork).

        По умолчанию включен DHCP-клиент.

        Пример:

        mainNetworkIPAddresses:
        - address: 10.1.14.20/24
          gateway: 10.1.14.254
          nameservers:
            addresses:
            - 8.8.8.8
            - 8.8.4.4
        
        • nodeGroups.instanceClass.mainNetworkIPAddresses.address
          строка

          Обязательный параметр

          IP-адрес с CIDR префиксом.

          Шаблон: ^(([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]))$

        • nodeGroups.instanceClass.mainNetworkIPAddresses.gateway
          строка

          Обязательный параметр

          IP-адрес шлюза по умолчанию.

          Должен находится в подсети, указанной в параметре address.

          Шаблон: ^(([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])$

        • nodeGroups.instanceClass.mainNetworkIPAddresses.nameservers
          объект

          Обязательный параметр

          • nodeGroups.instanceClass.mainNetworkIPAddresses.nameservers.addresses
            массив строк

            Список DNS-серверов.

            Пример:

            addresses:
            - 8.8.8.8
            - 8.8.4.4
            
            • Элемент массива
              строка

              Шаблон: ^(([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])$

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

            Список доменов для поиска на указанных DNS-серверах.

            Пример:

            search:
            - tech.lan
            
      • nodeGroups.instanceClass.memory
        целочисленный

        Обязательный параметр

        Количество памяти (в мегабайтах), выделенной виртуальной машине.

        Пример:

        memory: 8192
        
      • nodeGroups.instanceClass.numCPUs
        целочисленный

        Обязательный параметр

        Количество виртуальных процессорных ядер, выделяемых виртуальной машине.

        Пример:

        numCPUs: 2
        
      • nodeGroups.instanceClass.resourcePool
        строка

        Путь до Resource Pool, в котором будут созданы склонированные виртуальные машины.

        Указывается относительно зоны (vSphere Cluster).

        Пример:

        resourcePool: rp-2012
        
      • nodeGroups.instanceClass.rootDiskSize
        целочисленный

        Размер (в гигабайтах) корневого диска в виртуальной машине.

        Если в template указан диск меньшего размера, автоматически произойдет его расширение.

        Пример:

        rootDiskSize: 50
        
      • nodeGroups.instanceClass.runtimeOptions
        объект

        Дополнительные (опциональные) параметры виртуальных машин.

        • nodeGroups.instanceClass.runtimeOptions.cpuLimit
          целочисленный

          Верхний лимит (в MHz) потребляемой частоты процессоров для создаваемых виртуальных машин.

        • nodeGroups.instanceClass.runtimeOptions.cpuReservation
          целочисленный

          Величина зарезервированной для виртуальной машины частоты CPU (в MHz).

        • nodeGroups.instanceClass.runtimeOptions.cpuShares
          целочисленный

          Относительная величина CPU Shares для создаваемых виртуальных машин.

        • nodeGroups.instanceClass.runtimeOptions.memoryLimit
          целочисленный

          Верхний лимит (в мегабайтах) потребляемой памяти для создаваемых виртуальных машин.

        • nodeGroups.instanceClass.runtimeOptions.memoryReservation
          целочисленный

          Процент зарезервированной для виртуальной машины памяти в кластере. В процентах относительно .spec.memory.

          Допустимые значения: 0 <= X <= 100

        • nodeGroups.instanceClass.runtimeOptions.memoryShares
          целочисленный

          Относительная величина Memory Shares для создаваемых виртуальных машин.

          Допустимые значения: 0 <= X <= 100

        • nodeGroups.instanceClass.runtimeOptions.nestedHardwareVirtualization
          булевый

          Включение Hardware Assisted Virtualization на созданных виртуальных машинах.

      • nodeGroups.instanceClass.template
        строка

        Обязательный параметр

        Путь до VirtualMachine Template, который будет склонирован для создания новой виртуальной машины.

        Пример:

        template: dev/golden_image
        
    • 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.zones
      массив строк

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

  • nsxt
    объект

    Поддержка cloud controller manager’ом балансировщиков (LoadBalancer) в Vsphere через NSX-T.

    • nsxt.defaultIpPoolName
      строка

      Обязательный параметр

      Имя пула IP-адресов по умолчанию, который используется, если в SVC не установлена аннотация loadbalancer.vmware.io/class.

      Пример:

      defaultIpPoolName: pool1
      
    • nsxt.defaultTcpAppProfileName
      строка

      Имя профиля по умолчанию, используемого для TCP-соединений в NSX-T.

      По умолчанию: "default-tcp-lb-app-profile"

      Примеры:

      defaultTcpAppProfileName: default-tcp-lb-app-profile
      
      defaultTcpAppProfileName: tcp-profile1
      
    • nsxt.defaultUdpAppProfileName
      строка

      Имя профиля по умолчанию, используемого для UDP-соединений в NSX-T.

      По умолчанию: "default-udp-lb-app-profile"

      Примеры:

      defaultUdpAppProfileName: default-udp-lb-app-profile
      
      defaultUdpAppProfileName: udp-profile1
      
    • nsxt.host
      строка

      Обязательный параметр

      Адрес NSX-T.

      Пример:

      host: 1.2.3.4
      
    • nsxt.insecureFlag
      булевый

      Должен быть установлен в true, если NSX-T использует самоподписанный сертификат.

      Примеры:

      insecureFlag: true
      
      insecureFlag: false
      
    • nsxt.loadBalancerClass
      массив

      Дополнительная секция, определяющая классы балансировщика (LoadBalancer Class) (чтобы использовать класс, установите аннотацию loadbalancer.vmware.io/class: <ИМЯ КЛАССА> на SVC).

      Примеры:

      loadBalancerClass: []
      
      loadBalancerClass:
        name: LBC1
        ipPoolName: pool2
      
      loadBalancerClass:
        name: LBC1
        ipPoolName: pool2
        tcpAppProfileName: profile2
        udpAppProfileName: profile3
      
      • nsxt.loadBalancerClass.ipPoolName
        строка

        Обязательный параметр

        Имя пула IP-адресов.

      • nsxt.loadBalancerClass.name
        строка

        Обязательный параметр

        Имя класса балансировщика (LoadBalancer Class) для установки аннотации loadbalancer.vmware.io/class: <ИМЯ КЛАССА> в SVC.

      • nsxt.loadBalancerClass.tcpAppProfileName
        строка

        Имя профиля по умолчанию, используемого для TCP-соединений.

        По умолчанию: "defaultTcpAppProfileName"

      • nsxt.loadBalancerClass.udpAppProfileName
        строка

        Имя профиля по умолчанию, используемого для UDP-соединений.

        По умолчанию: "defaultUdpAppProfileName"

    • nsxt.password
      строка

      Обязательный параметр

      Пароль пользователя NSX-T.

      Пример:

      password: password
      
    • nsxt.size
      строка

      Размер сервиса балансировщика (LoadBalancer).

      По умолчанию: "MEDIUM"

      Допустимые значения: SMALL, MEDIUM, LARGE, XLARGE

      Пример:

      size: SMALL
      
    • nsxt.tier1GatewayPath
      строка

      Обязательный параметр

      Путь к политике NSX-T tier1 gateway.

      Пример:

      tier1GatewayPath: "/path/tier1"
      
    • nsxt.user
      строка

      Обязательный параметр

      Имя пользователя NSX-T.

      Пример:

      user: user
      
  • provider
    объект

    Обязательный параметр

    Параметры подключения к vCenter.

    • provider.insecure
      булевый

      Установите true, если vCenter использует самоподписанный сертификат.

      По умолчанию: false

    • provider.password
      строка

      Обязательный параметр

      Пароль.

    • provider.server
      строка

      Обязательный параметр

      Хост или IP-адрес vCenter сервера.

    • provider.username
      строка

      Обязательный параметр

      Login ID.

  • region
    строка

    Обязательный параметр

    Тег, прикрепленный к vSphere Datacenter, в котором будут происходить все операции: заказ виртуальных машин, размещение их дисков на datastore, подключение к network.

  • regionTagCategory
    строка

    Обязательный параметр

    Имя категории тегов, использующихся для идентификации региона (vSphere Datacenter).

    По умолчанию: "k8s-region"

  • sshPublicKey
    строка

    Обязательный параметр

    Публичный ключ для доступа на узлы.

  • useNestedResourcePool
    булевый

    Создание вложенного пула (true) или использование основного пула (false).

    По умолчанию: true

  • vmFolderExists
    булевый

    Установите значение в true, если путь заданный в vmFolderPath существует. Установка более одного кластера в папку невозможна.

    По умолчанию: false

  • vmFolderPath
    строка

    Обязательный параметр

    Путь до VirtualMachine Folder, в котором будут создаваться склонированные виртуальные машины.

    Пример:

    vmFolderPath: dev/test
    
  • zoneTagCategory
    строка

    Обязательный параметр

    Имя категории тегов, использующихся для идентификации зоны (vSphere Cluster).

    По умолчанию: "k8s-zone"

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

    Обязательный параметр

    Глобальное ограничение набора зон, с которыми работает данный cloud-провайдер.