Требования
Для корректной работы Deckhouse Kubernetes Platform с VMware vSphere необходимы:
- Доступ к vCenter;
- Пользователь с необходимым набором привилегий;
- Созданные теги и категории тегов в vSphere;
- Сети с DHCP и доступом в Интернет;
- Доступные shared Datastore на всех используемых ESXi;
- Версия vSphere —
7.xили8.xс поддержкой механизма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 (один или несколько):
- Datastore должен быть подключен ко всем ESXi, на которых планируется создание виртуальных машин.
- На Datastore должен быть назначен тег из категории, указанной в параметре
zoneTagCategory(по умолчанию —k8s-zone). Этот тег определяет зону. - Все Cluster в пределах одной зоны должны иметь доступ ко всем Datastore с той же зоной.
- Cluster:
- В Cluster должны быть добавлены все используемые ESXi.
- На Cluster должен быть назначен тег из категории, указанной в параметре zoneTagCategory (по умолчанию —
k8s-zone). Этот тег определяет зону.
- Folder для создаваемых виртуальных машин:
- Параметр опционален.
- По умолчанию используется корневой каталог виртуальных машин.
- Role:
- Роль должна содержать необходимый набор привилегий.
- User:
- Пользователю должна быть назначена роль, указанная в предыдущем пункте.
- VirtualMachine template:
- На созданный Datacenter должен быть назначен тег из категории, указанной в параметре
regionTagCategory(по умолчанию —k8s-region). Этот тег определяет регион.
Требования к образу виртуальной машины
Для создания шаблона виртуальной машины (Template) рекомендуется использовать готовый cloud-образ/OVA-файл, предоставляемый вендором ОС:
- Ubuntu
- Debian
- CentOS
- Rocky Linux (секция Generic Cloud / OpenStack)
Если вы планируете использовать дистрибутив отечественной ОС, обратитесь к вендору ОС для получения образа/OVA-файла.
Провайдер поддерживает работу только с одним диском в шаблоне виртуальной машины. Убедитесь, что шаблон содержит только один диск.
Подготовка образа виртуальной машины
DKP использует cloud-init для настройки виртуальной машины после запуска.
Отключите VMware Guest OS Customization (а также любые механизмы vApp/OS customization, если они применимы в вашей схеме) для шаблона и виртуальных машин кластера в vSphere. DKP выполняет первичную настройку узлов через cloud-init (datasource VMware GuestInfo). Включенная customization может конфликтовать с cloud-init и приводить к некорректной инициализации узла.
Чтобы подготовить cloud-init и образ ВМ, выполните следующие действия:
-
Установите необходимые пакеты:
Если используется версия
cloud-initниже 21.3 (требуется поддержка VMware GuestInfo):sudo apt-get update sudo apt-get install -y open-vm-tools cloud-init cloud-init-vmware-guestinfoЕсли используется версия
cloud-init21.3 и выше:sudo apt-get update sudo apt-get install -y open-vm-tools cloud-init -
Проверьте, что в файле
/etc/cloud/cloud.cfgустановлен параметрdisable_vmware_customization: false. -
Убедитесь, что в файле
/etc/cloud/cloud.cfgуказан параметрdefault_user. Он необходим для добавления SSH-ключа при запуске ВМ. -
Добавьте datasource VMware GuestInfo — создайте файл
/etc/cloud/cloud.cfg.d/99-DataSourceVMwareGuestInfo.cfg:datasource: VMware: vmware_cust_file_max_wait: 10 -
Перед созданием шаблона ВМ сбросьте идентификаторы и состояние
cloud-init, используя следующие команды:truncate -s 0 /etc/machine-id && rm /var/lib/dbus/machine-id && ln -s /etc/machine-id /var/lib/dbus/machine-id -
Очистите логи событий
cloud-init:cloud-init clean --logs --seed
После запуска виртуальной машины в ней должны быть запущены следующие службы, связанные с пакетами, установленными при подготовке cloud-init:
cloud-config.service,cloud-final.service,cloud-init.service.
Чтобы убедиться в том, что службы включены, используйте команду:
systemctl is-enabled cloud-config.service cloud-init.service cloud-final.service
Пример ответа для включенных служб:
enabled
enabled
enabled
DKP создаёт диски виртуальных машин с типом eagerZeroedThick, но тип дисков созданных ВМ будет изменён без уведомления, согласно настроенным в vSphere VM Storage Policy. Подробнее можно прочитать в документации.
DKP использует интерфейс ens192, как интерфейс по умолчанию для виртуальных машин в vSphere. Поэтому, при использовании статических IP-адресов в mainNetwork, вы должны в образе ОС создать интерфейс с именем ens192, как интерфейс по умолчанию.
Конфигурация vSphere
Настройка через vSphere Client
Создание тегов и категорий тегов с использованием vSphere Client
В VMware vSphere нет понятий «регион» и «зона». «Регионом» в vSphere является Datacenter, а «зоной» — Cluster. Для создания этой связи используются теги.
-
Откройте vSphere Client и перейдите в «Menu» → «Tags & Custom Attributes» → «Tags».

-
Откройте вкладку «Categories» и нажмите «NEW». Создайте категорию для регионов (например
k8s-region): установите значение «One tag» для параметра «Tags Per Object» и задайте связываемые типы, включая Datacenter.
-
Создайте вторую категорию для зон (например,
k8s-zone) с типами объектов Host, Cluster и Datastore.
-
Перейдите на вкладку «Tags» и создайте минимум по одному тегу в категории региона и в категории зон (например,
test-region,test-zone-1).
-
Во вкладке «Inventory» выберите целевой Datacenter, перейдите в панель «Summary», откройте «Actions» → «Tags & Custom Attributes» → «Assign Tag» и назначьте тег региона. Повторите для каждого Cluster, на котором будут узлы, назначая соответствующие теги зон.

Настройка Datastore с использованием vSphere Client
Для динамического заказа PersistentVolume необходимо, чтобы Datastore был доступен на каждом хосте ESXi в зоне (shared datastore).
Во вкладке «Inventory» выберите Datastore, перейдите в панель «Summary», затем откройте меню «Actions» → «Tags & Custom Attributes» → «Assign Tag». Назначьте Datastore тот же тег региона, что и у соответствующего Datacenter, а также тот же тег зоны, что и у соответствующего Cluster.

Создание и назначение роли с использованием vSphere Client
-
Перейдите в «Menu» → «Administration» → «Access Control» → «Roles».

-
Нажмите «NEW», введите имя роли (например,
deckhouse) и добавьте привилегии из списка.
-
Назначьте роль для учётной записи Deckhouse, во вкладке «Menu» → «Administration» → «Access Control» → «Global Permissions» нажмите «ADD» и выберите пользователя и роль
deckhouse.
Настройка через govc
Установка govc
Для дальнейшей настройки vSphere потребуется CLI-утилита govc.
После установки задайте переменные окружения для работы с vCenter.
Обязательно указывайте имя пользователя вместе с доменом, например: username@vsphere.local.
export GOVC_URL=example.com
export GOVC_USERNAME=<username>@vsphere.local
export GOVC_PASSWORD=<password>
export GOVC_INSECURE=1
Создание тегов и категорий тегов с использованием govc
В VMware vSphere нет понятий «регион» и «зона». «Регионом» в vSphere является Datacenter, а «зоной» — Cluster. Для создания этой связи используются теги.
Создайте категории тегов с помощью команд:
govc tags.category.create -d "Kubernetes Region" k8s-region
govc tags.category.create -d "Kubernetes Zone" k8s-zone
Создайте теги в каждой категории. Если вы планируете использовать несколько «зон» (Cluster), создайте тег для каждой из них:
govc tags.create -d "Kubernetes Region" -c k8s-region test-region
govc tags.create -d "Kubernetes Zone Test 1" -c k8s-zone test-zone-1
govc tags.create -d "Kubernetes Zone Test 2" -c k8s-zone test-zone-2
Назначьте тег «региона» на Datacenter:
govc tags.attach -c k8s-region test-region /<DatacenterName>
Назначьте теги «зон» на объекты Cluster:
govc tags.attach -c k8s-zone test-zone-1 /<DatacenterName>/host/<ClusterName1>
govc tags.attach -c k8s-zone test-zone-2 /<DatacenterName>/host/<ClusterName2>
Настройка Datastore с использованием govc
Для динамического заказа PersistentVolume необходимо, чтобы Datastore был доступен на каждом хосте ESXi (shared datastore).
Для автоматического создания StorageClass в кластере Kubernetes назначьте созданные ранее теги «региона» и «зоны» на объекты Datastore:
govc tags.attach -c k8s-region test-region /<DatacenterName>/datastore/<DatastoreName1>
govc tags.attach -c k8s-zone test-zone-1 /<DatacenterName>/datastore/<DatastoreName1>
govc tags.attach -c k8s-region test-region /<DatacenterName>/datastore/<DatastoreName2>
govc tags.attach -c k8s-zone test-zone-2 /<DatacenterName>/datastore/<DatastoreName2>
Создание и назначение роли с использованием govc
Ввиду разнообразия подключаемых к vSphere SSO-провайдеров шаги по созданию пользователя в данной статье не рассматриваются.
Роль, которую предлагается создать далее, включает в себя привилегии из раздела «Список необходимых привилегий». При необходимости более гранулярных прав обратитесь в техподдержку Deckhouse.
Создайте роль с необходимыми привилегиями:
govc role.create deckhouse \
Cns.Searchable \
Datastore.AllocateSpace Datastore.Browse Datastore.FileManagement \
Folder.Create Folder.Delete Folder.Move Folder.Rename \
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 \
Network.Assign \
Resource.AssignVMToPool Resource.CreatePool Resource.DeletePool Resource.EditPool Resource.RenamePool \
StorageProfile.View \
System.Anonymous System.Read System.View \
VApp.ApplicationConfig VApp.AssignResourcePool VApp.AssignVM VApp.Create VApp.Delete \
VApp.ExtractOvfEnvironment VApp.Import VApp.InstanceConfig VApp.PowerOff VApp.PowerOn VApp.ResourceConfig \
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.ManagedBy VirtualMachine.Config.Memory \
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.UpgradeVirtualHardware \
VirtualMachine.GuestOperations.Query \
VirtualMachine.Interact.AnswerQuestion VirtualMachine.Interact.DeviceConnection \
VirtualMachine.Interact.GuestControl VirtualMachine.Interact.PowerOff VirtualMachine.Interact.PowerOn \
VirtualMachine.Interact.Reset VirtualMachine.Interact.SetCDMedia VirtualMachine.Interact.ToolsInstall \
VirtualMachine.Inventory.Create VirtualMachine.Inventory.CreateFromExisting VirtualMachine.Inventory.Delete \
VirtualMachine.Inventory.Move \
VirtualMachine.Provisioning.Clone VirtualMachine.Provisioning.Customize VirtualMachine.Provisioning.DeployTemplate \
VirtualMachine.Provisioning.GetVmFiles VirtualMachine.Provisioning.PutVmFiles VirtualMachine.Provisioning.ReadCustSpecs \
VirtualMachine.State.CreateSnapshot VirtualMachine.State.RemoveSnapshot VirtualMachine.State.RenameSnapshot
Назначьте пользователю роль на объекте vCenter.
Обязательно указывайте имя пользователя вместе с доменом, например: username@vsphere.local.
govc permissions.set -principal <username>@vsphere.local -role deckhouse /
Для более детальной настройки прав обратитесь к официальной документации.