Далее описан процесс добавления узлов из VMware Cloud Director (VCD) в существующий статический кластер Deckhouse Kubernetes Platform (DKP).
Для интеграции с VCD используется модуль cloud-provider-vcd. Он обеспечивает взаимодействие DKP с VMware Cloud Director, создание и удаление виртуальных машин, получение информации об инфраструктуре VCD, а также интеграцию со StorageClass и другими возможностями провайдера.
В разделе описаны два способа добавления узлов:
- Автоматическое создание узлов в VCD. DKP создаёт виртуальные машины через API VCD. Параметры ВМ задаются ресурсом VCDInstanceClass, а требуемое количество узлов — ресурсом NodeGroup с типом
CloudEphemeral. - Подключение вручную созданных узлов через bootstrap-скрипт. Виртуальная машина создаётся пользователем заранее и подключается к кластеру с помощью bootstrap-скрипта DKP. Для такого сценария используется NodeGroup с типом
CloudStatic.
Предварительные требования для VCD
Перед началом убедитесь, что выполнены следующие условия:
- Кластер создан с параметром
clusterType: Static. - Между сетью статических узлов и сетью виртуальных машин в VCD настроена сетевая связность. Узлы VCD, добавляемые в кластер, имеют доступ к Kubernetes API, DNS и необходимым адресам согласно разделам «Сетевое взаимодействие» и «Настройка сетевых политик». При использовании Cilium с туннелированием трафика подов выбран режим
tunnelMode, соответствующий сетевой связности между площадками. - Выполнены требования из раздела «Подключение и авторизация в VMware vCloud Director»:
- настроен тенант в VCD с выделенными ресурсами;
- подготовлена учётная запись VCD со статичным паролем и правами администратора;
- настроена рабочая сеть в VCD с включённым DHCP-сервером;
- подготовлены необходимые ресурсы VCD: VDC, vApp, шаблоны, политики и другие параметры.
Добавление автоматически создаваемых узлов
-
Создайте файл с ресурсом ModuleConfig. Например,
cloud-provider-vcd-mc.yaml:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: cloud-provider-vcd spec: version: 1 enabled: true settings: mainNetwork: <NETWORK_NAME> organization: <ORGANIZATION> virtualDataCenter: <VDC_NAME> virtualApplicationName: <VAPP_NAME> sshPublicKey: <SSH_PUBLIC_KEY> provider: server: <API_URL> username: <USER_NAME> password: <PASSWORD> insecure: falseГде:
mainNetwork— имя сети, в которой будут размещаться облачные узлы в VCD;organization— имя Organization в VCD;virtualDataCenter— имя Virtual Data Center в VCD;virtualApplicationName— имя vApp, где будут создаваться узлы, напримерdkp-vcd-app;sshPublicKey— публичный SSH-ключ для доступа к узлам;provider.server— URL-адрес API VCD;provider.username— имя пользователя VCD;provider.password— пароль пользователя VCD;provider.insecure— установите значениеtrue, если VCD использует самоподписанный TLS-сертификат.
Если для аутентификации используется токен, вместо
usernameиpasswordукажитеapiToken:provider: server: <API_URL> apiToken: <API_TOKEN> insecure: false -
Примените ModuleConfig:
d8 k apply -f cloud-provider-vcd-mc.yaml d8 k get mc cloud-provider-vcd -
Убедитесь, что все поды в неймспейсе
d8-cloud-provider-vcdнаходятся в состоянииRunning:d8 k get pods -n d8-cloud-provider-vcd -
Убедитесь, что в кластере созданы StorageClass для VCD:
d8 k get sc -
Создайте файл с ресурсами VCDInstanceClass и NodeGroup. Например,
vcd-instanceclass-nodegroup.yaml:--- apiVersion: deckhouse.io/v1 kind: VCDInstanceClass metadata: name: worker spec: rootDiskSizeGb: 50 sizingPolicy: <SIZING_POLICY> storageProfile: <STORAGE_PROFILE> template: <VAPP_TEMPLATE> --- apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: worker spec: nodeType: CloudEphemeral cloudInstances: classReference: kind: VCDInstanceClass name: worker maxPerZone: 2 minPerZone: 1 nodeTemplate: labels: node-role/worker: "" -
Примените манифест:
d8 k apply -f vcd-instanceclass-nodegroup.yamlПосле применения манифеста DKP начнёт создавать виртуальные машины в VCD, управляемые модулем
node-manager. -
Убедитесь, что в кластере появилось требуемое количество узлов:
d8 k get nodes -o wide -
При сбоях создания ВМ проверьте объекты Machine, MachineSet и логи machine-controller-manager:
d8 k -n d8-cloud-instance-manager get machinesets,machines -o wide d8 k -n d8-cloud-instance-manager logs deploy/machine-controller-manager --tail=200
Добавление вручную созданных узлов через bootstrap-скрипт
Перед началом убедитесь, что выполнены следующие условия:
-
Модуль
cloud-provider-vcdвключён:d8 k get module cloud-provider-vcd -o wide -
Компоненты модуля
cloud-provider-vcdнаходятся в состоянииRunning:d8 k -n d8-cloud-provider-vcd get pods -o wide -
В кластере созданы StorageClass для VCD:
d8 k get sc - В VCD создана виртуальная машина, которая будет подключена к кластеру.
- Имя виртуальной машины в VCD совпадает с именем хоста (hostname) внутри операционной системы.
-
В дополнительных параметрах ВМ в VCD задано значение:
disk.EnableUUID = TRUE - Виртуальная машина подключена к сети VCD, используемой как основная сеть для облачных узлов кластера. Обычно это сеть, указанная в параметре
mainNetworkконфигурацииcloud-provider-vcdили в используемом VCDInstanceClass. - На виртуальной машине установлен один из пакетных менеджеров (
apt/apt-get,yumилиrpm) для поддерживаемой ОС. В РЕД ОС по умолчанию могут отсутствоватьyumиwhich, поэтому их необходимо заранее установить.
-
Создайте файл с ресурсом NodeGroup и типом узлов CloudStatic. Например,
cloud-static-nodegroup.yaml:d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: cloud-static spec: nodeType: CloudStatic -
Убедитесь, что NodeGroup создана и синхронизирована:
d8 k get nodegroup cloud-staticПример ожидаемого результата:
NAME TYPE READY NODES UPTODATE INSTANCES DESIRED MIN MAX STANDBY STATUS AGE SYNCED cloud-static CloudStatic 0 0 0 1m True -
Получите bootstrap-скрипт для созданной NodeGroup:
NODE_GROUP=cloud-static d8 k -n d8-cloud-instance-manager get secret manual-bootstrap-for-${NODE_GROUP} \ -o jsonpath='{.data.bootstrap\.sh}' > bootstrap.b64 -
Скопируйте bootstrap-скрипт на подключаемую виртуальную машину:
scp bootstrap.b64 <USER>@<NODE_IP>:/tmp/bootstrap.b64 -
Подключитесь к виртуальной машине по SSH:
ssh <USER>@<NODE_IP> -
На виртуальной машине назначьте права и запустите bootstrap-скрипт:
base64 -d /tmp/bootstrap.b64 > /tmp/bootstrap.sh chmod +x /tmp/bootstrap.sh sudo bash /tmp/bootstrap.shПосле запуска bootstrap-скрипт установит необходимые компоненты, настроит container runtime, kubelet и подключит узел к кластеру.
-
На master-узле проверьте появление нового узла:
d8 k get nodes -o wideПример ожидаемого результата:
NAME STATUS ROLES AGE VERSION INTERNAL-IP static-master-0 Ready master 1h v1.33.10 192.168.240.138 cloud-static-worker-0 Ready cloud-static 5m v1.33.10 192.168.240.151