Список необходимых ресурсов vSphere
- User с необходимым набором прав.
- Network с DHCP и доступом в интернет.
- Datacenter с соответствующим тегом
k8s-region
. - Cluster с соответствующим тегом
k8s-zone
. - Datastore в любом количестве с соответствующими тегами.
- Template — подготовленный образ виртуальной машины.
Конфигурация vSphere
Установка govc
Для дальнейшей конфигурации vSphere вам понадобится vSphere CLI — govc.
После установки задайте переменные окружения для работы с vCenter:
export GOVC_URL=example.com
export GOVC_USERNAME=<username>@vsphere.local
export GOVC_PASSWORD=<password>
export GOVC_INSECURE=1
Создание тегов и категорий тегов
В 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
Для динамического заказа 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>
Создание и назначение роли
Ввиду разнообразия подключаемых к vSphere SSO-провайдеров шаги по созданию пользователя в данной статье не рассматриваются.
Роль, которую предлагается создать далее, включает в себя все возможные права для всех компонентов Deckhouse. Для получения детального списка привилегий, обратитесь к документации. При необходимости получения более гранулярных прав обратитесь в техподдержку Deckhouse.
Создайте роль с необходимыми правами:
govc role.create deckhouse \
Cns.Searchable Datastore.AllocateSpace Datastore.Browse Datastore.FileManagement \
Global.GlobalTag Global.SystemTag Network.Assign StorageProfile.View \
$(govc role.ls Admin | grep -F -e 'Folder.' -e 'InventoryService.' -e 'Resource.' -e 'VirtualMachine.')
Назначьте пользователю роль на объекте vCenter
:
govc permissions.set -principal <username>@vsphere.local -role deckhouse /
Подготовка образа виртуальной машины
Для создания шаблона виртуальной машины (Template
) рекомендуется использовать готовый cloud-образ/OVA-файл, предоставляемый вендором ОС:
- Ubuntu
- Debian
- CentOS
- Rocky Linux (секция Generic Cloud / OpenStack)
Если вы планируете использовать дистрибутив отечественной ОС, обратитесь к вендору ОС для получения образа/OVA-файла.
Требования к образу виртуальной машины
Deckhouse использует cloud-init
для настройки виртуальной машины после запуска. Для этого в образе должны быть установлены следующие пакеты:
open-vm-tools
cloud-init
cloud-init-vmware-guestinfo
(если используется версияcloud-init
ниже 21.3)
Также после запуска виртуальной машины должны быть запущены следующие службы, связанные с этими пакетами:
cloud-config.service
cloud-final.service
cloud-init.service
Для добавления SSH-ключа, в файле /etc/cloud/cloud.cfg
должен быть указан параметр default_user
.
Deckhouse создаёт диски виртуальных машин с типом eagerZeroedThick
, но тип дисков созданных ВМ будет изменён без уведомления, согласно настроенным в vSphere VM Storage Policy
.
Подробнее можно прочитать в документации.
Deckhouse использует интерфейс ens192
, как интерфейс по умолчанию для виртуальных машин в vSphere. Поэтому, при использовании статических IP-адресов в mainNetwork
, вы должны в образе ОС создать интерфейс с именем ens192
, как интерфейс по умолчанию.
Инфраструктура
Сети
Для работы кластера необходим VLAN с DHCP и доступом в интернет:
- Если VLAN публичный (публичные адреса), нужна вторая сеть, в которой необходимо развернуть сеть узлов кластера (в этой сети DHCP не нужен).
- Если VLAN внутренний (приватные адреса), эта же сеть будет сетью узлов кластера.
Входящий трафик
- Если у вас имеется внутренний балансировщик запросов, можно обойтись им и направлять трафик напрямую на frontend-узлы кластера.
- Если балансировщика нет, для организации отказоустойчивых LoadBalancer’ов рекомендуется использовать MetalLB в режиме BGP. В кластере будут созданы frontend-узлы с двумя интерфейсами. Для этого дополнительно потребуются:
- отдельный VLAN для обмена трафиком между BGP-роутерами и MetalLB. В этом VLAN’e должны быть DHCP и доступ в интернет;
- IP-адреса BGP-роутеров;
- ASN (номер автономной системы) на BGP-роутере;
- ASN (номер автономной системы) в кластере;
- диапазон, из которого анонсировать адреса.
Использование хранилища данных
В кластере может одновременно использоваться различное количество типов хранилищ. В минимальной конфигурации потребуются:
Datastore
, в котором Kubernetes-кластер будет заказыватьPersistentVolume
;Datastore
, в котором будут заказываться root-диски для виртуальной машины (это может быть тот жеDatastore
, что и дляPersistentVolume
).