管理虛擬機器

本文說明如何管理 Google Distributed Cloud 連結網路方案部署作業中的虛擬機器,這些機器執行的是 Google Distributed Cloud 的 VM 執行階段。您必須先熟悉 GDC 上的 VM Runtime,才能完成本頁的步驟。如需支援的客體作業系統清單,請參閱「GDC 上 VM Runtime 的已驗證客體作業系統」。

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

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

設定 Symcloud Storage

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

Symcloud Storage 是從 Google Cloud Marketplace 部署,因此須遵守當中規定的條款。Google 僅提供有限的支援,協助您在 Distributed Cloud Connected 中使用 Symcloud Storage,並可能會聘僱第三方供應商提供協助。Distributed Cloud 連線軟體更新包含 Symcloud Storage 的軟體更新。

請按照下列步驟設定 Google Distributed Cloud connected 叢集,為虛擬機器啟用 Symcloud Storage。詳情請參閱「在 Distributed Cloud 連線節點上安裝 Symcloud Storage」。

  1. 使用下列指令建立 robin-admin 命名空間:

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

    kubectl apply -f LICENSE_FILE
    

    將 LICENSE_FILE 替換為授權檔案的路徑。

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

    kubectl describe robincluster
    

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

     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
    
  6. 使用下列內容修改 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=v1.3.1-anthos1.35-gke.39
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl ./virtctl
    sudo mv ./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 列為其中一個外掛程式。

建立 VM 映像檔的 Cloud Storage bucket

完成本節中的步驟,為虛擬機器映像檔建立 Cloud Storage bucket。這個 bucket 使用 Workload Identity 聯盟,直接授予 Kubernetes ServiceAccount 存取 bucket 的權限。如果您已有建立好的映像檔存放區,請略過這一節。

如要降低多叢集機群中身分識別相同的風險,請完成本節中的步驟時,遵循「機群 Workload Identity Federation 最佳做法」中的指南。

  1. 完成「建立 bucket」一文所述的步驟,建立 bucket。

  2. 在目標虛擬機器的命名空間中建立 Kubernetes ServiceAccount:

    export VM_NAMESPACE=NAMESPACE
    export KUBERNETES_SERVICEACCOUNT=KUBERNETES_SERVICEACCOUNT
    kubectl create serviceaccount ${KUBERNETES_SERVICEACCOUNT} -n ${VM_NAMESPACE}

    更改下列內容:

    • NAMESPACE:目標虛擬機器的命名空間。
    • KUBERNETES_SERVICEACCOUNT:這個 Kubernetes ServiceAccount 的有意義名稱。
  3. 找出叢集的工作負載身分集區和身分提供者名稱:

    gcloud container fleet memberships describe MEMBERSHIP_ID \
        --project=FLEET_PROJECT_ID \
        --format="table(authority.identityProvider,authority.workloadIdentityPool,name)"

    更改下列內容:

    • MEMBERSHIP_ID:叢集的 fleet成員名稱。這通常是叢集的名稱。
    • FLEET_PROJECT_ID:機群主機 Google Cloud 專案的 ID。

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

    IDENTITY_PROVIDER: IDENTITY_PROVIDER
    WORKLOAD_IDENTITY_POOL: WORKLOAD_IDENTITY_POOL
    

    在輸出內容中,記下下列值:

  4. 將 bucket 的 Storage 物件檢視者角色 (roles/storage.objectViewer) 授予 Kubernetes ServiceAccount:

    export BUCKET_PROJECT_ID=BUCKET_PROJECT_ID
    export FLEET_PROJECT_NUMBER=FLEET_PROJECT_NUMBER
    export KUBERNETES_SERVICEACCOUNT=KUBERNETES_SERVICEACCOUNT
    export VM_NAMESPACE=NAMESPACE
    export WI_POOL=WORKLOAD_IDENTITY_POOL
    gcloud storage buckets add-iam-policy-binding gs://${BUCKET_PROJECT_ID}-vm-images \
       --member="principal://iam.googleapis.com/projects/${FLEET_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${WI_POOL}/subject/ns/${VM_NAMESPACE}/sa/${KUBERNETES_SERVICEACCOUNT}" \
       --role="roles/storage.objectViewer" \
       --project=${BUCKET_PROJECT_ID} \
       --condition="IAM_CONDITION" \
       --condition-from-file="IAM_CONDITION_FILE"

    更改下列內容:

    • BUCKET_PROJECT_ID:託管 bucket 的 Google Cloud 專案 ID。
    • FLEET_PROJECT_NUMBER:機群主機 Google Cloud 專案的專案編號。
    • KUBERNETES_SERVICEACCOUNT:目標 Kubernetes ServiceAccount 的名稱。
    • NAMESPACE:目標虛擬機器的命名空間。
    • WORKLOAD_IDENTITY_POOL:叢集工作負載身分集區的名稱。
    • IAM_CONDITION:選用,指定 IAM 條件,限制機群中特定叢集的存取權。如果省略或設為 None,系統不會套用任何 IAM 條件。
    • IAM_CONDITION_FILE:選用;指定包含 IAM 條件的檔案,用於限制機群內特定叢集的存取權。如果省略,除非指定 --condition 旗標並設為 None 以外的值,否則不會套用任何 IAM 條件。
  5. 將圖片儲存在值區中。

您也可以選擇使用舊版方法,透過 Google 服務帳戶的有效金鑰產生密碼。詳情請參閱「建立虛擬機器映像檔的 Cloud Storage 值區」。

使用 IAM 條件限制 Bucket 存取權

IAM 條件可讓您指定機群中哪些叢集可以存取該值區。如果未指定任何 IAM 條件,機群中所有命名空間內具有相同 Kubernetes ServiceAccount 的叢集,都能存取該值區,造成身分相同性風險。如未指定 IAM 條件,您也可以改用舊版存取機制,該機制會使用從 Google 服務帳戶有效金鑰產生的密碼。以下範例說明如何設定及套用 IAM 條件,限制值區存取權:

  1. 建立 IAM 條件檔案:

    cat <<EOF > iam_condition.yaml
    > expression: request.auth.claims.google.providerId == '$IDENTITY_PROVIDER'
    title: allow_only_this_cluster
    > EOF
  2. 將 Kubernetes ServiceAccount 存取權授予 bucket 時,請套用 IAM 條件檔案:

    gcloud storage buckets add-iam-policy-binding gs://${BUCKET_PROJECT_ID}-vm-images \
      --project="${BUCKET_PROJECT_ID}" \
      --role="roles/storage.objectViewer" \
      --member="principal://iam.googleapis.com/projects/${FLEET_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${WI_POOL}/subject/ns/${VM_NAMESPACE}/sa/${KUBERNETES_SERVICEACCOUNT}" \
      --condition-from-file=iam_condition.yaml

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

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

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

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

 apiVersion: vm.cluster.gke.io/v1
 kind: VirtualMachineDisk
 metadata:
   name: DISK_NAME
   namespace: NAMESPACE
 spec:
   source:
     gcs:
       url: gs://${BUCKET_PROJECT_ID}-vm-images/IMAGE_FILE_PATH
       serviceAccount: KUBERNETES_SERVICEACCOUNT
   size: DISK_SIZE
   storageClassName: robin-block-immediate

更改下列內容:

  • DISK_NAME:這個虛擬機器磁碟的名稱。
  • NAMESPACE:目標虛擬機器的命名空間。
  • IMAGE_FILE_PATH:虛擬機器映像檔的完整路徑和名稱。在 Google Cloud 控制台中對圖片按一下滑鼠右鍵,然後選取「複製 gsutil URI」即可取得這個路徑。
  • KUBERNETES_SERVICEACCOUNT:用於下載您先前建立的虛擬機器映像檔的 Kubernetes ServiceAccount。
  • DISK_SIZE:目標磁碟大小。這個值必須大於虛擬機器映像檔的 virtual-size 值。您可以使用 qemu-img info DISK_SIZE 指令找到這個值。

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

根據儲存在第三方服務的映像檔建立磁碟

您也可以使用 http、https、S3 或映像檔登錄檔,儲存虛擬機器映像檔。如果儲存空間服務需要憑證才能存取,請將憑證轉換為密碼,並使用 secretRef 欄位指定該密碼。

例如:

source:
    http/s3/registry:
       url:
       secretRef: "SECRET_NAME" # optional

將 SECRET_NAME 替換為密鑰名稱。

詳情請參閱「HTTP/S3/GCS/Registry 來源」。

建立空白磁碟

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

 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 Runtime 建立具備特定 CPU 和記憶體資源的 VM」。

VM 的資源分配會受到 Distributed Cloud connected 部署作業的硬體設定檔限制,例如 G1 或 G2 硬體。單一 VM 的大小不得大於執行該 VM 的實體 Distributed Cloud 連線機器。

使用 Google Cloud 控制台建立虛擬機器

如要使用 Google Cloud 控制台建立虛擬機器,請執行下列操作:

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 選取目標 Google Cloud 專案。

  3. (選用) 如果尚未登入,請登入目標叢集:

    1. 按一下左側導覽窗格中的「叢集」。

    2. 在「Anthos Managed Clusters」(Anthos 代管叢集) 清單中,按一下目標叢集。

    3. 在右側的資訊窗格中,按一下「登入」。

    4. 在隨即顯示的彈出式對話方塊中,選取偏好的驗證方式,輸入憑證,然後按一下「登入」。

  4. 前往「Virtual Machines」(虛擬機器) 頁面。

    前往虛擬機器

  5. 點選「建立」。

  6. 在「Basics」(基本) 部分,執行下列操作:

    1. 在「Name」(名稱) 欄位,輸入虛擬機器的有意義名稱。

    2. 在「選取叢集」欄位中,選取虛擬機的目標叢集。

    3. 在「命名空間」欄位中,選取目標命名空間。

    4. 在「OS Type」(作業系統類型) 欄位中,選取目標作業系統。

    5. (選用) 如要為這個虛擬機器的設定新增一或多個標籤,請按一下「新增標籤」。

  7. 在「機器設定」部分,執行下列其中一項操作:

    • 如要為這部虛擬機器指定 vCPU 數量和記憶體容量,請選取「自訂設定」,然後輸入目標值,再按一下「下一步」。

    • 如要為這部虛擬機器使用預先決定的 vCPU 數量和記憶體容量,請選取「標準設定」,然後從「機型」下拉式清單中選取機型設定,再按一下「下一步」。

  8. 在「儲存空間」部分,執行下列其中一項操作:

    • 如要為這個虛擬機器建立新的虛擬磁碟,請選取「新增磁碟」,然後在「名稱」欄位中輸入有意義的名稱、「GiB」欄位中輸入大小 (以 GB 為單位),以及「映像檔」欄位中輸入網址。

    • 如要為這部虛擬機器使用現有的虛擬磁碟,請選取「選取現有磁碟」,然後從「選取磁碟」下拉式清單中選取目標磁碟映像檔。

    • 使用「唯讀」和「自動刪除」核取方塊,指定磁碟是否為唯讀,以及在刪除這個虛擬機器時是否要自動刪除磁碟。

    • 在「Driver」(驅動程式) 下拉式清單中指定虛擬磁碟驅動程式。

    • 如要為這部虛擬機器新增其他磁碟,請在「Additional disks」(其他磁碟) 部分點選「ADD A DISK」(新增磁碟)。

    • 點按「下一步」。

  9. 在「網路」部分,執行下列操作:

    1. 在「預設網路介面」子區段的「介面名稱」欄位中,指定這個虛擬機器的主要網路介面名稱。

    2. 從「網路類型」下拉式選單中選取對應的網路類型。

    3. 使用「允許外部存取」核取方塊,指定是否允許外部存取這個網路介面。啟用這個選項後,您必須在「Exposed ports」(公開連接埠) 欄位中,輸入以半形逗號分隔的公開連接埠清單。

    4. 如要為這部虛擬機器新增一或多個次要網路介面,請按一下「新增網路介面」。

    5. 點按「下一步」。

  10. 在「進階選項」部分,使用「更新後自動重新啟動」核取方塊,指定在目標叢集上的 Distributed Cloud 連線軟體更新後,是否要重新啟動這個虛擬機器。

  11. 在「韌體」部分,執行下列操作:

    1. 在「系統啟動載入程式類型」欄位中,選取目標韌體類型。如果選取 UEFI 韌體,可以勾選「安全啟動」核取方塊,啟用安全啟動功能。

    2. 在「序號」欄位中,為這部虛擬機器指定序號。

    3. 在「UUID」UUID欄位中,為這個虛擬機器指定通用唯一識別碼 (UUID)。

  12. 在「Cloud-init」部分,於「User data secret」欄位中指定使用者資料密鑰值。

  13. 按一下「CREATE VM」(建立 VM) 建立虛擬機器。

從 YAML 檔案建立虛擬機器

如要從 YAML 設定檔建立虛擬機器,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 選取目標 Google Cloud 專案。

  3. (選用) 如果尚未登入,請登入目標叢集:

    1. 按一下左側導覽窗格中的「叢集」。

    2. 在「Anthos Managed Clusters」(Anthos 代管叢集) 清單中,按一下目標叢集。

    3. 在右側的資訊窗格中,按一下「登入」。

    4. 在隨即顯示的彈出式對話方塊中,選取偏好的驗證方式,輸入憑證,然後按一下「登入」。

  4. 前往「Virtual Machines」(虛擬機器) 頁面。

    前往虛擬機器

  5. 點選「使用 YAML 建立」。

  6. 在「選取叢集」欄位中,選取虛擬機的目標叢集。

  7. 將 YAML 格式的虛擬機器設定貼到 YAML 欄位。 如要瞭解支援的 YAML 欄位,請參閱虛擬機器規格參考資料。

  8. 點選「建立」。

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

如要從可開機的磁碟映像檔建立虛擬機器,請將下列設定套用至叢集。如要自訂這項設定 (例如 CPU、記憶體或網路選項),請參閱虛擬機器規格參考資料:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  name: my-virtual-machine
  namespace: NAMESPACE
spec:
  osType: Linux/Windows
  # guestEnvironment: {} # uncomment this line to disable guest environment
  priorityClassName: PRIORITY_CLASS
  compute:
    cpu:
      vcpus: 6
    memory:
      capacity: 8Gi
  interfaces:
    - name: eth0
      networkName: NETWORK_NAME
      ipAddresses:
        - IP_ADDRESS/PREFIX
  disks:
    - virtualMachineDiskName: DISK_NAME
      boot: true
    - virtualMachineDiskName: DISK_NAME

更改下列內容:

  • NAMESPACE:目標命名空間。
  • PRIORITY_CLASS:這個虛擬機器的優先順序類別。優先順序類別是一系列優先順序值。使用 kubectl get priorityclass 查看支援的優先順序類別清單。排程優先順序越高,節點資源受限時,VM 遭逐出的機率就越低。如果省略,虛擬機器會取得預設的最低優先順序值。
  • NETWORK_NAME:要附加 VM 介面的 L2 網路名稱。
  • DISK_NAME:這個虛擬機器的磁碟名稱。
  • vcpus:要指派給 VM 的 vCPU 數量。
  • capacity:要指派給 VM 的記憶體量。例如:4Gi 或 8Gi。
  • ipAddresses:選用,為虛擬機器提供靜態 IP 指派設定。如果底層 L2 網路支援外部 DHCP,您可以省略 ipAddresses,允許動態分配。

使用 cloud-init API 初始化 VM

cloud-init API 是初始化雲端 VM 的標準方式。使用 cloud-init 設定 VM 的檔案、使用者和其他方面。

為確保相容性,請驗證cloud-init啟動常式。在正式環境中使用設定前,請先將設定套用至測試 VM,確保設定能順利初始化。

以下範例為一般情況,請務必在您的環境中測試。

使用cloud-init使用者資料自動設定 VM

GDC 中的 VM 執行階段支援 Linux VM 的cloud-init使用者資料。 您可以將使用者資料指定為純文字字串、Base64 編碼字串,或參照 Kubernetes Secret。

為確保 VM 正確初始化,請先驗證所有使用者資料設定,再將其部署至正式環境。

以下範例顯示 VirtualMachine 資訊清單,其中包含純文字 cloud-init 使用者資料,可在 VM 啟動時執行指令:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  name: VM_NAME
spec:
  compute:
    cpu:
      vcpus: 2
    memory:
      capacity: 4Gi
  osType: Linux
  cloudInit:
    noCloud:
      userData: |
        #cloud-config
        runcmd:
          - echo "Hello World" > /tmp/hello.txt

將 VM_NAME 替換為虛擬機器的名稱。

如要使用 cloud-init 資料建立 VM,請將資訊清單儲存為 vm-cloud-init.yaml,然後執行 kubectl apply 指令,將資訊清單套用至叢集:

kubectl apply -f vm-cloud-init.yaml

疑難排解 cloud-init

如果遇到 cloud-init 相關問題,請檢查 VM 內的記錄。您通常可以在下列目錄中找到記錄:

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log

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

您可以使用 GDC 上的 VM 執行階段,建立從 ISO 映像檔開機的 Windows 虛擬機器 (VM)。這項功能可讓您將舊版 Windows 企業應用程式、專用第三方軟體或自訂銷售點系統,直接遷移至 Distributed Cloud 連線叢集。

用於 VM 磁碟的映像檔會從 Distributed Cloud 連線映像檔 bucket 匯入。建立資訊清單前,請先下載 Windows 安裝 ISO 和 KubeVirt virtio 驅動程式 ISO,然後上傳至映像檔 bucket。建議您在內部存放區中保留經過驗證的驅動程式 ISO 副本,或在 Cloud Storage 中預先暫存,確保虛擬機器建構作業可重複執行且穩定可靠。

建立資訊清單

如要從 Windows ISO 映像檔開機,您需要下列資訊清單:

  • 包含 Windows ISO 的 VirtualMachineDisk。
  • 包含 KubeVirt Windows virtio 驅動程式的 VirtualMachineDisk。
  • 一個空白的 VirtualMachineDisk,做為安裝 Windows 的開機磁碟。

以下範例顯示三個必要磁碟的 VirtualMachineDisk 資訊清單。

在資訊清單中,請替換下列項目:

  • BUCKET_PROJECT_ID:圖片 bucket 所在的專案 ID。
  • KUBERNETES_SERVICEACCOUNT:有權從儲存空間讀取的 Kubernetes ServiceAccount。

資訊清單中要求的 PVC size 必須一律大於或等於 ISO 的確切虛擬大小。

Windows ISO 磁碟

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineDisk
metadata:
  name: windows-iso
spec:
  size: 10Gi
  storageClassName: robin-block-immediate
  diskType: cdrom
  source:
    gcs:
      url: gs://BUCKET_PROJECT_ID-vm-images/windows.iso
      serviceAccount: KUBERNETES_SERVICEACCOUNT

VirtIO 驅動程式磁碟

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineDisk
metadata:
  name: virtio-driver
spec:
  size: 1Gi
  storageClassName: robin-block-immediate
  diskType: cdrom
  source:
    gcs:
      url: gs://BUCKET_PROJECT_ID-vm-images/virtio-win.iso
      serviceAccount: KUBERNETES_SERVICEACCOUNT

空白開機磁碟

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineDisk
metadata:
  name: windows-vm-boot-dv
spec:
  size: 40Gi
  storageClassName: robin-block-immediate

建立磁碟

如要建立這些磁碟,請儲存 VirtualMachineDisk 資訊清單,然後執行 kubectl apply 指令,將資訊清單套用至叢集:

kubectl apply -f windows-iso.yaml
kubectl apply -f virtio-driver.yaml
kubectl apply -f windows-vm-boot-dv.yaml

建立 Windows VM

如要建立 Windows VM,請建立定義 VM 並參照磁碟的資訊清單。VM 會從 ISO 磁碟開機,開始安裝程序。

以下範例顯示 VirtualMachine 資訊清單:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
  labels:
    kubevirt.io/vm: windows-vm
  name: windows-vm
spec:
  osType: Windows
  disks:
    - virtualMachineDiskName: windows-vm-boot-dv
      boot: true
    - virtualMachineDiskName: windows-iso
    - virtualMachineDiskName: virtio-driver
  compute:
    cpu:
      vcpus: 2
    memory:
      capacity: 4Gi
  interfaces:
    - name: eth0
      networkName: NETWORK_NAME
      default: true
      ipAddresses:
        - IP_ADDRESS/PREFIX

如要建立 VM,請將資訊清單儲存為 windows-vm.yaml,然後執行 kubectl apply 指令,將資訊清單套用至叢集:

kubectl apply -f windows-vm.yaml

連線並完成安裝

如要連線並完成安裝,請按照下列步驟操作:

  1. 如要使用 VNC 連線至 VM,請使用 virtctl 工具或 kubectl virt 外掛程式:

    virtctl vnc windows-vm
    

    或者,如果您將 virtctl 安裝為 kubectl 外掛程式:

    kubectl virt vnc windows-vm
    

    如要進一步瞭解 virtctl,請參閱 KubeVirt 說明文件。

  2. 按照 Windows 安裝程式顯示的指示操作。出現提示時,選取「自訂安裝」。

  3. 系統提示時,請載入儲存裝置和網路的 virtio 驅動程式,並瀏覽所連線的 virtio-driver 磁碟。

  4. 完成安裝程序。

透過遠端桌面通訊協定存取

在客體 OS 中安裝並啟用遠端桌面通訊協定 (RDP) 後,即可透過 RDP 存取 VM。

由於虛擬機器已附加至 L2 網路,因此可使用指派的 IP 位址 (例如 10.223.237.10),直接從叢集外部連線。使用 RDP 用戶端連線至通訊埠 3389 上的這個 IP 位址。確認可透過公司防火牆和路由規則,從用戶端電腦連線至 L2 內部 IP 位址。

建立支援 GPU 的虛擬機器

請按照本頁所述步驟建立虛擬機器,並根據業務需求進行設定,然後完成「設定虛擬機器以使用 GPU 資源」一文中的步驟。

虛擬機器規格參考資料

下表說明 VirtualMachine 規格中的重要欄位。設定虛擬機器 YAML 資訊清單時,請使用這些欄位,透過 kubectl apply 套用至叢集,或在 Google Cloud 控制台使用「Create with YAML」(使用 YAML 建立) 選項。

欄位 說明 必填
apiVersion 必須為 vm.cluster.gke.io/v1。 必填
kind 必須為 VirtualMachine。 必填
metadata.name 虛擬機器的專屬名稱。 必填
metadata.namespace VM 執行的 Kubernetes 命名空間。 必填
spec.osType 客體作業系統類型。支援的值:Linux 和 Windows。 必填
spec.guestEnvironment 設定訪客環境。如果省略,系統預設會啟用訪客環境。如要停用,請設為 {}。 選用
spec.priorityClassName VM 的優先順序類別。優先順序越高,遭逐出的機率就越低。 選用
spec.compute 設定 VM 的運算資源。 必填
spec.compute.cpu.vcpus 要分配的 vCPU 數量。可接受的值為 1 至 96。 必填
spec.compute.memory.capacity 記憶體容量,例如 8Gi。 必填
spec.interfaces VM 的網路介面清單。 必填
spec.interfaces[].name 介面名稱,例如 eth0。 必填
spec.interfaces[].networkName 要連線的子網路名稱,對應至叢集中的 Network 資源。 必填
spec.interfaces[].ipAddresses 要指派給這個介面的靜態 IP 位址。如果子網路未啟用 DHCP,您必須指定靜態 IP 位址。 選用
spec.disks 要連接至 VM 的磁碟清單。 必填
spec.disks[].virtualMachineDiskName VirtualMachineDisk 資源的名稱。 必填
spec.disks[].boot 將開機磁碟設為 true。只能將一個磁碟標示為可開機。 選用

存取虛擬機器

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

直接存取的網路需求

如要直接從本機網路存取虛擬機器,而不使用 Kubernetes LoadBalancer 服務,您必須設定邏輯和實體網路元件。Distributed Cloud Connected 會自動管理叢集內網路資源,但您需要設定外部網路和 VM 介面。

  1. 設定子網路 (VLAN):使用 Distributed Cloud Edge Network API、gcloud 或 API,建立具有特定 VLAN ID 的子網路。Distributed Cloud connected 會自動將這項設定同步至叢集。您不需要手動建立 Kubernetes 網路資源。請參閱「建立及管理子網路」。

  2. 設定本機網路:網路管理員必須設定連線至 Distributed Cloud 連結伺服器的實體交換器和路由器,以便:

    • 允許交換器連接埠上設定的 VLAN ID (VLAN 中繼)。
    • 啟用本機網路與子網路之間的路由。如果已在 Distributed Cloud 連線路由器上設定邊界閘道通訊協定 (BGP) (動態路由通訊協定),系統會在建立子網路後自動宣傳這些路由。否則,您必須在實體路由器上設定靜態路由,將子網路 IP 範圍 (CIDR) 的流量路由至 Distributed Cloud 連線節點。
  3. 設定 VM 介面:在 VirtualMachine YAML 設定中,於 spec.interfaces 欄位指定網路名稱,將 VM 設定為使用這個子網路。詳情請參閱「虛擬機器規格參考資料」。

取得 Linux VM 的存取憑證

如果沒有存取虛擬機器的憑證,請完成本節中的步驟,使用 Linux 客體環境功能取得憑證。

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

    kind: VirtualMachine
    metadata:
     name: my-virtual-machine
     namespace: my-vm-namespace
    spec:
     osType: Linux
     guestEnvironment: // enabled by default; disable with guestEnvironment: {}
       accessManagement:
        enable: 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 檔案內容。
  4. 如要查看存取要求狀態,請執行 kubectl get 指令:

    kubectl get vmar
    

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

  5. 透過 SSH 存取虛擬機器。如果虛擬機器已連上本機網路,請使用 SSH 直接存取:

    ssh USERNAME@VM_IP_ADDRESS -i PATH_TO_KEY

    更改下列內容:

    • USERNAME:用來登入的使用者名稱,例如在 VirtualMachineAccessRequest 資源中設定的使用者。
    • VM_IP_ADDRESS:虛擬機器的 IP 位址。
    • PATH_TO_KEY:與先前步驟中產生的公開金鑰對應的安全殼層私密金鑰路徑。

使用 RDP 存取 Windows VM

如要透過遠端桌面通訊協定 (RDP) 從本機網路存取 Windows VM,請在客體 OS 中啟用 RDP,確保 VM 可透過網路存取,並設定使用者憑證。

必要條件

在 Windows 中啟用 RDP:必須在 Windows 客戶作業系統中啟用 RDP。 如果尚未啟用 RDP,請使用虛擬網路運算 (VNC) 控制台直接存取 VM 畫面並啟用 RDP。kubectl virt vnc指令會在您的本機工作站開啟圖形檢視器視窗,且需要安裝在工作站上的 VNC 檢視器用戶端,例如 Remote Viewer 或 VNC Viewer:

kubectl virt vnc VM_NAME -n NAMESPACE

更改下列內容:

  • VM_NAME:Windows VM 的名稱。
  • NAMESPACE:VM 的命名空間。

使用遠端桌面協定連線

  1. 如要取得 VM 的 IP 位址,請執行 kubectl get 指令:

    kubectl get vmi VM_NAME -n NAMESPACE -o jsonpath='{.status.interfaces[*].ipAddress}'

    更改下列內容:

    • VM_NAME:Windows VM 的名稱。
    • NAMESPACE:VM 的命名空間。

    記下輸出內容中屬於已路由子網路的 IP 位址。

  2. 使用標準 RDP 用戶端 (例如 Windows 上的遠端桌面連線或 Linux 上的 Remmina),連線至通訊埠 3389 上的擷取 IP 位址。

  3. 使用使用者名稱和密碼登入。

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

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

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

更改下列內容:

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

使用 Google Cloud 控制台啟動或停止虛擬機器

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 選取目標 Google Cloud 專案。

  3. (選用) 如果尚未登入,請登入目標叢集:

    1. 按一下左側導覽窗格中的「叢集」。

    2. 在「Anthos Managed Clusters」(Anthos 代管叢集) 清單中,按一下目標叢集。

    3. 在右側的資訊窗格中,按一下「登入」。

    4. 在隨即顯示的對話方塊中,選取偏好的驗證方式,輸入憑證,然後按一下「登入」。

  4. 前往「Virtual Machines」(虛擬機器) 頁面。

    前往虛擬機器

  5. 在虛擬機器清單中,選取目標虛擬機器的核取方塊。

  6. 按一下頁面頂端的「開始」或「停止」。

使用 Google Cloud 控制台查看虛擬機器的狀態

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 選取目標 Google Cloud 專案。

  3. (選用) 如果尚未登入,請登入目標叢集:

    1. 按一下左側導覽窗格中的「叢集」。

    2. 在「Anthos Managed Clusters」(Anthos 代管叢集) 清單中,按一下目標叢集。

    3. 在右側的資訊窗格中,按一下「登入」。

    4. 在隨即顯示的彈出式對話方塊中,選取偏好的驗證方式,輸入憑證,然後按一下「登入」。

  4. 前往「Virtual Machines」(虛擬機器) 頁面。

    前往虛擬機器

  5. 按一下目標虛擬機器。

  6. 在隨即顯示的頁面中,按一下「詳細資料」、「事件」和「YAML」分頁標籤,即可查看這部虛擬機器的相關資訊。

修改虛擬機器

如要修改虛擬機器,請刪除並使用更新後的設定重新建立。

使用 Google Cloud 控制台刪除虛擬機器

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 選取目標 Google Cloud 專案。

  3. (選用) 如果尚未登入,請登入目標叢集:

    1. 按一下左側導覽窗格中的「叢集」。

    2. 在「Anthos Managed Clusters」(Anthos 代管叢集) 清單中,按一下目標叢集。

    3. 在右側的資訊窗格中,按一下「登入」。

    4. 在隨即顯示的對話方塊中,選取偏好的驗證方式,輸入憑證,然後按一下「登入」。

  4. 前往「Virtual Machines」(虛擬機器) 頁面。

    前往虛擬機器

  5. 在虛擬機器清單中,勾選目標虛擬機器的核取方塊。

  6. 按一下頁面頂端的「刪除」。

  7. 在隨即顯示的確認對話方塊中,輸入虛擬機器的名稱,然後按一下「DELETE」(刪除)。

後續步驟