在 GDC 的 VM Runtime 中編輯 VM 設定

有了 GDC 的 VM 執行階段,您就能在工作負載需求變更時,編輯虛擬機器 (VM) 設定,例如運算資源、連接的磁碟和網路設定。

您可以更新 VirtualMachine 資源 spec 區段中的任何欄位,並修改 VM 標籤,但無法變更其他欄位,例如 VM 名稱 (metadata.name)。根據預設,VM 必須處於 Stopped 狀態,才能編輯。您可以設定 VM 在設定變更時自動重新啟動。

事前準備

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

編輯運算資源

如果運算工作負載需求有所變更,您可以更新指派給 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 狀態,請檢查 VirtualMachine 和 VirtualMachineDisk 資源資訊清單,以及主機儲存空間支援。

  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 資訊清單範例顯示 VM 連線至名為 backend-vlan100 的網路,並使用 DHCP,因為未定義 IP 位址:

    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。VM Runtime on GDC 會監控 VM,如果偵測到設定變更,就會自動重新啟動 VM,同步處理變更。

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

如要啟用自動重新啟動功能,請按照下列步驟操作:

  1. 使用 kubectl 編輯 VM:

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

    您可以對 VM 進行其他變更,例如更新 vcpus 值。如果您編輯 compute 設定,GDC VM 執行階段會在您儲存變更時自動重新啟動 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 執行階段無法偵測先前的落差。

排解 VM 編輯問題

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

後續步驟