Требования
Для корректной работы 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 (один или несколько).
- Подключен ко всем ESXi, на которых будут создаваться виртуальные машины.
- Необходимо назначение тега из категории тегов, указанных в zoneTagCategory (по умолчанию
k8s-zone). Этот тег будет обозначать зону. Все Cluster’ы из конкретной зоны должны иметь доступ ко всем Datastore’ам с идентичной зоной.
- Cluster.
- Добавлены используемые ESXi.
- Необходимо назначение тега из категории тегов, указанных в zoneTagCategory (по умолчанию
k8s-zone). Этот тег будет обозначать зону.
- Folder для создаваемых виртуальных машин.
- Опциональный (по умолчанию используется root vm-каталог).
- Роль.
- Должна содержать необходимый набор прав.
- Пользователь.
- Привязывается роль из п. 6.
- VirtualMachine template.
- На созданный Datacenter необходимо назначить тег из категории тегов, указанный в regionTagCategory (по умолчанию
k8s-region). Этот тег будет обозначать регион.
Требования к образу виртуальной машины
Для создания шаблона виртуальной машины (Template) рекомендуется использовать готовый cloud-образ/OVA-файл, предоставляемый вендором ОС:
- Ubuntu
- Debian
- CentOS
- Rocky Linux (секция Generic Cloud / OpenStack)
Если вы планируете использовать дистрибутив отечественной ОС, обратитесь к вендору ОС для получения образа/OVA-файла.
Провайдер поддерживает работу только с одним диском в шаблоне виртуальной машины. Убедитесь, что шаблон содержит только один диск.
Подготовка образа виртуальной машины
DKP использует 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, как интерфейс по умолчанию.
Установка govc
Для настройки окружения используется CLI-инструмент govc. После установки задайте переменные окружения:
export GOVC_URL=example.com
export GOVC_USERNAME=<username>@vsphere.local
export GOVC_PASSWORD=<password>
export GOVC_INSECURE=1
Настройка тегов и категорий
В vSphere нет встроенных понятий региона и зоны — вместо этого используются теги.
Создайте категории тегов:
govc tags.category.create -d "Kubernetes Region" k8s-region
govc tags.category.create -d "Kubernetes Zone" k8s-zone
Создайте теги:
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
Назначьте теги:
govc tags.attach -c k8s-region test-region /<DatacenterName>
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
Для корректной работы PersistentVolume необходимо, чтобы datastore был доступен на всех ESXi.
Назначьте теги:
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 role.create deckhouse \
Cns.Searchable Datastore.AllocateSpace Datastore.Browse Datastore.FileManagement \
Global.GlobalTag Global.SystemTag Network.Assign StorageProfile.View \
VcIdentityProviders.Read \
Infraprofile.Read\
$(govc role.ls Admin | grep -F -e 'Folder.' -e 'InventoryService.' -e 'Resource.' -e 'VirtualMachine.' -e 'Host.Cim.' -e 'Host.Config.' -e 'Profile.' -e 'VApp.')
Назначьте роль пользователю:
govc permissions.set -principal <username>@vsphere.local -role deckhouse /
Для более детальной настройки прав обратитесь к официальной документации.