Модуль автоматически включается для всех облачных кластеров, развёрнутых в 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
, в котором указываются конкретные параметры самих машин.
Чтобы настроить модуль используйте 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
- disableTimesyncбулевый
Отключение синхронизации времени со стороны vSphere.
Внимание! Отключение этого параметра не отключает NTP-демоны в гостевой ОС, а лишь отключает корректировки времени со стороны ESXi.
- externalNetworkNamesмассив строк
Имена сетей (не полный путь, а просто имя), подключённые к VirtualMachines и используемые vsphere-cloud-controller-manager для проставления ExternalIP в
.status.addresses
в Node API объект. - hostстрока
Доменное имя сервера vCenter.
- insecureбулевый
Установите
true
, если vCenter использует самоподписанный сертификат. - internalNetworkNamesмассив строк
Имена сетей (не полный путь, а просто имя), подключённые к VirtualMachines, и используемые vsphere-cloud-controller-manager для проставления InternalIP в
.status.addresses
в Node API объект. - nsxtобъект
Поддержка cloud controller manager’ом Load Balancer’ов в 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массив
Дополнительная секция, определяющая Load Balancer Classes (чтобы использовать Class, установите аннотацию
loadbalancer.vmware.io/class: <class name>
на SVC).Примеры:
loadBalancerClass: []
loadBalancerClass: name: LBC1 ipPoolName: pool2
loadBalancerClass: name: LBC1 ipPoolName: pool2 tcpAppProfileName: profile2 udpAppProfileName: profile3
- nsxt.loadBalancerClass.ipPoolNameстрока
Обязательный параметр
Имя пула IP-адресов.
- nsxt.loadBalancerClass.nameстрока
Обязательный параметр
Имя Load Balancer Class для установки аннотации
loadbalancer.vmware.io/class: <class name>
в SVC. - nsxt.loadBalancerClass.tcpAppProfileNameстрока
Имя профиля по умолчанию, используемого для TCP соединений.
По умолчанию:
"defaultTcpAppProfileName"
- nsxt.loadBalancerClass.udpAppProfileNameстрока
Имя профиля по умолчанию, используемого для UDP соединений.
По умолчанию:
"defaultUdpAppProfileName"
- nsxt.loadBalancerClass.ipPoolNameстрока
- 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
- nsxt.defaultIpPoolNameстрока
- passwordстрока
Пароль.
- regionстрока
Тег, прикреплённый к vSphere Datacenter, в котором будут происходить все операции: заказ VirtualMachines, размещение их дисков на datastore, подключение к network.
- regionTagCategoryстрока
Имя категории тегов, использующихся для идентификации региона (vSphere Datacenter).
- sshKeysмассив строк
Список публичных SSH-ключей в plain-text формате.
- storageClassобъект
- storageClass.compatibilityFlagстрока
Флаг, разрешающий использование старой версии CSI:
legacy
— используется старая версия драйвера — только диски FCD, без онлайн изменения размера;migration
— в этом случае оба драйвера будут доступны в кластере одновременно. Этот режим используется для миграции со старого драйвера.
Допустимые значения:
legacy
,migration
- storageClass.defaultстрока
Имя StorageClass’а, который будет использоваться в кластере по умолчанию.
Если параметр не задан, фактическим StorageClass’ом по умолчанию будет один из следующих:
- Присутствующий в кластере произвольный StorageClass с default аннотацией.
- Лексикографически первый StorageClass из создаваемых модулем.
Пример:
default: fast-lun102-7d0bf578
- storageClass.excludeмассив строк
Полные имена (или regex выражения имён) StorageClass’ов, которые не будут созданы в кластере.
Пример:
exclude: - ".*-lun101-.*" - slow-lun103-1c280603
- storageClass.compatibilityFlagстрока
- usernameстрока
Login ID.
- vmFolderPathстрока
Путь до VirtualMachine Folder, в котором будут создаваться склонированные виртуальные машины.
- zoneTagCategoryстрока
Имя категории тегов, использующихся для идентификации зоны (vSphere Cluster).
- zonesмассив строк
Глобальное ограничение набора зон, с которыми работает данный cloud-провайдер.
Storage
Модуль автоматически создаёт StorageClass для каждого Datastore и DatastoreCluster из зон (зоны).
Также он позволяет настроить имя StorageClass’а, который будет использоваться в кластере по умолчанию (параметр default) и отфильтровать ненужные StorageClass’ы (параметр exclude).
CSI
Подсистема хранения по умолчанию использует CNS-диски с возможностью изменения их размера на лету. Но также поддерживается работа и в legacy-режиме с использованием FCD-дисков. Поведение настраивается параметром compatibilityFlag.
Важная информация об увеличении размера PVC
Из-за особенностей работы volume-resizer, CSI и vSphere API после увеличения размера PVC нужно:
- На узле, где находится Pod, выполнить команду
kubectl cordon <имя_узла>
. - Удалить Pod.
- Убедиться, что изменение размера прошло успешно. В объекте PVC не будет condition
Resizing
.Состояние
FileSystemResizePending
не является проблемой. - На узле, где находится Pod, выполнить команду
kubectl uncordon <имя_узла>
.
Требования к окружениям
- Требования к версии vSphere:
v7.0U2
(необходимо для работы механизмаOnline volume expansion
). - vCenter, до которого есть доступ изнутри кластера с master-узлов.
- Создать Datacenter, в котором создать:
- VirtualMachine template со специальным cloud-init datasource внутри.
- Образ ВМ должен использовать
Virtual machines with hardware version 15 or later
(необходимо для работы online resize).
- Образ ВМ должен использовать
- Network, доступную на всех ESXi, на которых будут создаваться VirtualMachines.
- Datastore (или несколько), подключённый ко всем ESXi, на которых будут создаваться VirtualMachines.
- На Datastore’ы необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию,
k8s-zone
). Этот тег будет обозначать зону. Все Cluster’ы из конкретной зоны должны иметь доступ ко всем Datastore’ам с идентичной зоной.
- На Datastore’ы необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию,
- Cluster, в который добавить необходимые используемые ESXi.
- На Cluster необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию,
k8s-zone
). Этот тег будет обозначать зону.
- На Cluster необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию,
- Folder для создаваемых VirtualMachines.
- Опциональный. По умолчанию будет использоваться root vm каталог.
- Роль с необходимым набором прав.
- Пользователя, привязав к нему роль из п.6.
- VirtualMachine template со специальным cloud-init datasource внутри.
- На созданный Datacenter необходимо повесить тег из категории тегов, указанный в regionTagCategory (по умолчанию,
k8s-region
). Этот тег будет обозначать регион.
Список привилегий для использования модуля
Datastore.AllocateSpace
Datastore.FileManagement
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
Network.Assign
Resource.AssignVMToPool
StorageProfile.View
System.Anonymous
System.Read
System.View
VirtualMachine.Config.AddExistingDisk
VirtualMachine.Config.AddNewDisk
VirtualMachine.Config.AddRemoveDevice
VirtualMachine.Config.AdvancedConfig
VirtualMachine.Config.Annotation
VirtualMachine.Config.CPUCount
VirtualMachine.Config.ChangeTracking
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.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