Deckhouse Platform на VMware vSphere

Список необходимых ресурсов vSphere

  • User пользователь с необходимым набором прав.
  • Network с DHCP и доступом в Интернет.
  • Datacenter с соответствующим тэгом k8s-region.
  • ComputeCluster с соответствующим тэгом k8s-zone.
  • Datastore в любом количестве, с соответствующими тэгами.
  • Templateподготовленный образ vSphere.

Конфигурация vSphere

Для конфигурации vSphere необходимо использовать vSphere CLI govc.

Настройка govc

export GOVC_URL=example.com
export GOVC_USERNAME=<USER_NAME>
export GOVC_PASSWORD=<USER_PASSWORD>
export GOVC_INSECURE=1
export GOVC_URL=example.com export GOVC_USERNAME=<USER_NAME> export GOVC_PASSWORD=<USER_PASSWORD> export GOVC_INSECURE=1

Создание тэгов и категорий тэгов

В vSphere нет понятия “регион” и “зона”, поэтому для разграничения зон доступности используются тэги.

“Регионом” в vSphere является Datacenter, а “зоной” — ComputeCluster.

Например, если необходимо сделать 2 региона, и в каждом регионе будет 1 зона доступности:

govc tags.category.create -d "Kubernetes region" k8s-region
govc tags.category.create -d "Kubernetes zone" k8s-zone
govc tags.create -d "Kubernetes Region #1" -c k8s-region test_region_1
govc tags.create -d "Kubernetes Region #2" -c k8s-region test_region_2
govc tags.create -d "Kubernetes Zone Test" -c k8s-zone test_zone
govc tags.category.create -d "Kubernetes region" k8s-region govc tags.category.create -d "Kubernetes zone" k8s-zone govc tags.create -d "Kubernetes Region #1" -c k8s-region test_region_1 govc tags.create -d "Kubernetes Region #2" -c k8s-region test_region_2 govc tags.create -d "Kubernetes Zone Test" -c k8s-zone test_zone

Тэги регионов навешиваются на Datacenter:

govc tags.attach -c k8s-region test_region_1 /DC1
govc tags.attach -c k8s-region test_region_2 /DC2
govc tags.attach -c k8s-region test_region_1 /DC1 govc tags.attach -c k8s-region test_region_2 /DC2

Тэги зон навешиваются на Cluster и Datastores:

govc tags.attach -c k8s-zone test_zone /DC/host/test_cluster
govc tags.attach -c k8s-zone test_zone /DC/datastore/test_lun
govc tags.attach -c k8s-zone test_zone /DC/host/test_cluster govc tags.attach -c k8s-zone test_zone /DC/datastore/test_lun

Datastore тэги

При наличии Datastore’ов на всех ESXi, где будут размещаться виртуальные машины нод кластера, возможно использовать динамический заказ PV. Для автоматического создания StorageClass’ов в Kubernetes кластере, повесьте тэг региона и зоны, созданные ранее, на выбранные Datastore’ы.

Права

Ввиду разнообразия подключаемых к vSphere SSO-провайдеров, шаги по созданию пользователя в данной статье не рассматриваются.

Необходимо создать роль (Role) с указанными правами и прикрепить её к одному или нескольким Datacenter’ам, где нужно развернуть кластер Kubernetes.

govc role.create kubernetes \
Datastore.AllocateSpace Datastore.Browse Datastore.FileManagement 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 \
Network.Assign Resource.AssignVMToPool Resource.ColdMigrate Resource.HotMigrate Resource.CreatePool \
Resource.DeletePool Resource.RenamePool Resource.EditPool Resource.MovePool StorageProfile.View System.Anonymous System.Read System.View \
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.HostUSBDevice VirtualMachine.Config.ManagedBy \
VirtualMachine.Config.Memory VirtualMachine.Config.MksControl VirtualMachine.Config.QueryFTCompatibility \
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.ToggleForkParent VirtualMachine.Config.UpgradeVirtualHardware VirtualMachine.GuestOperations.Execute \
VirtualMachine.GuestOperations.Modify VirtualMachine.GuestOperations.ModifyAliases VirtualMachine.GuestOperations.Query \
VirtualMachine.GuestOperations.QueryAliases VirtualMachine.Hbr.ConfigureReplication VirtualMachine.Hbr.MonitorReplication \
VirtualMachine.Hbr.ReplicaManagement VirtualMachine.Interact.AnswerQuestion VirtualMachine.Interact.Backup \
VirtualMachine.Interact.ConsoleInteract VirtualMachine.Interact.CreateScreenshot VirtualMachine.Interact.CreateSecondary \
VirtualMachine.Interact.DefragmentAllDisks VirtualMachine.Interact.DeviceConnection VirtualMachine.Interact.DisableSecondary \
VirtualMachine.Interact.DnD VirtualMachine.Interact.EnableSecondary VirtualMachine.Interact.GuestControl \
VirtualMachine.Interact.MakePrimary VirtualMachine.Interact.Pause VirtualMachine.Interact.PowerOff \
VirtualMachine.Interact.PowerOn VirtualMachine.Interact.PutUsbScanCodes VirtualMachine.Interact.Record \
VirtualMachine.Interact.Replay VirtualMachine.Interact.Reset VirtualMachine.Interact.SESparseMaintenance \
VirtualMachine.Interact.SetCDMedia VirtualMachine.Interact.SetFloppyMedia VirtualMachine.Interact.Suspend \
VirtualMachine.Interact.TerminateFaultTolerantVM VirtualMachine.Interact.ToolsInstall \
VirtualMachine.Interact.TurnOffFaultTolerance VirtualMachine.Inventory.Create \
VirtualMachine.Inventory.CreateFromExisting VirtualMachine.Inventory.Delete \
VirtualMachine.Inventory.Move VirtualMachine.Inventory.Register VirtualMachine.Inventory.Unregister \
VirtualMachine.Namespace.Event VirtualMachine.Namespace.EventNotify VirtualMachine.Namespace.Management \
VirtualMachine.Namespace.ModifyContent VirtualMachine.Namespace.Query VirtualMachine.Namespace.ReadContent \
VirtualMachine.Provisioning.Clone VirtualMachine.Provisioning.CloneTemplate VirtualMachine.Provisioning.CreateTemplateFromVM \
VirtualMachine.Provisioning.Customize VirtualMachine.Provisioning.DeployTemplate VirtualMachine.Provisioning.DiskRandomAccess \
VirtualMachine.Provisioning.DiskRandomRead VirtualMachine.Provisioning.FileRandomAccess VirtualMachine.Provisioning.GetVmFiles \
VirtualMachine.Provisioning.MarkAsTemplate VirtualMachine.Provisioning.MarkAsVM VirtualMachine.Provisioning.ModifyCustSpecs \
VirtualMachine.Provisioning.PromoteDisks VirtualMachine.Provisioning.PutVmFiles VirtualMachine.Provisioning.ReadCustSpecs \
VirtualMachine.State.CreateSnapshot VirtualMachine.State.RemoveSnapshot VirtualMachine.State.RenameSnapshot VirtualMachine.State.RevertToSnapshot

govc permissions.set  -principal имя_пользователя -role kubernetes /DC
govc role.create kubernetes \ Datastore.AllocateSpace Datastore.Browse Datastore.FileManagement 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 \ Network.Assign Resource.AssignVMToPool Resource.ColdMigrate Resource.HotMigrate Resource.CreatePool \ Resource.DeletePool Resource.RenamePool Resource.EditPool Resource.MovePool StorageProfile.View System.Anonymous System.Read System.View \ 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.HostUSBDevice VirtualMachine.Config.ManagedBy \ VirtualMachine.Config.Memory VirtualMachine.Config.MksControl VirtualMachine.Config.QueryFTCompatibility \ 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.ToggleForkParent VirtualMachine.Config.UpgradeVirtualHardware VirtualMachine.GuestOperations.Execute \ VirtualMachine.GuestOperations.Modify VirtualMachine.GuestOperations.ModifyAliases VirtualMachine.GuestOperations.Query \ VirtualMachine.GuestOperations.QueryAliases VirtualMachine.Hbr.ConfigureReplication VirtualMachine.Hbr.MonitorReplication \ VirtualMachine.Hbr.ReplicaManagement VirtualMachine.Interact.AnswerQuestion VirtualMachine.Interact.Backup \ VirtualMachine.Interact.ConsoleInteract VirtualMachine.Interact.CreateScreenshot VirtualMachine.Interact.CreateSecondary \ VirtualMachine.Interact.DefragmentAllDisks VirtualMachine.Interact.DeviceConnection VirtualMachine.Interact.DisableSecondary \ VirtualMachine.Interact.DnD VirtualMachine.Interact.EnableSecondary VirtualMachine.Interact.GuestControl \ VirtualMachine.Interact.MakePrimary VirtualMachine.Interact.Pause VirtualMachine.Interact.PowerOff \ VirtualMachine.Interact.PowerOn VirtualMachine.Interact.PutUsbScanCodes VirtualMachine.Interact.Record \ VirtualMachine.Interact.Replay VirtualMachine.Interact.Reset VirtualMachine.Interact.SESparseMaintenance \ VirtualMachine.Interact.SetCDMedia VirtualMachine.Interact.SetFloppyMedia VirtualMachine.Interact.Suspend \ VirtualMachine.Interact.TerminateFaultTolerantVM VirtualMachine.Interact.ToolsInstall \ VirtualMachine.Interact.TurnOffFaultTolerance VirtualMachine.Inventory.Create \ VirtualMachine.Inventory.CreateFromExisting VirtualMachine.Inventory.Delete \ VirtualMachine.Inventory.Move VirtualMachine.Inventory.Register VirtualMachine.Inventory.Unregister \ VirtualMachine.Namespace.Event VirtualMachine.Namespace.EventNotify VirtualMachine.Namespace.Management \ VirtualMachine.Namespace.ModifyContent VirtualMachine.Namespace.Query VirtualMachine.Namespace.ReadContent \ VirtualMachine.Provisioning.Clone VirtualMachine.Provisioning.CloneTemplate VirtualMachine.Provisioning.CreateTemplateFromVM \ VirtualMachine.Provisioning.Customize VirtualMachine.Provisioning.DeployTemplate VirtualMachine.Provisioning.DiskRandomAccess \ VirtualMachine.Provisioning.DiskRandomRead VirtualMachine.Provisioning.FileRandomAccess VirtualMachine.Provisioning.GetVmFiles \ VirtualMachine.Provisioning.MarkAsTemplate VirtualMachine.Provisioning.MarkAsVM VirtualMachine.Provisioning.ModifyCustSpecs \ VirtualMachine.Provisioning.PromoteDisks VirtualMachine.Provisioning.PutVmFiles VirtualMachine.Provisioning.ReadCustSpecs \ VirtualMachine.State.CreateSnapshot VirtualMachine.State.RemoveSnapshot VirtualMachine.State.RenameSnapshot VirtualMachine.State.RevertToSnapshot govc permissions.set -principal имя_пользователя -role kubernetes /DC

Сборка образа виртуальных машин

  1. Установить Packer.
  2. Склонировать репозиторий Deckhouse:
    git clone https://github.com/deckhouse/deckhouse/
    
    git clone https://github.com/deckhouse/deckhouse/
  3. Перейти в директорию ee/modules/030-cloud-provider-vsphere/packer/ склонированного репозитория:
    cd deckhouse/ee/modules/030-cloud-provider-vsphere/packer/
    
    cd deckhouse/ee/modules/030-cloud-provider-vsphere/packer/
  4. Создать файл vsphere.auto.pkrvars.hcl со следующим содержимым:
    vcenter_server = "<хостнейм или IP vCenter>"
    vcenter_username = "<имя пользователя>"
    vcenter_password = "<пароль>"
    vcenter_cluster = "<имя ComputeCluster, где будет создан образ>"
    vcenter_datacenter = "<имя Datacenter>"
    vcenter_resource_pool = "имя ResourcePool"
    vcenter_datastore = "<имя Datastore, в котором будет создан образ>"
    vcenter_folder = "<имя директории>"
    vm_network = "<имя сети, к которой подключится виртуальная машина при сборке образа>"
    
    vcenter_server = "<хостнейм или IP vCenter>" vcenter_username = "<имя пользователя>" vcenter_password = "<пароль>" vcenter_cluster = "<имя ComputeCluster, где будет создан образ>" vcenter_datacenter = "<имя Datacenter>" vcenter_resource_pool = "имя ResourcePool" vcenter_datastore = "<имя Datastore, в котором будет создан образ>" vcenter_folder = "<имя директории>" vm_network = "<имя сети, к которой подключится виртуальная машина при сборке образа>"
  5. Если ваш компьютер (с которого запущен Packer) не находится в одной сети с vm_network, а вы подключены через VPN-туннель, то замените {{ .HTTPIP }} в файле <UbuntuVersion>.pkrvars.hcl на IP-адрес вашего компьютера из VPN-сети в следующей строке:

     " url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg",
    
  6. Выберите версию Ubuntu и соберите образ:

    # Ubuntu 20.04
    packer build --var-file=20.04.pkrvars.hcl .
    # Ubuntu 18.04
    packer build --var-file=18.04.pkrvars.hcl .
    
    # Ubuntu 20.04 packer build --var-file=20.04.pkrvars.hcl . # Ubuntu 18.04 packer build --var-file=18.04.pkrvars.hcl .