Модуль автоматически включается для всех облачных кластеров, развернутых в 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 нужно сделать следующее:
- На узле, где находится под, выполнить команду
kubectl cordon <имя_узла>
. - Удалить под.
- Убедиться, что изменение размера прошло успешно. В объекте PVC не будет condition
Resizing
.Состояние
FileSystemResizePending
не является проблемой. - На узле, где находится под, выполнить команду
kubectl uncordon <имя_узла>
.
Требования к окружению
- Требования к версии vSphere:
v7.0U2
(необходимо для работы механизмаOnline volume expansion
). - vCenter, до которого есть доступ изнутри кластера с master-узлов.
- Создать Datacenter, в котором создать:
- 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).
- Образ виртуальной машины должен использовать
- Network, доступную на всех ESXi, на которых будут создаваться виртуальные машины.
- Datastore (или несколько), подключенный ко всем ESXi, на которых будут создаваться виртуальные машины.
- На Datastore’ы необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию
k8s-zone
). Этот тег будет обозначать зону. Все Cluster’ы из конкретной зоны должны иметь доступ ко всем Datastore’ам с идентичной зоной.
- На Datastore’ы необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию
- Cluster, в который добавить необходимые используемые ESXi.
- На Cluster необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию
k8s-zone
). Этот тег будет обозначать зону.
- На Cluster необходимо «повесить» тег из категории тегов, указанных в zoneTagCategory (по умолчанию
- Folder для создаваемых виртуальных машин.
- Опциональный. По умолчанию будет использоваться root vm-каталог.
- Роль с необходимым набором прав.
- Пользователя, привязав к нему роль из п. 6.
- VirtualMachine template.
- На созданный 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
- disableTimesync
Отключение синхронизации времени со стороны vSphere.
Внимание! Отключение этого параметра не отключает NTP-демоны в гостевой ОС, а лишь отключает корректировки времени со стороны ESXi.
- externalNetworkNames
Имена сетей (не полный путь, а просто имя), подключенных к виртуальным машинам и используемых
vsphere-cloud-controller-manager
для проставления ExternalIP в.status.addresses
в Node API объект. - host
Доменное имя сервера vCenter.
- insecure
Установите
true
, если vCenter использует самоподписанный сертификат. - internalNetworkNames
Имена сетей (не полный путь, а просто имя), подключенных к виртуальным машинам и используемых
vsphere-cloud-controller-manager
для проставления InternalIP в.status.addresses
в Node API объект. - 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
- password
Пароль.
- region
Тег, прикрепленный к vSphere Datacenter, в котором будут происходить все операции: заказ виртуальных машин, размещение их дисков на datastore, подключение к сети.
- 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
- username
Login ID.
- vmFolderPath
Путь до VirtualMachine Folder, в котором будут создаваться склонированные виртуальные машины.
- zoneTagCategory
Имя категории тегов, использующихся для идентификации зоны (vSphere Cluster).
- zones
Глобальное ограничение набора зон, с которыми работает данный cloud-провайдер.