Установка в среде виртуализации VMware vSphere

Сценарий установки позволяет в автоматизированном режиме развернуть виртуальные машины (узлы) из подготовленных шаблонов в среде виртуализации VMware vSphere и выполнить установку Nova Container Platform.

Информация

Автоматизированная установка Nova Container Platform поддерживается только в рамках одной инфраструктуры (сервера) VMware vCenter. Для установки платформы на ВМ в разных vCenter воспользуйтесь универсальным методом установки.

1. Предварительные условия

В предоставленной инструкции в качестве примера используется доменное имя (FQDN) сервера управления VMware vCenter - vcenter.nova.internal. Данное имя необходимо заменить на действительное доменное имя вашего сервера vCenter.

2. Получение корневого сертификата vCenter

Процедура

  1. Скачайте корневые сертификаты vCenter с главной страницы его веб-интерфейса как показано на рисунке ниже.

    Получение корневых сертификатов сервера VMware vCenter
    Рисунок 1. Получение корневых сертификатов сервера VMware vCenter
  2. Распакуйте полученный архив:

    unzip vcenter_certificates.zip
    
    Archive:  vcenter_certificates.zip
      inflating: certs/lin/dbad4059.0
      inflating: certs/mac/dbad4059.0
      inflating: certs/win/dbad4059.0.crt
      inflating: certs/lin/8048c56c.r2
  3. В директории certs/lin получите корневой СА-сертификат vCenter.

    certs/lin
    ├── 5db219db.0
    ├── 5db219db.r1
    ├── 8048c56c.0
    ├── 8048c56c.1
    ├── 8048c56c.r0
    ├── 8048c56c.r2
    ├── dbad4059.0
    ├── dbad4059.1
    ├── dbad4059.r0
    └── dbad4059.r1

    Проверьте, что полученный сертификат действительно является корневым. Для этого вы можете воспользоваться командой ниже:

    openssl x509 -text -noout -in certs/lin/5db219db.0 | grep 'CA'
    
    CA:TRUE, pathlen:0

    где 5db219db.0 - имя проверяемого файла сертификата.

  4. Закодируйте в base64 полученный сертификат:

    cat 5db219db.0 | base64 -w0

    Закодированный сертификат потребуется вам далее для установки в конфигурационном манифесте nova-deployment-conf.yaml для параметра tlsCaBundle.

2.1. Подготовка учетной записи

Для операций автоматического создания ВМ, изменения их параметров и количества вы можете использовать учетную запись администратора VMware vCenter, однако рекомендуется создать служебного пользователя с ролью, имеющей ограниченный набор привилегий.

Воспользуйтесь официальной документацией VMware, чтобы подготовить необходимые учетные записи и роли. Выберите версию документации согласно имеющейся у вас версии VMware Vsphere.

Вы можете проверить поддержку вашей версии VMware Vsphere в Nova Container Platform в разделе матриц совместимости и протестированных интеграций.

В таблице ниже представлен перечень привилегий в vSphere API, необходимых для установки и поддержки жизненного цикла кластеров Nova Container Platform.

Привилегии в vSphere API

vSphere vCenter

Cns.Searchable
InventoryService.Tagging.AttachTag
InventoryService.Tagging.CreateCategory
InventoryService.Tagging.CreateTag
InventoryService.Tagging.DeleteCategory
InventoryService.Tagging.DeleteTag
InventoryService.Tagging.EditCategory
InventoryService.Tagging.EditTag
Sessions.ValidateSession
StorageProfile.Update
StorageProfile.View

vSphere vCenter Cluster

Host.Config.Storage
Resource.AssignVMToPool
VApp.AssignResourcePool
VApp.ImportVirtualMachine.Config.AddNewDisk

vSphere vCenter Resource Pool

Host.Config.Storage
Resource.AssignVMToPool
VApp.AssignResourcePool
VApp.Import
VirtualMachine.Config.AddNewDisk

vSphere Datastore

Datastore.AllocateSpace
Datastore.Browse
Datastore.FileManagement
InventoryService.Tagging.ObjectAttachable

vSphere Port Group

Network.Assign

Virtual Machine Folder

InventoryService.Tagging.ObjectAttachable
Resource.AssignVMToPool
VApp.Import
VirtualMachine.Config.AddExistingDisk
VirtualMachine.Config.AddNewDisk
VirtualMachine.Config.AddRemoveDevice
VirtualMachine.Config.AdvancedConfig
VirtualMachine.Config.Annotation
VirtualMachine.Config.CPUCount
VirtualMachine.Config.DiskExtend
VirtualMachine.Config.DiskLease
VirtualMachine.Config.EditDevice
VirtualMachine.Config.Memory
VirtualMachine.Config.RemoveDisk
VirtualMachine.Config.Rename
VirtualMachine.Config.ResetGuestInfo
VirtualMachine.Config.Resource
VirtualMachine.Config.Settings
VirtualMachine.Config.UpgradeVirtualHardware
VirtualMachine.Interact.GuestControl
VirtualMachine.Interact.PowerOff
VirtualMachine.Interact.PowerOn
VirtualMachine.Interact.Reset
VirtualMachine.Inventory.Create
VirtualMachine.Inventory.CreateFromExisting
VirtualMachine.Inventory.Delete
VirtualMachine.Provisioning.Clone
VirtualMachine.Provisioning.MarkAsTemplate
VirtualMachine.Provisioning.DeployTemplate

vSphere vCenter Datacenter

InventoryService.Tagging.ObjectAttachable
Resource.AssignVMToPool
VApp.Import
VirtualMachine.Config.AddExistingDisk
VirtualMachine.Config.AddNewDisk
VirtualMachine.Config.AddRemoveDevice
VirtualMachine.Config.AdvancedConfig
VirtualMachine.Config.Annotation
VirtualMachine.Config.CPUCount
VirtualMachine.Config.DiskExtend
VirtualMachine.Config.DiskLease
VirtualMachine.Config.EditDevice
VirtualMachine.Config.Memory
VirtualMachine.Config.RemoveDisk
VirtualMachine.Config.Rename
VirtualMachine.Config.ResetGuestInfo
VirtualMachine.Config.Resource
VirtualMachine.Config.Settings
VirtualMachine.Config.UpgradeVirtualHardware
VirtualMachine.Interact.GuestControl
VirtualMachine.Interact.PowerOff
VirtualMachine.Interact.PowerOn
VirtualMachine.Interact.Reset
VirtualMachine.Inventory.Create
VirtualMachine.Inventory.CreateFromExisting
VirtualMachine.Inventory.Delete
VirtualMachine.Provisioning.Clone
VirtualMachine.Provisioning.DeployTemplate
VirtualMachine.Provisioning.MarkAsTemplate
Folder.Create
Folder.Delete

3. Получение конфигурационного манифеста

Вы можете получить шаблон конфигурационного манифеста с помощью nova-ctl. Для этого выполните команду:

nova-ctl init

Пример

nova-ctl init

Select the type of infrastructure provider:
[ 0] None (Bare metal)
[ 1] vSphere
[ 2] zVirt
> 1
Select deployment method:
[ 0] Online
[ 1] Online with HTTP proxy
[ 2] Offline
> 0
Cluster configuration file is stored in nova-configs/nova-deployment-conf.yaml
Proxy configuration file is stored in nova-configs/proxy.yaml

В директории nova-configs находятся следующие файлы:

  • nova-deployment-conf.yaml: основной конфигурационный манифест платформы.

  • proxy.yaml: конфигурационный манифест для установки платформы через HTTP-прокси.

При запросе шаблона файла конфигурации требуется выбрать тип провайдера инфраструктуры. В зависимости от выбранного типа шаблон файла будет оптимизирован для удобства заполнения конфигурации.

Для установки Nova Container Platform в инфраструктуре VMware vSphere выберите тип провайдера инфраструктуры vSphere.

Информация

Для использования прокси-сервера заполните манифест proxy.yaml в соответствии с разделом документации по настройке прокси-сервера.

4. Пример файла конфигурации установки

Вы можете кастомизировать файл конфигурации nova-deployment-conf.yaml, если требуется указать более детальные настройки платформы. Подробную информацию о параметрах установки вы можете получить в разделе Спецификация параметров установки.

Пример файла установки

apiVersion: "config.nova-platform.io/v1alpha3"
kind: "Infrastructure"
metadata:
  name: "cluster"
spec:
  customerID: "5d4a2c84b6e22623" (1)
  licenseKey: "a098f0aefdc021b643c2eb76c1cad0a8" (2)
  version: "v4.0.2" (3)
  infrastructureProvider: (4)
    vsphere:
      auth:
        vcenterServer: "vcenter.nova.internal"
        vcenterServerPort: 443
        tlsCaBundle: LS0tLS1CRUdJTiBDRVJ...
        username: "user@vsphere.local"
        password: "password"
      datacenter: "DC_1"
      cluster: "Cluster_1"
      datastore: "VMs_SSD"
      template: "Templates/Redos/redos-MUROM-7.3-20231122.0"
      uselinkedClone: false
      vmFolder: "Nova_Dev_1"
      network: "Private-10.251.11.X"
      hostGroup:
      - name: "control-plane"
        cpuSockets: 2
        cpuCores: 4
        memory: "8G"
        diskSize: "32G"
        diskThinProvisioned: "inherit"
      - name: "infra"
        cpuSockets: 2
        cpuCores: 8
        memory: "16G"
        diskSize: "64G"
        diskThinProvisioned: "inherit"
      - name: "worker"
        cpuSockets: 2
        cpuCores: 4
        memory: "8G"
        diskSize: "32G"
        diskThinProvisioned: "inherit"
  clusterNodes: (5)
    master: (6)
      - hostGroup: "control-plane"
        networkSpec:
          hostname: "master.nova.internal"
          ip: "10.251.11.111"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    infra: (7)
      - hostGroup: "infra"
        networkSpec:
          hostname: "infra.nova.internal"
          ip: "10.251.11.114"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    ingress: (8)
      - hostGroup: "ingress"
        networkSpec:
          hostname: "ingress.nova.internal"
          ip: "10.251.11.117"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    worker: (9)
      - hostGroup: "worker"
        networkSpec:
          hostname: "worker.nova.internal"
          ip: "10.251.11.119"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
  clusterConfiguration: (10)
    dnsBaseDomain: "apps.cls01.nova.internal"
    cniProvider: "cilium"
    extraOptions:
      ingressTLSConfig:
        internalCA: {}
1 Идентификатор клиента, полученный из лицензионной информации.
2 Лицензионный ключ для установки кластера.
3 Версия платформы Nova Container Platform.
4 Блок конфигурации провайдера инфраструктуры vSphere.
5 Блок конфигурации узлов кластера Kubernetes.
6 Список мастер-узлов кластера Nova Container Platform.
7 Список инфраструктурных узлов кластера Nova Container Platform.
8 Список узлов балансировки кластера Nova Container Platform.
9 Список рабочих узлов кластера Nova Container Platform.
10 Блок дополнительных параметров настройки кластера.

Информация

Для использования собственного центра сертификации для генерации сертификатов заполните конфигурационный манифест nova-deployment-conf.yaml в соответствии с разделом документации Использование пользовательских сертификатов.

5. Установка кластера в минимальной конфигурации

Для установки кластера в минимальной конфигурации вы подготовили не менее трех узлов:

  • 1 мастер-узел кластера

  • 1 инфраструктурный узел кластера

  • 1 рабочий узла кластера

Добавьте данные узлы в соответствующие списки конфигурационного манифеста nova-deployment-conf.yaml (master, infra, worker), например:

  clusterNodes:
    master:
      - hostGroup: "control-plane"
        networkSpec:
          hostname: "master.nova.internal"
          ip: "10.251.11.111"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    infra:
      - hostGroup: "infra"
        networkSpec:
          hostname: "infra.nova.internal"
          ip: "10.251.11.114"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    worker:
      - hostGroup: "worker"
        networkSpec:
          hostname: "worker.nova.internal"
          ip: "10.251.11.119"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"

Информация

При установке кластера в минимальной конфигурации роль узлов балансировки входящего трафика (Ingress) выполняют рабочие узлы. Это необходимо учесть при настройке внешних балансировщиков, а также при создании DNS-записей.

6. Установка кластера в высокодоступной конфигурации

Для установки кластера в высокодоступной конфигурации вы подготовили следующие узлы:

  • 3 мастер-узла кластера

  • 3 инфраструктурных узла кластера

  • 2 и более рабочих узла кластера

  • (Опционально) 2 и более узла балансировки входящих запросов

Добавьте необходимые узлы кластера в соответствующие списки файла конфигурации nova-deployment-conf.yaml (master, infra, worker, ingress), например:

  clusterNodes:
    master:
      - hostGroup: "control-plane"
        networkSpec:
          hostname: "master01.nova.internal"
          ip: "10.251.11.111"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
      - hostGroup: "control-plane"
        networkSpec:
          hostname: "master02.nova.internal"
          ip: "10.251.11.112"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
      - hostGroup: "control-plane"
        networkSpec:
          hostname: "master03.nova.internal"
          ip: "10.251.11.113"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    infra:
      - hostGroup: "infra"
        networkSpec:
          hostname: "infra01.nova.internal"
          ip: "10.251.11.114"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
      - hostGroup: "infra"
        networkSpec:
          hostname: "infra02.nova.internal"
          ip: "10.251.11.115"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
      - hostGroup: "infra"
        networkSpec:
          hostname: "infra03.nova.internal"
          ip: "10.251.11.116"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    ingress:
      - hostGroup: "ingress"
        networkSpec:
          hostname: "ingress01.nova.internal"
          ip: "10.251.11.117"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
      - hostGroup: "ingress"
        networkSpec:
          hostname: "ingress02.nova.internal"
          ip: "10.251.11.118"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
    worker:
      - hostGroup: "heavy-worker"
        networkSpec:
          hostname: "worker01.nova.internal"
          ip: "10.251.11.119"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"
      - hostGroup: "heavy-worker"
        networkSpec:
          hostname: "worker02.nova.internal"
          ip: "10.251.11.120"
          gateway: "10.251.11.254"
          netmask: "255.255.255.0"
          dns:
            - "10.251.1.2"
            - "10.250.0.254"
        state: "present"

7. Запуск процесса установки

Необходимые условия

  • У вас есть закрытый ключ SSH на вашем локальном компьютере. Ключ будет использоваться для SSH аутентификации на узлах кластера в случае отладки или восстановления после аварийных ситуаций.

  • Вы подготовили шаблоны виртуальных машин и среды виртуализации для установки кластера.

  • Вы заполнили шаблон файла конфигурации установки nova-deployment-conf.yaml.

  • (Опционально) Вы заполнили шаблон файла конфигурации прокси-сервера proxy.yaml.

Процедура

  1. Запустите процесс установки кластера с помощью команды:

    nova-ctl bootstrap --ssh-user <имя_пользователя> --ssh-key <закрытый ключ SSH>

    В ходе процедуры bootstrap вся существующая конфигурация Nova Container Platform на узлах будет удалена. Вам необходимо согласиться с этим предупреждением, если вы уверены в том, что список узлов кластера указан верно.

  2. В процессе установки будет запрошено подтверждение на создание виртуальных машин и сетевых интерфейсов в среде виртуализации VMware vSphere.

    ☕️ 1/11: Preparing infrastructure...
    The following actions will be preformed:
    + create vsphere_tag_category category
    + create vsphere_tag tag
    + create vsphere_folder custom_parent_folder
    + create vsphere_folder cluster_folder
    + create vsphere_resource_pool resource_pool
    + create vsphere_virtual_machine worker_nova_internal
    + create vsphere_virtual_machine master_nova_internal
    + create vsphere_virtual_machine infra_nova_internal
    Are you sure you want to apply these changes? (yes/no) [yes]

8. Ожидание процесса установки

Вы можете наблюдать за процессом установки Nova Container Platform в консоли:

The bootstrap procedure implies the initial installation of the platform. All existing configuration will be deleted. Are you sure you want to continue? (yes/no) [no] yes

 ■ Preparing infrastructure... done
 ■ Validating cluster nodes... done
 ■ Validating license... done
 ■ Setting up secrets store... done
 ■ Setting up PKI... done
 ■ Setting up authentication... done
 ■ Preparing cluster nodes... done
 ■ Deploying Kubernetes cluster... done
 ■ Deploying platform applications... done


 🚀 Welcome to the NOVA container platform!


Your working directory contains the following installation assets:
 • Kubernetes client configuration: kubeadmin.conf
 • OAuth admin credentials: oauth-credentials.txt
 • Secrets store tokens: secrets-store-tokens.txt
 • Internal CA bundle: nova-root-ca.pem

Read the official NOVA Container Platform documentation to discover features, expand and customize your cluster.

https://docs.nova-platform.io

Команда завершится успешно, когда все компоненты Nova Container Platform будут установлены и доступны.

После успешного завершения установки кластера утилита nova-ctl сохраняет в рабочей директории файлы с информацией, необходимой для доступа к кластеру и его компонентам:

Описание

kubeadmin.conf

Конфигурационный файл с учетной записью администратора кластера для утилиты kubectl, необходимой для работы с Kubernetes. Учетная запись имеет роль cluster-admin в Kubernetes.

oauth-credentials.txt

Учетная запись администратора кластера для авторизации по протоколу OAuth.

secrets-store-tokens.txt

Токены для доступа к системе управления секретами Secrets Manager.

nova-root-ca.pem

Корневой TLS-сертификат Kubernetes. Данным сертификатом подписаны все последующие подчиненные центры сертификации.

Не забудьте сохранить учетные данные в надежном месте и удалить их с локальной машины.

9. Проверка подключения к кластеру

После установки платформы вы можете выполнить пробное подключение к кластеру Kubernetes. Для этого выполните приведенные ниже команды.

Процедура

  1. Определите в консоли переменную KUBECONFIG, содержащую путь к полученному после установки файлу kubeadmin.conf:

    export KUBECONFIG=<путь>/kubeadmin.conf
  2. Проверьте, что вы можете выполнять команды kubectl:

    kubectl cluster-info

    Пример

    $ kubectl cluster-info
    Kubernetes control plane is running at https://172.31.101.24:6443
    CoreDNS is running at https://172.31.101.24:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  3. Проверьте список узлов кластера:

    kubectl get nodes

    Пример

    $ kubectl get nodes
    
    master01.nova.internal    Ready    control-plane   27h   v1.26.8
    master02.nova.internal    Ready    control-plane   27h   v1.26.8
    master03.nova.internal    Ready    control-plane   27h   v1.26.8
    infra01.nova.internal     Ready    infra           27h   v1.26.8
    worker01.nova.internal    Ready    worker          27h   v1.26.8
    ingress01.nova.internal   Ready    ingress         27h   v1.26.8
    infra01.nova.internal     Ready    infra           27h   v1.26.8
    infra02.nova.internal     Ready    infra           27h   v1.26.8
    worker02.nova.internal    Ready    worker          27h   v1.26.8
    ingress02.nova.internal   Ready    ingress         27h   v1.26.8
  4. Проверьте версию установленной платформы:

    kubectl get clusterversions version

    Пример

    $ kubectl get clusterversions version
    
    NAME      VERSION   AGE
    version   v4.0.2    12m