有了 GDC 的 VM 執行階段,您就能在工作負載需求變更時,編輯虛擬機器 (VM) 設定,例如運算資源、連接的磁碟和網路設定。
您可以更新 VirtualMachine 資源 spec 區段中的任何欄位,並修改 VM 標籤,但無法變更其他欄位,例如 VM 名稱 (metadata.name)。根據預設,VM 必須處於 Stopped 狀態,才能編輯。您可以設定 VM 在設定變更時自動重新啟動。
事前準備
如要完成這份文件,您必須存取下列資源:
- 在其中一個叢集內執行的 VM。如有需要,請在 Bare Metal 叢集中建立 VM。
virtctl用戶端工具已安裝為kubectl的外掛程式。如有需要,請安裝 virtctl 用戶端工具。
編輯運算資源
如果運算工作負載需求有所變更,您可以更新指派給 VM 的虛擬 CPU 數量和虛擬記憶體容量。如要編輯運算工作負載,請完成下列步驟:
停止要編輯的 VM:
kubectl virt stop VM_NAME將
VM_NAME替換為要停止的 VM 名稱。使用
kubectl編輯 VM:kubectl edit gvm VM_NAME將
VM_NAME替換為要編輯的 VM 名稱。在編輯器中,更新要變更的運算資源值。
舉例來說,下列
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 ...儲存並關閉 VM 資訊清單。
啟動編輯過的 VM:
kubectl virt start VM_NAME將
VM_NAME替換為您編輯的 VM 名稱。檢查 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使用
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 的磁碟,請完成下列步驟:
停止要編輯的 VM:
kubectl virt stop VM_NAME將
VM_NAME替換為要停止的 VM 名稱。使用
kubectl編輯 VM:kubectl edit gvm VM_NAME將
VM_NAME替換為要編輯的 VM 名稱。在編輯器中更新
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替換為要連接的磁碟名稱。儲存並關閉 VM 資訊清單。
啟動編輯過的 VM:
kubectl virt start VM_NAME將
VM_NAME替換為您編輯的 VM 名稱。檢查 VM 的
STATUS:kubectl get gvm VM_NAME確認 VM 處於
Running狀態。如果 VM 要求的StorageClass或磁碟指派項目是主機無法提供的,VM 就無法啟動。如果 VM 未處於Running狀態,請檢查VirtualMachine和VirtualMachineDisk資源資訊清單,以及主機儲存空間支援。使用
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 的網路設定,請完成下列步驟:
停止要編輯的 VM:
kubectl virt stop VM_NAME將
VM_NAME替換為要停止的 VM 名稱。使用
kubectl編輯 VM:kubectl edit gvm VM_NAME將
VM_NAME替換為要編輯的 VM 名稱。在編輯器中,更新要變更的網路設定。
舉例來說,下列
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。儲存並關閉 VM 資訊清單。
啟動編輯過的 VM:
kubectl virt start VM_NAME將
VM_NAME替換為您編輯的 VM 名稱。檢查 VM 的
STATUS:kubectl get gvm VM_NAME確認 VM 處於
Running狀態。如果 VM 要求的網路連線是主機無法提供的,VM 就無法啟動。如果 VM 不是處於Running狀態,請檢查VirtualMachine資源資訊清單和主機網路支援。使用
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。
如要啟用自動重新啟動功能,請按照下列步驟操作:
使用
kubectl編輯 VM:kubectl edit gvm VM_NAME在編輯器中新增
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 ...儲存並關閉 VM 資訊清單。
如果您對 VM 進行任何其他變更,且需要與對應的 VM 執行個體同步,GDC 上的 VM 執行階段會重新啟動 VM。如果只是變更為啟用自動重新啟動,則不必重新啟動 VM。
檢查 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 指令查看疑難排解資訊並修正錯誤。