下页介绍了如何使用支持嵌套虚拟化的节点创建 Google Kubernetes Engine (GKE) Standard 集群。Compute Engine 虚拟机使用 Intel VT-x 指令,以便嵌套虚拟机可以在 GKE 节点的底层虚拟机上运行。然后,您可以部署使用 QEMU 等工具创建嵌套虚拟机的 Pod。您可以使用嵌套虚拟机来运行专业工作负载(例如 Android 模拟器),或者运行受益于虚拟机作为隔离边界的工作负载,例如使用开源 Kata Containers的微型虚拟机。
如需查看有关将开源 Kata Containers 与 GKE 代理沙盒搭配使用的教程,请参阅 在 GKE 上启用 Kata Containers。
降低性能影响
使用硬件辅助的嵌套虚拟化时,与非嵌套虚拟化配置相比,在嵌套虚拟机上运行的工作负载可能会遇到性能下降问题。性能影响程度取决于特定的工作负载配置文件,包括其 I/O 和内存使用特征。
此外,在 GKE 节点的底层虚拟机上创建嵌套虚拟机可能会影响在这些节点上运行的其他工作负载的性能。
准备工作
在开始之前,请确保您已完成以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如需使用 Google Cloud CLI 执行此任务,
请安装并
初始化
gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新 版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 确保您的组织政策支持创建嵌套虚拟机。
- 查看嵌套虚拟机限制。
要求和限制
在使用 GKE 启用嵌套虚拟化并允许 Pod 创建嵌套虚拟机之前,请考虑以下信息:
- 您只能为包含嵌套虚拟机的节点池配置有限数量的虚拟机机器系列。请参阅机器系列比较中的嵌套虚拟化行,以确认支持的机器系列。
- 您必须使用
UBUNTU_CONTAINERD映像类型,或者将COS_CONTAINERD映像类型用于运行 1.28.4-gke.1083000 或更高版本的节点。 - 您只能将嵌套虚拟化与 Standard 集群搭配使用,而不能与 Autopilot 集群搭配使用。
- 您无法将节点自动预配功能与启用了嵌套虚拟化的节点池搭配使用。
- 如果对组织政策强制执行“停用虚拟机嵌套虚拟化”限制条件,则无法使用嵌套虚拟化。
- 您必须为 Pod 设置
securityContext.privileged:true才能与嵌套虚拟机进行交互。
启用嵌套虚拟化
您可以在创建集群时启用嵌套虚拟化(通过为默认节点池启用),或在创建节点池时启用嵌套虚拟化。您无法为现有节点池启用或停用该功能。
以下部分中的说明会创建标签为 nested-virtualization=enabled 的节点的节点池。GKE 创建节点后,您可以调度在节点的底层虚拟机上创建了嵌套虚拟机的 Pod。
使用新的 Standard 集群启用嵌套虚拟化
创建一个为默认节点池启用了嵌套虚拟化的新 Standard 集群。GKE 仅在启用嵌套虚拟化的情况下创建默认节点池。GKE 不会自动为针对集群创建的所有新节点池启用该功能:
控制台
- 在 Google Cloud 控制台中,前往创建 Kubernetes 集群页面。
- 配置集群。
- 在导航菜单中,选择节点池 下的 default-pool 。 然后,选择节点 。
- 在机器配置 部分中,选择支持的机器 类型(请参阅嵌套虚拟化 行)。
- 在预留 部分之后,选中启用嵌套虚拟化 复选框。
- 如需创建集群,请点击创建 。
gcloud
gcloud container clusters create CLUSTER_NAME \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=MACHINE_TYPE
替换以下内容:
CLUSTER_NAME:集群的名称。MACHINE_TYPE:支持的机器类型(请参阅嵌套虚拟化行)。
(可选)为节点池中的节点检查是否已启用嵌套虚拟化。
现在,您可以调度 Pod,以在节点的底层虚拟机上创建嵌套虚拟机。
使用新节点池启用嵌套虚拟化
为现有 Standard 集群创建一个启用了嵌套虚拟化的新节点池:
控制台
在 Google Cloud 控制台中,前往 Kubernetes 集群 页面。
如需打开集群的详情页面,请点击要在其中创建启用了嵌套虚拟化的新节点池的集群的名称。
配置节点池。
点击节点 标签页。
在节点池 部分的标题中,点击 add_box 创建由用户管理的节点池 。
在导航菜单中,选择节点 。
在机器配置 部分中,选择支持的机器 类型(请参阅嵌套虚拟化 行)。
在预留 部分之后,选中启用嵌套虚拟化 复选框。
如需创建节点池,请点击创建 。
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,以在节点的底层虚拟机上创建嵌套虚拟机。
将 Pod 调度到支持嵌套虚拟化的节点
如需在启用了嵌套虚拟化的节点上调度 Pod,请将以下节点选择器添加到规范中:
nodeSelector:
nested-virtualization: enabled
此外,如需让 Pod 与嵌套虚拟机连接,您必须通过配置 securityContext.privileged:true 将 Pod 设置为特权 Pod。