本文適用於應用程式擁有者,他們使用 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。如有需要,請在裸機叢集中建立 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 位址,虛擬機器會連線至名為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 執行階段無法偵測先前的差異。