本文說明如何更新 VMRuntime
自訂資源或執行 bmctl
指令,在 Google Distributed Cloud 上啟用或停用 VM 執行階段。
事前準備
如要在 GDC 上啟用或停用 VM Runtime,您需要存取下列資源和工具:
- 存取 Google Distributed Cloud 1.12.0 版 (
anthosBareMetalVersion: 1.12.0
) 以上的叢集。您可以使用任何可執行工作負載的叢集類型。如有需要,請在 Compute Engine 上試用 Google Distributed Cloud,或參閱叢集建立總覽。 bmctl
指令列工具。詳情請參閱「下載及安裝bmctl
工具」。
在 GDC 上啟用 VM Runtime
Google Distributed Cloud 1.10 以上版本會自動安裝 GDC 的 VM Runtime,但預設為停用。您必須先在 Google Distributed Cloud 上啟用 VM Runtime,才能執行 VM 資源。
bmctl
如要啟用執行階段,請使用
bmctl
工具:bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
提供叢集的 kubeconfig 檔案路徑。 建立叢集時,Google Distributed Cloud 會在管理工作站產生 kubeconfig 檔案。預設路徑為
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
。如果已啟用 VM Runtime on GDC,指令會傳回錯誤。
如要設定其他項目 (例如模擬或圖片格式),請編輯 VMRuntime
自訂資源。
自訂資源
如要啟用執行階段,請更新 VMRuntime
自訂資源。這項自訂資源預設會安裝。
編輯
VMRuntime
自訂資源:kubectl edit vmruntime
在規格中設定
enabled:true
:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation defaults to "false" if not set. useEmulation: true # vmImageFormat defaults to "qcow2" if not set. vmImageFormat: qcow2
在上述
spec
區段中,可以設定下列值:enabled
:設為 true,即可在 GDC 上啟用 VM 執行階段useEmulation
:如果節點不支援硬體虛擬化,或您不確定,請將值設為 true。如果可以,硬體虛擬化比軟體模擬效能更佳。如未指定,useEmulation
欄位預設為false
。vmImageFormat
:支援兩個磁碟映像檔格式值:raw
和qcow2
。如果未設定vmImageFormat
,GDC 上的 VM 執行階段會使用raw
磁碟映像檔格式建立 VM。raw
格式的效能可能優於qcow2
(寫入時複製格式),但可能會佔用更多磁碟空間。如要進一步瞭解 VM 的映像檔格式,請參閱 QEMU 說明文件中的「磁碟映像檔格式」。
在編輯器中儲存自訂資源。
確認已啟用
VMRuntime
自訂資源:kubectl describe vmruntime vmruntime
VMRuntime
自訂資源的詳細資料包括Status
區段。 當VMRuntime.Status.Ready
顯示為true
時,表示 GDC 的 VM Runtime 已啟用並正常運作。
在 GDC 上停用 VM Runtime
如果不再需要使用 VM Runtime on GDC,可以停用這項功能。
bmctl
如要停用執行階段,請使用
bmctl
工具:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --force=true
提供叢集的 kubeconfig 檔案路徑,以及下列設定選項的值:
--force
:設為true
,確認要刪除現有 VM 資源。預設值為false
。
自訂資源
如要停用執行階段,請更新 VMRuntime
自訂資源:
編輯
VMRuntime
自訂資源:kubectl edit vmruntime
在規格中設定
enabled:false
:apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2
在編輯器中儲存更新後的自訂資源規格。
如要確認
VMRuntime
自訂資源已停用,請查看vm-system
命名空間中執行的 Pod:kubectl get pods --namespace vm-system
如果命名空間中只執行屬於
vmruntime-controller-manager
部署作業的 Pod,系統就會停用 GDC 上的 VM Runtime。
瞭解執行 VM 的行為
在 GDC 資源的 VM 執行階段上,可以使用 baremetal.cluster.gke.io/vmrumtime-force-disable
註解,定義在叢集中執行 VM 時停用執行階段的行為。
以下範例顯示這項註解的值預設為 false
:
// VM runtime yaml file
apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
annotations:
baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
name: vmruntime
[...]
如果將這個註解設為 false
,GDC 上的 VM Runtime 會嘗試保護正在執行的 VM。停用 GDC 上的 VM Runtime 之前,請先刪除所有正在執行的 VM,或使用 bmctl disable vmruntime
指令指定 --force=true
參數,如上一節所示。
下表說明將此註解設為 true
或 false
時,執行中 VM 的情況,以及您是否指定 --force=true
參數:
叢集狀態 | --force 參數 | vmrumtime-force-disable 註解 | 行為 |
---|---|---|---|
沒有任何 VM | 不適用 | 不適用 | 在 GDC 上停用 VM Runtime。 |
現有 VM | True | 是 | 刪除所有執行中的 VM 和相關資源。在 GDC 上停用 VM Runtime。 |
True | 否 | 刪除所有執行中的 VM 和相關資源。在 GDC 上停用 VM Runtime。 | |
False | 是 | 系統會提示您刪除執行中的 VM 和相關資源。刪除所有執行中的 VM 後,請在 GDC 上停用 VM Runtime。 | |
False | 否 | 請勿刪除任何正在執行的現有 VM。請勿停用 GDC 上的 VM Runtime。bmctl 指令會傳回錯誤。 |
GDC 預檢的 VM 執行階段
在 GDC 上使用 VM 執行階段和 VM 前,GDC 預檢會驗證機器環境中的一組必要條件。如果 GDC 預檢的 VM Runtime 失敗,系統會封鎖 VM 建立作業。當 spec.enabled
設為 true 時,系統會自動執行 GDC 預檢的 VM 執行階段。
kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH
執行下列任一作業時,系統會執行 GDC 預檢的 VM 執行階段檢查:
在 GDC 上啟用 VM Runtime
啟用 VM Runtime on GDC 功能,例如 useEmulation
升級叢集
移除節點的「
kubevm.io/VM-SkipSchedule
」標籤執行
bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH
指令或套用VMRuntimePreflightCheck
YAML 資訊清單,獨立建立 VM Runtime on GDC 前置檢查物件。
如果最新版 VM Runtime on GDC 預檢成功,您就可以啟動 VM。如果預檢失敗,系統會封鎖 VM 建立作業,並顯示預檢錯誤。
確認預檢成功
如要確認預檢是否成功,請執行下列指令:
找出上次執行的預檢:
kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
輸出內容應如下列範例所示:
NAME PASS AGE vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e false 42s vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 true 21s
如要查看前置檢查的狀態,請執行下列指令:
kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
... preflightCheckSummary: preflightCheckSummary: featureStatuses: CPU: passed: true KVM: passed: true preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 preflightCheckPassed: true ...
偵錯預檢失敗
如果前置檢查失敗,請按照下列步驟進行偵錯:
找出上次執行的預檢。
kubectl get vmruntimepfc -n vm-system
如要瞭解詳情,請查看該項前置檢查的狀態。
kubectl get vmruntimepfc -n vm-system \ vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \ --kubeconfig KUBECONFIG_PATH
... status: checks: worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos: passed: false results: - checkName: CPU passed: true - checkName: KVM message: | command terminated with exit code 1 ls: /mnt/dev/kvm: No such file or directory passed: false ...
修正問題,然後再次執行 GDC 預檢的 VM Runtime。以下範例顯示 VMRuntimePreflightCheck YAML 資訊清單:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntimePreflightCheck metadata: name: vmruntime-preflight-check-manual namespace: vm-system