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

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

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

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

設定 Symcloud Storage

Google Distributed Cloud connected 伺服器使用 Rakuten Symcloud Storage 做為儲存空間解決方案。Symcloud Storage 是第三方解決方案,可做為每個 Distributed Cloud connected 節點上的本機儲存空間抽象層,並讓其他 Distributed Cloud connected 節點上執行的工作負載使用本機儲存空間。

Symcloud Storage 是從 Google Cloud Marketplace 部署,並受其中所述條款約束。Google 僅提供有限的支援,協助您搭配使用 Symcloud Storage 與 Distributed Cloud Connected,並可能會聘僱第三方供應商提供協助。Distributed Cloud 連線軟體更新包含 Symcloud Storage 的軟體更新。

請按照下列步驟設定 Google Distributed Cloud connected 叢集,為虛擬機器啟用 Symcloud Storage:

  1. 使用下列指令建立 robinio 命名空間:

    kubectl create ns robinio
    
  2. 取得 Symcloud Storage 授權檔案,並使用下列指令套用至叢集:

    kubectl apply LICENSE_FILE
    
  3. 執行下列指令,確認 Symcloud Storage 正常運作:

    kubectl apply LICENSE_FILE
    

    指令會傳回類似以下內容的輸出結果:

     Name:         robin
     Namespace:
     Labels:       app.kubernetes.io/instance=robin
                   app.kubernetes.io/managed-by=robin.io
                   app.kubernetes.io/name=robin
     Annotations:  <none>
     API Version:  manage.robin.io/v1
     Kind:         RobinCluster
     Metadata:
       
     Spec:
       
     Status:
       
       Phase:             Ready
       
    
  4. 將下列設定套用至叢集,建立 robin-block-immediate 儲存空間類別:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: robin-block-immediate
    parameters:
      faultdomain: host
      replication: "3"
      blocksize:   "512"
    provisioner: robin
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    
  5. 將下列設定套用至叢集,建立 robin-snapshotclass 磁碟區快照類別:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: robin-snapshotclass
      labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: "true"
    driver: robin
    deletionPolicy: Delete
    

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

根據預設,Distributed Cloud connected 會啟用 GDC 虛擬機器的 VM Runtime 支援功能。如要手動啟用,請完成本節中的步驟。本節的操作說明假設您已具備功能完整的 Distributed Cloud 連線叢集。如要在叢集上停用 GDC 虛擬機器支援的 VM Runtime,請還原本節所述的變更。

如要在 GDC 虛擬機器子系統上啟用 VM Runtime,請完成下列步驟:

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

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      annotations:
        baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
        vm.cluster.gke.io/enable-vm-backup: "true"
    spec:
      enabled: true
      storage:
        defaultStorageClass: robin-block-immediate
    haPolicy:
      defaultRecoveryStrategy: Reschedule
      nodeHeartbeatInterval: 15s
      nodeMonitorGracePeriod: 55s

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

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

    kubectl get vmruntime
    

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

    NAME        AGE   ENABLED   READY   PREFLIGHTCHECK
    vmruntime   5m   true      true    true
    
  3. 使用下列內容修改 robin-block-immediate 儲存空間類別的 storageprofile,然後套用至叢集:

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: robin-block-immediate
    spec:
      claimPropertySets:
        accessModes:
          ReadWriteMany
      volumeMode: Block

安裝 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 列為外掛程式之一。

建立虛擬機器映像檔的 Cloud Storage bucket

完成本節中的步驟,為虛擬機器映像檔建立 Cloud Storage bucket。如果您已有映像檔存放區,請略過本節。

  1. 完成「建立值區」一文中的步驟,建立值區。

  2. 使用下列指令設定服務帳戶和金鑰,以便存取 bucket:

    export PROJECT_ID=$(gcloud config get-value project)
    gcloud iam service-accounts create image-access
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/storage.objectViewer" \
    gcloud iam service-accounts keys create ./image-access-gcr.json \
      --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
  3. 在叢集中建立密鑰,以便存取 bucket。如果值區是公開的,請略過這個步驟。 這個密鑰必須與虛擬機器磁碟位於相同命名空間。您必須在每個受影響的命名空間中建立密鑰。

    kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE

    CLUSTER_ID 替換為目標命名空間的名稱。

  4. 將圖片儲存在值區中。

從虛擬機器映像檔建立虛擬機器磁碟

完成本節中的步驟,從虛擬機器映像檔建立虛擬機器磁碟。

從儲存在 Cloud Storage 中的映像檔建立磁碟

將下列設定套用至叢集,從儲存在 Cloud Storage bucket 中的虛擬機器建立虛擬機器磁碟:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   source:
     gcs:
       url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE
       secretRef: gcs-image-sa
   size: DISK_SIZE
   storageClassName: robin-block-immediate

更改下列內容:

  • DISK_NAME:這個虛擬機器磁碟的名稱。
  • NAMESPACE:目標命名空間。
  • IMAGE_FILE:虛擬機器映像檔的名稱。
  • DISK_SIZE:所需磁碟大小。這個值必須大於虛擬機器映像檔的 virtual-size 值。您可以使用 qemu-img info DISK_SIZE 指令找出這個值。

如未指定 storageClassName 值,系統會使用 VMRuntime 資源中指定的預設值。

從現有磁碟映像檔建立磁碟

如要從叢集中的現有虛擬機器磁碟或映像檔建立虛擬機器磁碟,請按照下列步驟操作。

  1. 將下列設定套用至叢集,即可建立目標磁碟:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: IMAGE_DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: EXISTING_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    更改下列內容:

    • IMAGE_DISK_NAME:這個虛擬機器磁碟的名稱。
    • NAMESPACE:目標命名空間。
    • EXISTING_DISK_NAME:現有虛擬機器磁碟的名稱。
    • DISK_SIZE:所需磁碟大小。這個值必須等於或大於現有磁碟或映像檔的大小。

    您可以使用 qemu-img 工具取得現有磁碟或映像檔的大小,方法如下:

    qemu-img info EXISTING_DISK_NAME

    如未指定 storageClassName 值,系統會使用 VMRuntime 資源中指定的預設值。

  2. 從現有映像檔建立新磁碟,方法是在叢集中套用下列設定:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
      namespace: NAMESPACE
    spec:
      source:
        virtualMachineDisk:
          name: IMAGE_DISK_NAME
      size: DISK_SIZE
      storageClassName: robin-block-immediate

    更改下列內容:

    • IMAGE_DISK_NAME:您在上一個步驟中建立的虛擬機器磁碟名稱。
    • NAMESPACE:目標命名空間。
    • DISK_SIZE:所需磁碟大小。必須等於上一個步驟中建立的虛擬機器磁碟大小。
  3. 使用下列指令將目標磁碟調整為所需大小:

    kubectl edit gdisk DISK_NAME -n NAMESPACE

    更改下列內容:

    • DISK_NAME:您在上一個步驟中建立的虛擬機器磁碟名稱。
    • NAMESPACE:目標命名空間。
  4. 修改磁碟設定中的 spec.size 值,並套用至叢集。

建立空白磁碟

將下列設定套用至叢集,建立空白虛擬機器磁碟:

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   size: DISK_SIZE
   storageClassName: robin-block-immediate

更改下列內容:

  • DISK_NAME:這個虛擬機器磁碟的名稱。
  • NAMESPACE:目標命名空間。
  • DISK_SIZE:以 GiB 為單位的所需磁碟大小。這個值必須大於虛擬機器映像檔的 virtual-size 值。您可以使用 qemu-img info DISK_SIZE 指令找出這個值。

如未指定 storageClassName 值,系統會使用 VMRuntime 資源中指定的預設值。

設定虛擬網路

按照「網路」一節的步驟,為虛擬機器設定虛擬網路。

建立虛擬機器

完成本節中的步驟,在 Distributed Cloud 連線伺服器部署作業中建立虛擬機器。本節的指示僅為範例,旨在說明不同情境的設定。如要進一步瞭解如何設定虛擬機器,請參閱「使用 GDC 上的 VM 執行階段,建立具有特定 CPU 和記憶體資源的 VM」。

從可開機的磁碟映像檔建立虛擬機器

如要從可開機的磁碟映像檔建立虛擬機器,請對叢集套用下列設定:

 kind: VirtualMachine
 metadata:
   name: my-virtual-machine
   namespace: my-vm-namespace
 spec:
   osType: Linux/Windows
   guestEnvironment: {} // comment out this line to enable guest environment for access management
   autoRestartOnConfigurationChange: true 
   compute:
     cpu:
       vcpus: 6
     memory:
       capacity: 8Gi
   interfaces:
      - name: eth0
        networkName: network-410
        ipAddresses:
        - 10.223.237.10/25
   disks:
     - virtualMachineDiskName: my-boot-disk
       boot: true
     - virtualMachineDiskName: my-data-disk

更改下列內容:

  • DISK_NAME:這個虛擬機器磁碟的名稱。
  • NAMESPACE:目標命名空間。

從 ISO 光碟映像檔建立虛擬機器

如要從 ISO 光碟映像檔建立虛擬機器,請完成「在 Google Distributed Cloud 中使用 ISO 映像檔建立 Windows VM」一文中的步驟。

建立支援 GPU 的虛擬機器

完成本頁所述步驟,建立符合業務需求的虛擬機器,然後完成「設定虛擬機器以使用 GPU 資源」中的步驟。

存取虛擬機器

完成本節中的步驟,即可存取在 Distributed Cloud 連線伺服器部署作業中執行的虛擬機器。

取得存取憑證

完成本節步驟,取得使用 Linux 訪客環境功能存取虛擬機器所需的憑證。

  1. 將下列設定套用至叢集,為目標虛擬機器啟用 Linux 訪客環境:

    kind: VirtualMachine
    metadata:
     name: my-virtual-machine
     namespace: my-vm-namespace
    spec:
     osType: Linux
     guestEnvironment: {}
     autoRestartOnConfigurationChange: true 
  2. 使用下列指令產生包含 SSH 金鑰組的 id_rsa.pub 檔案:

    ssh-keygen -t rsa
  3. 將下列設定套用至叢集,建立 VirtualMachineAccessRequest 資源:

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachineAccessRequest
    metadata:
     name: RESOURCE_NAME
     namespace: NAMESPACE
    spec:
      vm: VM_NAME
      user: USER_NAME
      ssh:
        key: RSA_KEY
        ttl: 2h

更改下列內容:

  • RESOURCE_NAME:這個虛擬機器存取要求資源的說明名稱。
  • NAMESPACE:目標命名空間。
  • VM_NAME:目標虛擬機器的名稱。
  • USER_NAME:要授予存取權的使用者名稱。
  • RSA_KEY:您在上一個步驟中產生的 id_rsa.pub 檔案內容。
  1. 請使用下列指令檢查存取要求狀態:

    kubectl get vmar
    

    如果指令傳回 Configured 狀態,請繼續下一個步驟。

  2. 透過 SSH 或遠端桌面存取虛擬機器:

    • 如果虛擬機器已連上區域網路,可以直接存取。
    • 如果虛擬機器連線至 Pod 網路,您必須建立負載平衡器服務,才能存取所需連接埠。

啟動、重新啟動或停止虛擬機器

使用下列指令啟動、重新啟動或停止虛擬機器:

  • 啟動虛擬機器: kubectl virt start vmVM_NAME-nNAMESPACE
  • 重新啟動虛擬機器: kubectl virt restart vmVM_NAME-nNAMESPACE
  • 停止虛擬機器: kubectl virt stop vmVM_NAME-nNAMESPACE

更改下列內容:

  • VM_NAME:目標虛擬機器的名稱。
  • NAMESPACE:目標命名空間。

後續步驟