下頁說明如何建立 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 版本可能不支援執行本文件中的指令。
- 確認您的機構政策支援建立巢狀 VM。
- 查看巢狀 VM 的限制。
需求條件和限制
使用 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 不會自動為叢集建立的所有新節點集區啟用這項功能:
控制台
- 前往 Google Cloud 控制台的「Create a Kubernetes cluster」(建立 Kubernetes 叢集) 頁面。
- 設定叢集。
- 在導覽選單中,選取「NODE POOLS」(節點集區) 下方的「default-pool」。 然後選取「節點」。
- 在「Machine configuration」(機器設定) 區段中,選擇支援的機器類型 (請參閱「Nested virtualization」(巢狀虛擬化)資料列)。
- 在「Reservations」(預留項目) 部分下方,勾選「Enable nested virtualization」(啟用巢狀虛擬化) 核取方塊。
- 如要建立叢集,請按一下「Create」(建立)。
gcloud
gcloud container clusters create CLUSTER_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=MACHINE_TYPE
更改下列內容:
CLUSTER_NAME:叢集名稱。MACHINE_TYPE:支援的機器類型 (請參閱「巢狀虛擬化」資料列)。
(選用) 確認節點集區中節點的巢狀虛擬化功能已啟用。
您現在可以排定 Pod 的時間,在節點的基礎 VM 上建立巢狀 VM。
使用新的節點集區啟用巢狀虛擬化
為現有 Standard 叢集建立啟用巢狀虛擬化的新節點集區:
控制台
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
如要開啟叢集的詳細資料頁面,請按一下要建立新節點集區的叢集名稱,並啟用巢狀虛擬化。
設定節點集區。
按一下「Nodes」(節點) 分頁標籤。
在「節點集區」部分標題中,按一下 add_box「建立由使用者自行管理的節點集區」。
在導覽選單中選取「節點」。
在「Machine configuration」(機器設定) 區段中,選擇支援的機器類型 (請參閱「Nested virtualization」(巢狀虛擬化)資料列)。
在「Reservations」(預留項目) 部分下方,勾選「Enable nested virtualization」(啟用巢狀虛擬化) 核取方塊。
如要建立節點集區,請按一下「Create」(建立)。
gcloud
gcloud container node-pools create NODEPOOL_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE
更改下列內容:
NODEPOOL_NAME:已啟用巢狀虛擬化的節點集區名稱。CLUSTER_NAME:叢集名稱。MACHINE_TYPE:支援的機器類型 (請參閱「巢狀虛擬化」資料列)。
(選用) 確認節點集區中節點的巢狀虛擬化功能已啟用。
您現在可以排定 Pod 的時間,在節點的基礎 VM 上建立巢狀 VM。
將 Pod 排定至支援巢狀虛擬化的節點
如要在啟用巢狀虛擬化的節點上排定 Pod,請將下列節點選取器新增至規格:
nodeSelector:
nested-virtualization: enabled
此外,如要讓 Pod 連線至巢狀 VM,您必須設定 securityContext.privileged:true,將 Pod 設為具備特殊權限。