在 GDC 的 VM 執行階段中編輯 VM 設定

本文適用於應用程式擁有者,他們使用 GDC 的 VM Runtime 在 Bare Metal 上,以 Google Distributed Cloud (僅限軟體) 建立的叢集中執行虛擬機器 (VM)。本文說明如何編輯在裸機叢集中執行的 VM。舉例來說,您可以編輯資源分配 (例如 CPU 和記憶體),或變更 VM 連線的網路。

您可以修改 VirtualMachine 資源的 spec 區段中任何欄位。 您也可以編輯 VM 的標籤。其他欄位 (例如 VM 名稱 metadata.name) 則無法編輯。根據預設,您必須先將 VM 設為 Stopped 狀態,才能編輯資源。不過,從 Google Distributed Cloud 1.13.0 版開始,您可以在變更設定時,將 VirtualMachine 資源設定為自動重新啟動

如果儲存對 VirtualMachine 資源的編輯內容時發生錯誤,系統會拒絕變更並顯示通知。請修正錯誤,然後再嘗試儲存 VirtualMachine 資源。如果 VM 在您進行變更後無法啟動,請使用 kubectl describe gvm VM_NAME 指令查看疑難排解資訊,並修正錯誤。

事前準備

如要完成這份文件,您必須存取下列資源:

編輯運算資源

如果運算工作負載需求有變,您可以更新指派給 VM 的虛擬 CPU 數量和虛擬記憶體容量。如要編輯運算工作負載,請完成下列步驟:

  1. 停止要編輯的 VM:

    kubectl virt stop VM_NAME
    

    VM_NAME 替換為要停止的 VM 名稱。

  2. 使用 kubectl 編輯 VM:

    kubectl edit gvm VM_NAME
    

    VM_NAME 替換為要編輯的 VM 名稱。

  3. 在編輯器中,更新要變更的運算資源值。

    舉例來說,下列 VirtualMachine 資訊清單範例顯示 VM 資源已指派 2 個 vCPU:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 2
    ...
    

    如要更新指派的 vCPU 數量,請在編輯器中變更值,如下例所示:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 4
    ...
    
  4. 儲存並關閉 VM 資訊清單。

  5. 啟動您編輯的 VM:

    kubectl virt start VM_NAME
    

    VM_NAME 替換為您編輯的 VM 名稱。

  6. 檢查 VM 的 STATUS

    kubectl get gvm VM_NAME
    

    確認 VM 處於 Running 狀態。如果 VM 要求的運算資源超出主機可提供的量,VM 就無法啟動。如果 VM 不處於 Running 狀態,請檢查 VirtualMachine 資源資訊清單和主機上的運算資源可用性。

    以下輸出範例顯示 VM 處於 Running 狀態:

    NAME   STATUS    AGE   IP
    vm1    Running   1m    192.168.2.72
    
  7. 使用 kubectl describe gvm 查看 VM 的詳細資訊:

    kubectl describe gvm VM_NAME
    

    VM_NAME 替換為您編輯的 VM 名稱。

    以下範例輸出內容顯示 VM 的簡要資訊,且已成功套用 vCPU 數量變更:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
        Cpu:
          Vcpus:  4
    ...
    

詳情請參閱如何建立具有特定 vCPU 和記憶體運算設定的 VM

編輯磁碟資源

如果儲存空間需求有變,您可以為 VM 新增或移除虛擬磁碟。如要編輯連結至 VM 的磁碟,請完成下列步驟:

  1. 停止要編輯的 VM:

    kubectl virt stop VM_NAME
    

    VM_NAME 替換為要停止的 VM 名稱。

  2. 使用 kubectl 編輯 VM:

    kubectl edit gvm VM_NAME
    

    VM_NAME 替換為要編輯的 VM 名稱。

  3. 在編輯器中,更新 spec.disks 區段來連結或取消連結磁碟。

    舉例來說,下列範例 VirtualMachine 資訊清單顯示只有開機磁碟連結至 VM:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
      ...
    

    如要新增現有的空白磁碟,請在編輯器中更新磁碟設定,如下列範例所示:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
        - virtualMachineDiskName: DISK_NAME
      ...
    

    DISK_NAME 替換為要連結的磁碟名稱。

  4. 儲存並關閉 VM 資訊清單。

  5. 啟動您編輯的 VM:

    kubectl virt start VM_NAME
    

    VM_NAME 替換為您編輯的 VM 名稱。

  6. 檢查 VM 的 STATUS

    kubectl get gvm VM_NAME
    

    確認 VM 處於 Running 狀態。如果 VM 要求主機無法提供的 StorageClass 或磁碟指派,VM 就無法啟動。如果 VM 不處於 Running 狀態,請檢查 VirtualMachineVirtualMachineDisk 資源資訊清單,以及主機儲存空間支援。

  7. 使用 kubectl describe gvm 查看 VM 的詳細資訊:

    kubectl describe gvm VM_NAME
    

    VM_NAME 替換為您編輯的 VM 名稱。

    以下範例輸出內容顯示 VM 的精簡資訊,其中附加磁碟的變更已成功套用:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Disks:
        Name:  vm1-boot-dv
        Name:  data-disk-01
    ...
    

詳情請參閱建立及管理磁碟

編輯網路資源

基礎架構變更時,您可能需要變更 VM 的網路設定。舉例來說,您可能想將 VM 連線至其他虛擬網路,或是手動指派 IP 位址。如要編輯 VM 的網路設定,請完成下列步驟:

  1. 停止要編輯的 VM:

    kubectl virt stop VM_NAME
    

    VM_NAME 替換為要停止的 VM 名稱。

  2. 使用 kubectl 編輯 VM:

    kubectl edit gvm VM_NAME
    

    VM_NAME 替換為要編輯的 VM 名稱。

  3. 在編輯器中,更新要變更的網路設定。

    舉例來說,下列 VirtualMachine 資訊清單範例顯示,由於未定義 IP 位址,虛擬機器會連線至名為 backend-vlan100 的網路,並使用 DHCP:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: backend-vlan100
          default: true
    ...
    

    如要變更 VM 連線的網路或手動指派 IP 位址,請在編輯器中更新網路設定,如下列範例所示:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
            ipAddresses:
              - IP_ADDRESS
          default: true
    ...
    

    NETWORK_NAME 替換為要連線的網路名稱,或新增 ipAddresses 區段並指定 VM 要使用的 IP_ADDRESS

  4. 儲存並關閉 VM 資訊清單。

  5. 啟動您編輯的 VM:

    kubectl virt start VM_NAME
    

    VM_NAME 替換為您編輯的 VM 名稱。

  6. 檢查 VM 的 STATUS

    kubectl get gvm VM_NAME
    

    確認 VM 處於 Running 狀態。如果 VM 要求主機無法提供的網路連線,VM 就無法啟動。如果 VM 不處於 Running 狀態,請檢查 VirtualMachine 資源資訊清單和主機網路支援。

  7. 使用 kubectl describe gvm 查看 VM 的詳細資訊:

    kubectl describe gvm VM_NAME
    

    VM_NAME 替換為您編輯的 VM 名稱。

    以下範例輸出內容顯示 VM 的簡要資訊,且網路和 IP 位址設定已成功套用變更:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
      Interfaces:
        Name:          eth0
        Network Name:  backend-vlan200
    ...
    Status:
      ...
      Interfaces:
        Dns Config:
          Nameservers:
            8.8.8.8
        gateway4:  10.200.0.9
        Ip Addresses:
          10.200.0.22/24
        Mac Address:    22:b4:e3:d2:ef:fb
        Name:           eth0
        Resource Name:  vm1-eth0-f2468
    ...
    

詳情請參閱「建立及管理虛擬網路」。

設定 VM 自動重新啟動

許多 VM 設定變更 (例如變更 compute 設定) 都需要停止並重新啟動 VM,變更才會與對應的 VM 執行個體 (VirtualMachineInstance) 同步。在 1.13.0 以上版本的叢集中執行的 VM,可以設定為在您變更設定時自動重新啟動。設定 VM 使用這項功能時,編輯自訂資源時不需要停止並重新啟動 VM。GDC 上的 VM 執行階段會監控 VM,如果偵測到設定變更,就會自動重新啟動 VM 來同步變更。

如果您使用 Config Sync 管理 YAML 設定檔,這項功能就特別實用。如果沒有這項功能,您必須先手動停止 VM,才能對 VirtualMachine 自訂資源進行任何變更,並在完成變更後手動啟動 VM。

如要啟用自動重新啟動功能:

  1. 使用 kubectl 編輯 VM:

    kubectl edit gvm VM_NAME
    
  2. 在編輯器中新增 autoRestartOnConfigurationChange 欄位,並將其設為 true

    您可以對 VM 進行其他變更,例如更新vcpus 值。如果您編輯 compute 設定,儲存變更時,GDC 上的 VM Runtime 會自動重新啟動 VM。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      ...
      name: vm-sample-01
      namespace: default
      resourceVersion: "16711824"
      uid: ed623879-0cfa-52de-ad2c-b63308e6116c
    spec:
      autoRestartOnConfigurationChange: true
      compute:
        cpu:
          vcpus: 2
          ...
    
  3. 儲存並關閉 VM 資訊清單。

    如果您對 VM 進行任何其他變更,需要與對應的 VM 執行個體同步處理,GDC 上的 VM 執行階段會重新啟動 VM。如果您只變更了自動重新啟動設定,則不需要重新啟動 VM。

  4. 檢查 VM 的 status

    kubectl get gvm VM_NAME
    

    視取得 VM 的速度而定,您可能會在 VM 重新啟動時看到 state: Starting。VM 重新啟動成功後,您會看到 state: Running。後續對 VirtualMachine 自訂資源的設定變更,不需要手動停止及啟動 VM。後續對自訂資源所做的變更,都會反映在 VM 執行個體中。

請注意下列情境式功能行為:

  • 如果您在編輯 VirtualMachine 自訂資源前手動停止 VM,設定變更不會觸發重新啟動。系統會保留設定變更前 VM 的停止狀態。

  • 如果您在啟用自動重新啟動功能前,已對 VM 進行標籤或排程變更,現在新增 autoRestartOnConfigurationChange 而未進行任何其他變更,不會觸發重新啟動。這項功能可讓 VM 執行個體與 VM 設定保持一致。不過,GDC 上的 VM 執行階段無法偵測先前的差異。

後續步驟