本文適用於應用程式擁有者,他們使用 GDC 的 VM Runtime,在以 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。如有需要,請在裸機叢集中建立 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資訊清單範例顯示,由於未定義 IP 位址,VM 會連線至名為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。儲存並關閉 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。GDC 上的 VM 執行階段會監控 VM,如果偵測到設定變更,就會自動重新啟動 VM,以同步變更。
如果您使用 Config Sync 管理 YAML 設定檔,這項功能就特別實用。如果沒有這項功能,您必須先手動停止 VM,才能變更 VirtualMachine 自訂資源,並在完成變更後手動啟動 VM。
如要啟用自動重新啟動功能:
使用
kubectl編輯 VM:kubectl edit gvm VM_NAME在編輯器中新增
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 ...儲存並關閉 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 執行階段無法偵測先前的差異。