管理 Distributed Cloud 連線機架上的虛擬機器

本頁說明如何管理 Google Distributed Cloud connected 機架上的虛擬機器,這些機架執行 Google Distributed Cloud 的 VM 執行階段。完成本頁的步驟前,請務必先熟悉 GDC 上的 VM 執行階段。如需支援的客層作業系統清單,請參閱 GDC 上 VM 執行階段的已驗證客層作業系統

舊版 (「設定 1」和「設定 2」) 機架硬體支援虛擬機器工作負載,但任何後續機架硬體設定都不支援。

如要瞭解虛擬機器如何做為 Distributed Cloud connected 平台的重要元件,請參閱「擴充 GKE Enterprise,管理內部部署邊緣 VM」。

Distributed Cloud 連線叢集支援虛擬機器 Webhook。這項功能可讓 Distributed Cloud 連線驗證向本機 Kubernetes API 伺服器發出的使用者要求。遭拒的要求會產生詳細資訊,說明遭拒原因。

在 Distributed Cloud connected 上啟用 GDC 支援的 VM 執行階段

根據預設,Distributed Cloud connected 會停用 GDC 虛擬機器的 VM Runtime 支援功能。如要啟用這項功能,請完成本節中的步驟。本節的操作說明假設您已具備功能完整的 Distributed Cloud connected 叢集。

  1. 使用下列內容修改 VMRuntime 自訂資源,並套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"
      # Set node grace period to 55 seconds; required for upgrading to 1.7.0
      haPolicy:
        defaultRecoveryStrategy: Reschedule
        nodeHeartbeatInterval: 15s
        nodeMonitorGracePeriod: 55s

    請勿變更 vmImageFormat 參數的值。 Distributed Cloud Connected 不支援任何其他虛擬磁碟格式。

    這項程序通常需要幾分鐘才能完成。

    請勿變更 vmImageFormat 參數的值。 Distributed Cloud Connected 不支援任何其他虛擬磁碟格式。

    這項程序通常需要幾分鐘才能完成。

  2. 使用下列指令,確認 VMRuntime 自訂資源已套用至叢集:

    kubectl get vmruntime -o yaml

    指令會傳回類似以下範例的輸出內容:

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. 使用下列指令,確認叢集已啟用 GDC 虛擬機器支援的 VM Runtime:

    kubectl get pods -n vm-system

    指令會傳回輸出內容,顯示叢集上執行的 GDC 子系統 Pod 的 VM 執行階段,類似以下範例:

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

安裝 virtctl 管理工具

您需要 virtctl 用戶端工具,才能管理 Distributed Cloud connected 叢集中的虛擬機器。如要安裝這項工具,請完成下列步驟:

  1. virtctl 用戶端工具安裝為 kubectl 外掛程式:

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl /usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. 確認已安裝 virt 外掛程式:

    kubectl plugin list

    如果外掛程式安裝成功,指令輸出內容會將 kubectl-virt 列為外掛程式之一。

在 Distributed Cloud connected 上佈建虛擬機器

本節提供設定範例,說明如何使用 Symcloud Storage 抽象層,在 Distributed Cloud 連線叢集上佈建 Linux 虛擬機器和 Windows 虛擬機器。

請注意,您無法使用 kubectl virt 指令,直接在 Distributed Cloud 連線叢集上建立虛擬機器,因為 Distributed Cloud 連線叢集不會為虛擬機器提供檔案系統儲存空間。

完成本節中的步驟前,請先完成「設定 Distributed Cloud connected for Symcloud Storage」中的步驟。如果之後停用叢集上的 Symcloud Storage,設定為使用 Symcloud Storage 的虛擬機器就會失敗。

在 Distributed Cloud connected 上佈建 Linux 虛擬機器

以下範例說明如何佈建 Linux 虛擬機器,並在 Ubuntu Server 22.04 上執行 Symcloud Storage。安裝來源是 Ubuntu Server 22.04 ISO 磁碟映像檔。

  1. 使用下列內容建立 Ubuntu Server 安裝光碟映像檔的 VirtualMachineDisk 資源,然後將其套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. 為虛擬機器的虛擬硬碟建立 VirtualMachineDisk 資源,內容如下,然後將其套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. 建立 VirtualMachineType 資源,其中包含指定虛擬機器設定的下列內容,然後將該資源套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. 建立 VirtualMachine 資源,其中包含在叢集上例項化及啟動虛擬機器的內容,然後將該資源套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    您也必須在叢集上設定下列功能:

  5. 在虛擬機器上安裝 Ubuntu Server:

    1. 等待 importer Pod 下載 Ubuntu Server 安裝光碟映像檔。
    2. 檢查虛擬機器的狀態:

      kubectl get gvm VM_NAME

      VM_NAME 替換為虛擬機名稱,在本例中為 ubu-vm

    3. 使用 SSH 或遠端桌面登入虛擬機器。

    4. 完成 Ubuntu Linux 安裝步驟。

  6. 清除所用資源:

    1. 停止虛擬機器:

      kubectl virt stop VM_NAME

      VM_NAME 替換為虛擬機名稱,在本例中為 ubu-vm

    2. 編輯虛擬機器的 YAML 檔案,移除安裝光碟映像檔的參照:

      kubectl edit gvm VM_NAME

      VM_NAME 替換為虛擬機名稱,在本例中為 ubu-vm

    3. 啟動虛擬機器:

      kubectl virt start VM_NAME

      VM_NAME 替換為虛擬機名稱,在本例中為 ubu-vm

    4. 刪除安裝光碟映像檔的 VirtualMachineDisk 資源:

      kubectl delete virtualmachinedisk ubuntu-iso-disk

在 Distributed Cloud connected 上佈建 Windows 虛擬機器

以下範例說明如何使用 Symcloud Storage 佈建 Windows 虛擬機器。步驟與佈建 Linux 虛擬機器類似,但需要額外新增 virtio 驅動程式磁碟映像檔,這是安裝 Windows 的必要條件。

  1. 取得 Windows 授權副本和安裝媒體映像檔。

  2. 為 Windows 安裝光碟映像檔建立 VirtualMachineDisk 資源,其中包含下列內容,然後將其套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    NAT_GATEWAY 替換為目標 Windows 安裝 ISO 磁碟映像檔的完整網址。

  3. virtio 驅動程式建立 VirtualMachineDisk 資源,並加入以下內容,然後將其套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. 為虛擬機器的虛擬硬碟建立 VirtualMachineDisk 資源,內容如下,然後將其套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. 建立 VirtualMachineType 資源,其中包含指定虛擬機器設定的下列內容,然後將該資源套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. 建立 VirtualMachine 資源,其中包含在叢集上例項化及啟動虛擬機器的內容,然後將該資源套用至叢集:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    您也必須在叢集上設定下列功能:

  7. 在虛擬機器上安裝 Windows:

    1. 等待 importer Pod 下載 Windows 安裝光碟映像檔。
    2. 檢查虛擬機器的狀態:

      kubectl get gvm VM_NAME

      VM_NAME 替換為虛擬機名稱,在本例中為 win-vm

    3. 按照「連線至 Windows VM 並完成 OS 安裝程序」中的步驟,完成 Windows 安裝程序。

  8. 清除所用資源:

    1. 停止虛擬機器:

      kubectl virt stop VM_NAME

      VM_NAME 替換為虛擬機名稱,在本例中為 win-vm

    2. 完成「卸載 ISO 映像檔和驅動程式磁碟」中的步驟。

管理在 Distributed Cloud connected 上執行的虛擬機器

如要瞭解如何管理在 Distributed Cloud connected 上執行的虛擬機器,請參閱下列 GDC VM Runtime 說明文件:

如要管理在 Distributed Cloud 連結網路方案上執行的虛擬機器,請先設定kubectl連線

在 Distributed Cloud connected 上停用 GDC 的 VM Runtime

請按照本節的步驟,在 Distributed Cloud connected 上停用 GDC 的 VM 執行階段。如要在 Distributed Cloud 連結網路方案上停用 GDC 的 VM Runtime,請務必先停止並刪除 Distributed Cloud 連結網路叢集上的所有虛擬機器,詳情請參閱「刪除 VM」。

如要在 Distributed Cloud Connected 上的 GDC 停用 VM 執行階段,請將 VMRuntime 自訂資源的 enabled 規格參數設為 false,如下所示,然後套用至叢集:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

後續步驟