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

必要條件

  • 確認您具有在命名空間中部署虛擬機器的可用資源。請參閱檢視 vSphere with Tanzu 中命名空間中的可用虛擬機器資源
  • 如果對虛擬機器使用 NVIDIA vGPU 或其他 PCI 裝置,則需要考慮以下注意事項:
    • 確保將相應的虛擬機器類別與 PCI 組態結合使用。請參閱在 vSphere with Tanzu 中將 PCI 裝置新增到虛擬機器類別
    • 具有 vGPU 裝置的虛擬機器需要將開機模式設定為 EFI 的映像,例如 CentOS。請務必具有這些映像的存取權。如需支援映像的相關資訊,請在 VMware Cloud Marketplace 網站上搜尋 VM Service image
    • ESXi 主機進入維護模式時,由虛擬機器服務管理且具有 vGPU 裝置的虛擬機器會自動關閉電源。這可能會暫時影響在虛擬機器中執行的工作負載。當主機結束維護模式後,虛擬機器會自動開啟電源。

程序

  1. 準備虛擬機器 YAML 檔案。
    在此檔案中,指定下列參數:
    選項 敘述
    apiVersion 指定虛擬機器服務 API 的版本。例如 vmoperator.vmware.com/v1alpha1
    kind 指定要建立的 Kubernetes 資源類型。唯一可用的值為 VirtualMachine
    spec.imageName 指定虛擬機器應使用的內容程式庫映像。例如,centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx
    spec.storageClass​ 確定要用於儲存持續性磁碟區的儲存區類別。例如,wcpglobal-storage-profile
    spec.className 指定用於說明要使用的虛擬硬體設定的虛擬機器類別名稱。例如,custom
    spec.networkInterfaces 指定虛擬機器的網路相關設定。
    • networkType.此金鑰的值可以是 nsx-tvsphere-distributed
    • networkName.只有在 networkTypevsphere-distributed 時才指定該名稱。您可以使用 kubectl get network 命令取得此資訊。

      如果 networkTypensx-t,則無需指示 networkName

    spec.vmMetadata 包含要傳遞至虛擬機器的其他中繼資料。可以使用此金鑰自訂客體作業系統映像,並設定諸如虛擬機器的 hostnameuser-data 之類的項目,包括密碼、SSH 金鑰等。下列範例 YAML 將使用 ConfigMap 儲存中繼資料。
    將以下內容用作 YAML 檔案 vmsvc-centos-vm.yaml 的範例。
    apiVersion: vmoperator.vmware.com/v1alpha1
    kind: VirtualMachine
    metadata:
      name: vmsvc-centos-vm
      namespace: my-ns-centos
    spec:
      imageName: centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx
      className: custom
      powerState: poweredOn
      storageClass: wcpglobal-storage-profile
      networkInterfaces:
      - networkName: primary
        networkType: vsphere-distributed
      vmMetadata:
          configMapName: vmsvc-centos-nginx-cm
          transport: OvfEnv
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: vmsvc-centos-nginx-cm
        namespace: my-ns-centos
    data:
      user-data: >-
        I2Nsb3VkLWNvbmZpZwoKcGFzc3dvcmQ6IFZNV0FSRQpzc2hfcHdhdXRoOiB0cnVlCgp1c2VyczoKICAtIG5hbWU6IHZtd2FyZQogICAgc3VkbzogQUxMPShBTEwpIE5PUEFTU1dEOkFMTAogICAgbG9ja19wYXNzd2Q6IGZhbHNlCiAgICAjIFBhc3N3b3JkIHNldCB0byBBZG1pbiEyMwogICAgcGFzc3dkOiAnJDEkc2FsdCRTT0MzM2ZWYkEvWnhlSXdENXl3MXUxJwogICAgc2hlbGw6IC9iaW4vYmFzaAoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgIFZNU1ZDIFNheXMgSGVsbG8gV29ybGQKICAgIHBhdGg6IC9oZWxsb3dvcmxkCg==
    ConfigMap 包含用於指定客體作業系統的使用者名稱和密碼的 cloud-config blob。在此範例中,vmsvc-centos-nginx-cm ConfigMap 中的 user-data 代表以下採用 base64 格式的程式碼片段:
    #cloud-config
    password: VMWARE
    ssh_pwauth: true
    users:
      - name: vmware
        sudo: ALL=(ALL) NOPASSWD:ALL
        lock_passwd: false
        passwd: '$1$salt$SOC33fVbA/ZxeIwD5yw1u1'
        shell: /bin/bash
    write_files:
      - content: |
          VMSVC Says Hello World
        path: /helloworld
    如需有關 cloud-config 規格的詳細資訊,請參閱 https://cloudinit.readthedocs.io/en/latest/topics/examples.html
  2. 部署虛擬機器。
    kubectl apply -f vmsvc-centos-vm.yaml
  3. 確認已建立虛擬機器。
    kubectl get vm -n my-ns-centos
    NAME              AGE
    vmsvc-centos-vm   28s
  4. 檢查虛擬機器的狀態和相關聯的事件。
    kubectl describe virtualmachine vmsvc-centos-vm

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

    Name:         vmsvc-centos-vm
    Namespace:    my-ns-centos
    Annotations:  vmoperator.vmware.com/image-supported-check: disabled
    API Version:  vmoperator.vmware.com/v1alpha1
    Kind:         VirtualMachine
    Metadata:
      Creation Timestamp:  2021-03-23T19:07:36Z
      Finalizers:
        virtualmachine.vmoperator.vmware.com
      Generation:  1
      Managed Fields:
     ...  
     ... 
    Spec:
      Class Name:  custom
      Image Name:  vmservice-centos-20-10-server-cloudimg-amd64
      Network Interfaces:
        Network Name:  primary
        Network Type:  vsphere-distributed
      Power State:     poweredOn
      Storage Class:   wcpglobal-storage-profile
      Vm Metadata:
        Config Map Name:  vmsvc-centos-nginx-cm
        Transport:        OvfEnv
    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 with Tanzu 中可用的虛擬機器

下一步

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

如果虛擬機器包括針對 vGPU 設定的 PCI 裝置,請安裝 NVIDIA 顯示驅動程式。請參閱在 vSphere with Tanzu 中的虛擬機器中安裝 NVIDIA 客體驅動程式