搭配 GKE Standard 叢集使用巢狀 VM

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

如需瞭解如何搭配使用開放原始碼 Kata Containers 與 GKE Agent Sandbox 的教學課程,請參閱「在 GKE 上啟用 Kata Containers」。

減少效能影響

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

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

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

需求條件和限制

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

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

啟用巢狀虛擬化功能

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

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

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

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

控制台

  1. 前往 Google Cloud 控制台的「Create a Kubernetes cluster」(建立 Kubernetes 叢集) 頁面。

    前往「建立 Kubernetes 叢集」

  2. 設定叢集。
  3. 在導覽選單中,選取「NODE POOLS」(節點集區) 下方的「default-pool」。 然後選取「節點」
  4. 在「Machine configuration」(機器設定) 區段中,選擇支援的機器類型 (請參閱「Nested virtualization」(巢狀虛擬化)資料列)
  5. 在「Reservations」(預留項目) 部分下方,勾選「Enable nested virtualization」(啟用巢狀虛擬化) 核取方塊。
  6. 如要建立叢集,請按一下「Create」(建立)

gcloud

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

更改下列內容:

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

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

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

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

控制台

  1. 前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。

    前往 Kubernetes 叢集

  2. 如要開啟叢集的詳細資料頁面,請按一下要建立新節點集區的叢集名稱,並啟用巢狀虛擬化。

  3. 設定節點集區。

  4. 按一下「Nodes」(節點) 分頁標籤。

  5. 在「節點集區」部分標題中,按一下 「建立由使用者自行管理的節點集區」

  6. 在導覽選單中選取「節點」

  7. 在「Machine configuration」(機器設定) 區段中,選擇支援的機器類型 (請參閱「Nested virtualization」(巢狀虛擬化)資料列)

  8. 在「Reservations」(預留項目) 部分下方,勾選「Enable nested virtualization」(啟用巢狀虛擬化) 核取方塊。

  9. 如要建立節點集區,請按一下「Create」(建立)

gcloud

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 設為具備特殊權限。

後續步驟