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

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

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

Storage

Модуль автоматически создает StorageClass для каждого Datastore и DatastoreCluster из зон (зоны).

Также он позволяет настроить имя StorageClass’а, который будет использоваться в кластере по умолчанию (параметр default) и отфильтровать ненужные StorageClass’ы (параметр exclude).

CSI

Подсистема хранения по умолчанию использует CNS-диски с возможностью изменения их размера на лету. Но также поддерживается работа и в legacy-режиме с использованием FCD-дисков. Поведение настраивается параметром compatibilityFlag.

Важная информация об увеличении размера PVC

Из-за особенностей работы volume-resizer CSI и vSphere API после увеличения размера PVC нужно сделать следующее:

  1. На узле, где находится под, выполнить команду kubectl cordon <имя_узла>.
  2. Удалить под.
  3. Убедиться, что изменение размера прошло успешно. В объекте PVC не будет condition Resizing.

    Состояние FileSystemResizePending не является проблемой.

  4. На узле, где находится под, выполнить команду kubectl uncordon <имя_узла>.

Требования к окружению

  • Требования к версии vSphere: v7.0U2 (необходимо для работы механизма Online volume expansion).
  • vCenter, до которого есть доступ изнутри кластера с master-узлов.
  • Создать Datacenter, в котором создать:
    1. VirtualMachine template.
      • Образ виртуальной машины должен использовать Virtual machines with hardware version 15 or later (необходимо для работы online resize).
      • В образе должны быть установлены следующие пакеты: open-vm-tools, cloud-init и cloud-init-vmware-guestinfo (если используется версия cloud-init ниже 21.3).
    2. Network, доступную на всех ESXi, на которых будут создаваться виртуальные машины.
    3. Datastore (или несколько), подключенный ко всем ESXi, на которых будут создаваться виртуальные машины.
      • На Datastore’ы необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию k8s-zone). Этот тег будет обозначать зону. Все Cluster’ы из конкретной зоны должны иметь доступ ко всем Datastore’ам с идентичной зоной.
    4. Cluster, в который добавить необходимые используемые ESXi.
      • На Cluster необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию k8s-zone). Этот тег будет обозначать зону.
    5. Folder для создаваемых виртуальных машин.
      • Опциональный. По умолчанию будет использоваться root vm-каталог.
    6. Роль с необходимым набором прав.
    7. Пользователя, привязав к нему роль из п. 6.
  • На созданный Datacenter необходимо «повесить» тег из категории тегов, указанный в regionTagCategory (по умолчанию k8s-region). Этот тег будет обозначать регион.

Список необходимых привилегий

О том, как создать и назначить роль пользователю, читайте в документации.

Детальный список привилегий, необходимых для работы Deckhouse Kubernetes Platform в vSphere:

Список привилегий Назначение
Cns.Searchable
StorageProfile.View
Datastore.AllocateSpace
Datastore.Browse
Datastore.FileManagement
Выделение дисков при создании виртуальных машин и заказе PersistentVolumes в кластере.
Global.GlobalTag
Global.SystemTag
InventoryService.Tagging.AttachTag
InventoryService.Tagging.CreateCategory
InventoryService.Tagging.CreateTag
InventoryService.Tagging.DeleteCategory
InventoryService.Tagging.DeleteTag
InventoryService.Tagging.EditCategory
InventoryService.Tagging.EditTag
InventoryService.Tagging.ModifyUsedByForCategory
InventoryService.Tagging.ModifyUsedByForTag
InventoryService.Tagging.ObjectAttachable
Deckhouse Kubernetes Platform использует теги для определения доступных ему объектов Datacenter, Cluster и Datastore, а также для определения виртуальных машин, находящихся под его управлением.
Folder.Create
Folder.Delete
Folder.Move
Folder.Rename
Группировка кластера Deckhouse Kubernetes Platform в одном Folder в vSphere Inventory.
Network.Assign
Resource.ApplyRecommendation
Resource.AssignVAppToPool
Resource.AssignVMToPool
Resource.ColdMigrate
Resource.CreatePool
Resource.DeletePool
Resource.EditPool
Resource.HotMigrate
Resource.MovePool
Resource.QueryVMotion
Resource.RenamePool
VirtualMachine.Config.AddExistingDisk
VirtualMachine.Config.AddNewDisk
VirtualMachine.Config.AddRemoveDevice
VirtualMachine.Config.AdvancedConfig
VirtualMachine.Config.Annotation
VirtualMachine.Config.ChangeTracking
VirtualMachine.Config.CPUCount
VirtualMachine.Config.DiskExtend
VirtualMachine.Config.DiskLease
VirtualMachine.Config.EditDevice
VirtualMachine.Config.HostUSBDevice
VirtualMachine.Config.ManagedBy
VirtualMachine.Config.Memory
VirtualMachine.Config.MksControl
VirtualMachine.Config.QueryFTCompatibility
VirtualMachine.Config.QueryUnownedFiles
VirtualMachine.Config.RawDevice
VirtualMachine.Config.ReloadFromPath
VirtualMachine.Config.RemoveDisk
VirtualMachine.Config.Rename
VirtualMachine.Config.ResetGuestInfo
VirtualMachine.Config.Resource
VirtualMachine.Config.Settings
VirtualMachine.Config.SwapPlacement
VirtualMachine.Config.ToggleForkParent
VirtualMachine.Config.UpgradeVirtualHardware
VirtualMachine.GuestOperations.Execute
VirtualMachine.GuestOperations.Modify
VirtualMachine.GuestOperations.ModifyAliases
VirtualMachine.GuestOperations.Query
VirtualMachine.GuestOperations.QueryAliases
VirtualMachine.Hbr.ConfigureReplication
VirtualMachine.Hbr.MonitorReplication
VirtualMachine.Hbr.ReplicaManagement
VirtualMachine.Interact.AnswerQuestion
VirtualMachine.Interact.Backup
VirtualMachine.Interact.ConsoleInteract
VirtualMachine.Interact.CreateScreenshot
VirtualMachine.Interact.CreateSecondary
VirtualMachine.Interact.DefragmentAllDisks
VirtualMachine.Interact.DeviceConnection
VirtualMachine.Interact.DisableSecondary
VirtualMachine.Interact.DnD
VirtualMachine.Interact.EnableSecondary
VirtualMachine.Interact.GuestControl
VirtualMachine.Interact.MakePrimary
VirtualMachine.Interact.Pause
VirtualMachine.Interact.PowerOff
VirtualMachine.Interact.PowerOn
VirtualMachine.Interact.PutUsbScanCodes
VirtualMachine.Interact.Record
VirtualMachine.Interact.Replay
VirtualMachine.Interact.Reset
VirtualMachine.Interact.SESparseMaintenance
VirtualMachine.Interact.SetCDMedia
VirtualMachine.Interact.SetFloppyMedia
VirtualMachine.Interact.Suspend
VirtualMachine.Interact.SuspendToMemory
VirtualMachine.Interact.TerminateFaultTolerantVM
VirtualMachine.Interact.ToolsInstall
VirtualMachine.Interact.TurnOffFaultTolerance
VirtualMachine.Inventory.Create
VirtualMachine.Inventory.CreateFromExisting
VirtualMachine.Inventory.Delete
VirtualMachine.Inventory.Move
VirtualMachine.Inventory.Register
VirtualMachine.Inventory.Unregister
VirtualMachine.Namespace.Event
VirtualMachine.Namespace.EventNotify
VirtualMachine.Namespace.Management
VirtualMachine.Namespace.ModifyContent
VirtualMachine.Namespace.Query
VirtualMachine.Namespace.ReadContent
VirtualMachine.Provisioning.Clone
VirtualMachine.Provisioning.CloneTemplate
VirtualMachine.Provisioning.CreateTemplateFromVM
VirtualMachine.Provisioning.Customize
VirtualMachine.Provisioning.DeployTemplate
VirtualMachine.Provisioning.DiskRandomAccess
VirtualMachine.Provisioning.DiskRandomRead
VirtualMachine.Provisioning.FileRandomAccess
VirtualMachine.Provisioning.GetVmFiles
VirtualMachine.Provisioning.MarkAsTemplate
VirtualMachine.Provisioning.MarkAsVM
VirtualMachine.Provisioning.ModifyCustSpecs
VirtualMachine.Provisioning.PromoteDisks
VirtualMachine.Provisioning.PutVmFiles
VirtualMachine.Provisioning.ReadCustSpecs
VirtualMachine.State.CreateSnapshot
VirtualMachine.State.RemoveSnapshot
VirtualMachine.State.RenameSnapshot
VirtualMachine.State.RevertToSnapshot
Управление жизненным циклом виртуальных машин кластера Deckhouse Kubernetes Platform.

Чтобы настроить модуль, используйте custom resource ModuleConfig с именем cloud-provider-vsphere (подробнее о настройке Deckhouse…).

Пример ресурса ModuleConfig/cloud-provider-vsphere для настройки модуля:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cloud-provider-vsphere
spec:
  version: 1
  enabled: true
  settings: # <-- Параметры модуля из раздела "Параметры" ниже.

Параметры

Версия схемы: 1

  • settings
    объект
    • settings.disableTimesync
      булевый

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

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

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

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

    • settings.host
      строка

      Доменное имя сервера vCenter.

    • settings.insecure
      булевый

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

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

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

    • settings.nsxt
      объект

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

      • settings.nsxt.defaultIpPoolName
        строка

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

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

        Пример:

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

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

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

        Примеры:

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

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

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

        Примеры:

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

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

        Адрес NSX-T.

        Пример:

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

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

        Примеры:

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

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

        Примеры:

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

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

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

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

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

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

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

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

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

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

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

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

      • settings.nsxt.password
        строка

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

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

        Пример:

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

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

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

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

        Пример:

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

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

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

        Пример:

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

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

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

        Пример:

        user: user
        
    • settings.password
      строка

      Пароль.

    • settings.region
      строка

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

    • settings.regionTagCategory
      строка

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

    • settings.sshKeys
      массив строк

      Список публичных SSH-ключей в формате plain-text.

    • settings.storageClass
      объект
      • settings.storageClass.compatibilityFlag
        строка

        Флаг, разрешающий использование старой версии CSI:

        • legacy — используется старая версия драйвера — только диски FCD, без онлайн-изменения размера;
        • migration — в этом случае оба драйвера будут доступны в кластере одновременно. Этот режим используется для миграции со старого драйвера.

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

      • settings.storageClass.default
        Параметр устарел
        строка

        Имя StorageClass’а, который будет использоваться по умолчанию в кластере.

        Если значение не указано, фактический StorageClass по умолчанию будет определен следующим образом:

        • произвольный StorageClass в кластере, имеющий default-аннотацию;
        • первый (по алфавиту) StorageClass из тех, что создаются модулем.

        Параметр устарел. Вместо этого параметра используйте глобальный параметр global.defaultClusterStorageClass.

        Пример:

        default: fast-lun102-7d0bf578
        
      • settings.storageClass.exclude
        массив строк

        Полные имена (или regex выражения имен) StorageClass’ов, которые не будут созданы в кластере.

        Пример:

        exclude:
        - ".*-lun101-.*"
        - slow-lun103-1c280603
        
    • settings.username
      строка

      Login ID.

    • settings.vmFolderPath
      строка

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

    • settings.zoneTagCategory
      строка

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

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

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