搭配 GKE 標準叢集使用巢狀 VM


下頁說明如何建立 Google Kubernetes Engine (GKE) 標準叢集,並使用支援巢狀虛擬化的節點。Compute Engine VM 使用 Intel VT-x 指令,因此巢狀 VM 可以在 GKE 節點的基礎 VM 上執行。然後,您可以使用 QEMU 等工具部署 Pod,建立巢狀 VM。您可以使用巢狀 VM 執行專門工作負載,例如 Android 模擬器,或是可將 VM 做為隔離界線的工作負載。

減少效能影響

使用硬體輔助巢狀虛擬化時,與非巢狀虛擬化設定相比,在巢狀 VM 上執行的工作負載效能可能會降低。效能影響程度取決於特定工作負載設定檔,包括其 I/O 和記憶體用量特性。

此外,在 GKE 節點的基礎 VM 上建立巢狀 VM,可能會影響在這些節點上執行的其他工作負載效能。

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

需求條件和限制

使用 GKE 啟用巢狀虛擬化,並允許 Pod 建立巢狀 VM 之前,請先考量下列資訊:

  • 您只能使用有限數量的 VM 機器系列,設定含巢狀 VM 的節點集區。請參閱「機器系列比較」的「巢狀虛擬化」列,確認支援的機器系列。
  • 您必須使用 UBUNTU_CONTAINERD 映像檔類型,或使用 COS_CONTAINERD 映像檔類型,且節點執行 1.28.4-gke.1083000 以上版本。
  • 巢狀虛擬化只能用於標準叢集,無法用於 Autopilot 叢集。
  • 您無法在啟用巢狀虛擬化的節點集區中使用節點自動佈建
  • 如果機構政策強制執行「停用 VM 巢狀虛擬化限制,您就無法使用巢狀虛擬化功能。
  • 您必須為 Pod 設定 securityContext.privileged:true,才能與巢狀 VM 互動。

啟用巢狀虛擬化功能

建立叢集時,您可以為預設節點集區啟用巢狀虛擬化功能,也可以在建立節點集區時啟用這項功能。您無法為現有節點集區啟用或停用這項功能。

以下各節中的操作說明會建立節點集區,並為節點加上 nested-virtualization=enabled 標籤。GKE 建立節點後,您可以在節點的基礎 VM 上排程建立巢狀 VM 的 Pod。

使用新的 Standard 叢集啟用巢狀虛擬化

建立新的標準叢集,並為預設節點集區啟用巢狀虛擬化。GKE 只會建立啟用巢狀虛擬化的預設節點集區。GKE 不會自動為叢集建立的所有新節點集區啟用這項功能:

gcloud container clusters create CLUSTER_NAME \
    --enable-nested-virtualization \
    --node-labels=nested-virtualization=enabled \
    --machine-type=MACHINE_TYPE

更改下列內容:

(選用) 確認節點集區中節點的巢狀虛擬化功能已啟用

您現在可以排定 Pod,在節點的基礎 VM 上建立巢狀 VM。

使用新的節點集區啟用巢狀虛擬化

為現有 Standard 叢集建立啟用巢狀虛擬化的新節點集區:

gcloud container node-pools create NODEPOOL_NAME \
    --enable-nested-virtualization \
    --node-labels=nested-virtualization=enabled \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE

更改下列內容:

(選用) 確認節點集區中節點的巢狀虛擬化功能已啟用

您現在可以排定 Pod,在節點的基礎 VM 上建立巢狀 VM。

將 Pod 排程至支援巢狀虛擬化的節點

如要在啟用巢狀虛擬化的節點上排定 Pod,請將下列節點選取器新增至規格:

nodeSelector:
  nested-virtualization: enabled

此外,如要讓 Pod 連線至巢狀 VM,您必須設定 securityContext.privileged:true,將 Pod 設為具備特殊權限。

後續步驟