DevOps 工程師可以使用 kubectl 命令檢閱可用的虛擬機器資源,並在 主管 上的命名空間中佈建獨立 Linux 或 Windows 虛擬機器。如果虛擬機器包含為 vGPU 設定的 PCI 裝置,則在 vSphere IaaS control plane 環境中建立虛擬機器並將其開機後,您可以安裝 NVIDIA vGPU 圖形驅動程式以啟用 GPU 作業。

必要條件

為了能夠在 vSphere IaaS control plane 中部署獨立虛擬機器,DevOps 工程師必須具有特定虛擬機器資源的存取權。確保 vSphere 管理員已執行下列步驟以使虛擬機器資源可用:

如果您計劃對虛擬機器使用 NVIDIA vGPU 或其他 PCI 裝置,則必須遵循其他需求。如需相關資訊,請參閱在 vSphere IaaS control plane 中部署具有 PCI 裝置的虛擬機器

如需虛擬機器 Operator 和支援欄位的相關資訊,請參閱虛擬機器服務的概念https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/

檢視 vSphere IaaS control plane 中命名空間中的可用虛擬機器資源

身為 DevOps 工程師,請確認您可以存取命名空間上的虛擬機器資源以及檢視環境中可用的虛擬機器類別和虛擬機器範本。還可以列出自助服務虛擬機器所需的儲存區類別和其他項目。

此工作涵蓋用於存取可用於部署獨立虛擬機器之資源的命令。如需部署 Tanzu Kubernetes Grid 叢集和構成叢集的虛擬機器所需資源的相關資訊,請參閱 將 TKG 服務與 vSphere IaaS 控制平面搭配使用說明文件中的 TKG 叢集的虛擬機器類別

程序

  1. 在 Kubernetes 環境中存取您的命名空間。
  2. 若要檢視命名空間中的可用虛擬機器類別,請執行下列命令。
    kubectl get virtualmachineclass
    您可能會看到以下輸出。
    備註: 由於最佳運作虛擬機器類別類型允許過度認可資源,因此,如果對要佈建虛擬機器的命名空間設定了限制,資源可能會耗盡。因此,請在生產環境中使用保證虛擬機器類別類型。
    NAME                       VIRTUALMACHINECLASS        AGE
    
    best-effort-large          best-effort-large          44m
    best-effort-medium         best-effort-medium         44m
    best-effort-small          best-effort-small          44m
    best-effort-xsmall         best-effort-xsmall         44m
    custom                     custom                     44m
  3. 若要檢視特定虛擬機器類別的詳細資料,請執行下列命令。
    • kubectl describe virtualmachineclasses name_vm_class

      如果虛擬機器類別包含 vGPU 裝置,您可以在 spec: hardware: devices: vgpuDevices 下查看其設定檔。

      ......
      spec:
        hardware:
          cpus: 4
          devices:
            vgpuDevices:
            - profileName: grid_v100-q4
      ......
      
    • kubectl get virtualmachineclasses -o wide

      如果虛擬機器類別包含 vGPU 或傳遞裝置,輸出會在 VGPUDevicesProfileNamesPassthroughDeviceIDs 資料行中顯示該裝置。

  4. 檢視虛擬機器映像。
    kubectl get virtualmachineimages​
    您看到的輸出類似於下列內容。映像名稱 (如 vmi-xxxxxxxxxxxxx) 由系統自動產生。
    NAME                                              VERSION  OSTYPE                FORMAT  IMAGESUPPORTED  AGE
    vmi-xxxxxxxxxxxxx                                          centos8_64Guest       ovf     true            4d3h
  5. 若要說明特定映像,請使用下列命令。
    kubectl describe virtualmachineimage vmi-xxxxxxxxxxxxx

    具有 vGPU 裝置的虛擬機器需要將開機模式設定為 EFI 的映像,例如 CentOS。請務必具有這些映像的存取權。

  6. 確認您可以存取儲存區類別。
    kubectl get resourcequotas
    如需詳細資訊,請參閱 在vSphere 命名空間中顯示儲存區類別
    NAME                        AGE   REQUEST                                                                                         LIMIT
    my-ns-ubuntu-storagequota   24h   wcpglobal-storage-profile.storageclass.storage.k8s.io/requests.storage: 0/9223372036854775807

vSphere IaaS control plane 中部署虛擬機器

身為 DevOps 工程師,可以透過在 Kubernetes YAML 檔案中撰寫虛擬機器部署規格,以宣告方式佈建虛擬機器及其客體作業系統。

必要條件

如果對虛擬機器使用 NVIDIA vGPU 或其他 PCI 裝置,請參閱 在 vSphere IaaS control plane 中部署具有 PCI 裝置的虛擬機器

程序

  1. 準備虛擬機器 YAML 檔案。
    在此檔案中,指定下列參數:
    選項 敘述
    apiVersion 指定虛擬機器服務 API 的版本。例如 vmoperator.vmware.com/v1alpha2
    kind 指定要建立的 Kubernetes 資源類型。唯一可用的值為 VirtualMachine
    spec.imageName 指定 Kubernetes 叢集中的虛擬機器映射資源名稱。
    spec.storageClass​ 指定要用於持續性磁片區儲存區的儲存區類別。
    spec.className 指定用於說明要使用的虛擬硬體設定的虛擬機器類別名稱。
    spec.networkInterfaces 指定虛擬機器的網路相關設定。
    • networkType.此金鑰的值可以是 nsx-tvsphere-distributed
    • networkName.如有需要,請指定名稱或保留預設名稱。
    spec.vmMetadata 包含要傳遞至虛擬機器的其他中繼資料。可以使用此金鑰自訂客體作業系統映像,並設定諸如虛擬機器的 hostnameuser-data 之類的項目,包括密碼、SSH 金鑰等。

    如需其他資訊,包括如何使用 Microsoft 系統準備工具 (Sysprep) 啟動載入和自訂 Windows 虛擬機器的詳細資料,請參閱自訂客體

    topology.kubernetes.io/zone 控制虛擬機器在三區域 主管 上的放置。例如,topology.kubernetes.io/zone: zone-a02
    下列虛擬機器 YAML 檔案 my-vm 範例使用 CloudInit 作為啟動載入方法。該範例顯示了 VirtualMachine 資源在密碼資源 my-vm-bootstrap-data 中指定使用者資料。密碼將用於啟動載入和自訂客體作業系統。

    密碼中的資料包括 CloudInit cloud-config 。如需有關 cloud-config 格式的詳細資訊,請參閱 雲端組態範例官方說明文件。

    如需有關將 Sysprep 作為啟動載入方法的範例,請參閱 Sysprep
    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name:      my-vm
      namespace: my-namespace
    spec:
      className:    small
      imageName:    vmi-xxxxxxxxxxxxx
      storageClass: iscsi
      vmMetadata:
        transport: CloudInit
        secretName: my-vm-bootstrap-data
    
    apiVersion: v1
    kind: Secret
    metadata:
      name:      my-vm-bootstrap-data
      namespace: my-namespace
    stringData:
      user-data: |
        #cloud-config
        users:
        - default
        - name: xyz..
          primary_group: xyz..
          groups: users
          ssh_authorized_keys:
          - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSL7uWGj...
        runcmd:
        - "ls /"
        - [ "ls", "-a", "-l", "/" ]
        write_files:
        - path: /etc/my-plaintext
          permissions: '0644'
          owner: root:root
          content: |
            Hello, world.

    如果要在具有區域的環境中部署虛擬機器,請使用下列範例。

    若要取得 ZONE_NAME 的值,請執行 kubectl get vspherezones 命令。

    apiVersion: vmoperator.vmware.com/v1alpha2
    kind: VirtualMachine
    metadata:
      name: <vm-name>
      namespace: <vm-ns>
      labels:
        topology.kubernetes.io/zone: ZONE_NAME
    ...
  2. 部署虛擬機器。
    kubectl apply -f my-vm.yaml
  3. 確認已建立虛擬機器。
    kubectl get vm
    NAME              AGE
    my-vm             28s
  4. 檢查虛擬機器詳細資料及其狀態。
    kubectl describe virtualmachine my-vm

    輸出類似於下列內容。從輸出中,還可以取得虛擬機器的 IP 位址,該位址會顯示在 Vm Ip 欄位中。

    Name:         my-vm
    Namespace:    my-namespace
    API Version:  vmoperator.vmware.com/v1alpha2
    Kind:         VirtualMachine
    Metadata:
      Creation Timestamp:  2021-03-23T19:07:36Z
      Finalizers:
        virtualmachine.vmoperator.vmware.com
      Generation:  1
      Managed Fields:
     ...  
     ... 
    Status:
      Bios UUID:              4218ec42-aeb3-9491-fe22-19b6f954ce38
      Change Block Tracking:  false
      Conditions:
        Last Transition Time:  2021-03-23T19:08:59Z
        Status:                True
        Type:                  VirtualMachinePrereqReady
      Host:                    10.185.240.10
      Instance UUID:           50180b3a-86ee-870a-c3da-90ddbaffc950
      Phase:                   Created
      Power State:             poweredOn
      Unique ID:               vm-73
      Vm Ip:                   10.161.75.162
    Events:                    <none>
    ...
    
  5. 確認虛擬機器 IP 可以連線。
    ping 10.161.75.162
    PING 10.161.75.162 (10.161.75.162): 56 data bytes
    64 bytes from 10.161.75.162: icmp_seq=0 ttl=59 time=43.528 ms
    64 bytes from 10.161.75.162: icmp_seq=1 ttl=59 time=53.885 ms
    64 bytes from 10.161.75.162: icmp_seq=2 ttl=59 time=31.581 ms

結果

透過虛擬機器服務建立的虛擬機器只能由 DevOps 從 Kubernetes 命名空間進行管理。其生命週期無法從 vSphere Client 進行管理,但是 vSphere 管理員可以監控虛擬機器及其資源。如需詳細資訊,請參閱 監控 vSphere IaaS control plane 中可用的虛擬機器

下一步

如需其他詳細資料,請參閱 〈虛擬機器佈建簡介〉部落格。