使用单租户节点隔离 GKE 工作负载


本页面介绍如何使用 Compute Engine 单租户节点(即仅运行特定项目的虚拟机的专用物理服务器)来隔离 Google Kubernetes Engine (GKE) 标准集群上运行的工作负载。您可以使用单租户节点将您的虚拟机与其他项目中的虚拟机进行物理隔离,或者将您的虚拟机汇集到同一主机硬件上。

GKE Autopilot 不支持此功能。如需详细了解 Autopilot 安全边界,请参阅 Autopilot 中的安全边界

如需在 GKE 中使用单租户节点,您需要在 Compute Engine 中创建单租户节点组,并使用该节点组创建 GKE 节点池。您可以使用 GKE 集群项目中的单租户节点创建节点池,也可以使用组织中跨项目的资源创建共享单租户节点。例如,您可以在您的组织中指定一个所有者项目(您可以在其中创建单租户节点组),以及消费者项目(其中的集群带有使用所有者项目中的这些节点组的节点池)。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

申请更多配额

单租户节点很大(例如 96 个 vCPU 和 624 GB 内存),而默认项目配额过低,无法处理这些节点。

您必须在配额页面上申请增加 Compute Engine API CPU 的配额才能创建单租户节点。如需详细了解如何申请增加配额,请参阅配额

您需要的 CPU 数量取决于以下各项:

  • 当前的 CPU 配额用量。
  • 节点组的大小。
  • 节点模板。

检查您的单租户节点类型的核心数,并请求至少该数量的 CPU 限制,最好另外有 10 个 CPU,以确保您的项目具有足够的容量。

创建单租户节点模板

单租户节点模板是一种地区性资源,用于在创建节点组时定义属性并将其应用于每个节点。如需了解详情,请参阅节点类型

如果您使用的是共享单租户节点,请确保在节点组的所有者项目(而不是集群的消费者项目)中按照这些说明完成操作。

控制台

  1. 转到 Google Cloud 控制台中的单租户节点页面。

    打开“单租户节点”

  2. 点击创建节点模板

  3. 为节点模板指定名称地区

  4. 选择节点类型

  5. (可选)添加一个或多个节点亲和性标签。

  6. 点击创建以创建节点模板。

gcloud

使用 gcloud compute sole-tenancy node-templates create 命令创建节点模板:

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
    --node-type=NODE_TYPE \
    --node-affinity-labels=AFFINITY_LABELS \
    --region=COMPUTE_REGION

请替换以下内容:

  • TEMPLATE_NAME:新节点模板的名称。
  • NODE_TYPE:基于此模板创建的单租户节点的节点类型。使用 gcloud compute sole-tenancy node-types list 命令获取每个区域中可用节点类型的列表。
  • AFFINITY_LABELS:亲和性标签的键和值 ([KEY=VALUE,...])。借助亲和性标签,您可以对节点和节点组进行逻辑分组,然后在预配虚拟机时,您可以为虚拟机指定亲和性标签,以便将虚拟机调度到一组特定节点或节点组上。如需了解详情,请参阅节点亲和性和反亲和性
  • COMPUTE_REGION:要在其中创建节点模板的区域。您可以使用该模板在此地区的任何区域中创建节点组。

输出类似于以下内容:

Created [https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/nodeTemplates/template-name].

创建单租户节点组

节点组是来自同一单租户节点模板的特定区域内的一组单租户节点。对于可在多个区域中使用的地区级集群和节点池,您必须在每个区域中创建一个同名的节点组。 请确保您有足够的配额,然后再完成此步骤。

如果您使用的是共享单租户节点,请确保在节点组的所有者项目(而不是集群的消费者项目)中按照这些说明完成操作。

控制台

要创建单租户节点组,请执行以下步骤:

  1. 转到 Google Cloud 控制台中的单租户节点页面。

    打开“单租户节点”

  2. 点击创建节点组

  3. 为节点模板指定名称

  4. 选择您在其中创建节点模板的同一地区,然后在该地区中选择一个区域

  5. 选择您的节点模板

  6. (可选)启用自动扩缩模式

  7. 指定组中的节点数

  8. (可选)更改维护政策

  9. 或者,如需共享单租户节点组,请通过在配置共享设置部分中指定以下内容之一来配置共享设置:

    • 与组织内的所有项目共享此节点组
    • 与组织内的选定项目共享此节点组
  10. 点击创建以创建节点组。

gcloud

基于模板创建节点组:

gcloud compute sole-tenancy node-groups create GROUP_NAME \
    --zone COMPUTE_ZONE \
    --node-template TEMPLATE_NAME --target-size TARGET_SIZE \
    --share-settings=SHARE_SETTING \
    --share-with=PROJECTS

请替换以下内容:

  • GROUP_NAME:您要用于新节点组的名称。
  • COMPUTE_ZONE:此节点组所在的地区。此地区必须与您使用的节点模板位于同一区域。
  • TEMPLATE_NAME:您使用的节点模板的名称。
  • TARGET_SIZE:您希望在此节点组中创建的节点数。
  • SHARE_SETTING:节点组的共享设置。设置为 projects 可与特定项目共享,或设置为 organization 可与整个组织共享。
  • PROJECTS:要共享节点组的项目 ID 或项目编号的列表。只有在将 SHARE_SETTING 设置为 projects 时才需要。

创建 GKE 单租户节点

现在,您已在 Compute Engine 中创建了单租户节点组,接下来可以创建单租户节点池。

如果您已有 GKE 集群,则可以向其中添加单租户节点池。如果没有,请使用 gcloud container clusters create 创建集群。

如果您使用的是地区级集群,或者您的节点池可在多个区域使用,您必须在每个这些区域中创建一个同名的节点组。如果您无法在每个可用区重复使用该名称,请为每个可用区创建单独的节点池。

从集群的项目中创建具有单租户节点组的节点池

如需使用集群项目中的节点组创建节点池,请传递单租户节点组的名称。如果您想要使用共享单租户节点组,或者想要使用在创建单租户节点模板时配置的自定义节点亲和性标签,请参阅相关说明以使用节点亲和性文件创建具有共享单租户节点的节点池

创建具有指定节点组的新节点池:

对于区域级节点池:

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --zone COMPUTE_ZONE --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE

对于地区级节点池:

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --region COMPUTE_REGION --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE1,COMPUTE_ZONE2

替换以下内容:

  • NODE_POOL_NAME:新节点池的名称。
  • GROUP_NAME:您要使用的现有单租户节点组的名称。
  • CLUSTER_NAME:要在其中创建节点池的集群的名称。
  • COMPUTE_REGION:与您的集群相同的地区。
  • MACHINE_TYPE:节点池机器类型。
  • COMPUTE_ZONE1COMPUTE_ZONE2,[...]:单租户节点组的地区

如需查看您可以指定的可选标志的完整列表,请参阅 gcloud container node-pools create 文档。

使用节点亲和性文件创建具有共享单租户节点的节点池

如需使用共享单租户节点组创建节点池,您必须使用节点亲和性标签。您还可以使用节点亲和性从同一项目中选择节点组。

如需引用标签,请按照说明创建节点池,注意将 --node-group 标志替换为 --sole-tenant-node-affinity-file 标志。传递包含这些标签的 JSON 文件。例如,请参阅以下命令:

  gcloud container node-pools create sole-tenant-node-pool \
      --sole-tenant-node-affinity-file /path/to/affinity/file --cluster my-cluster \
      --region us-central1 --machine-type n1-standard-4  \
      --node-locations=us-central1-a,us-central1-b,us-central1-c

以下部分介绍了使用单租户节点的节点亲和性标签的用例。

从项目中指定节点组名称

如需使用特定项目和节点组名称中的单租户节点组,请在节点亲和性文件中指定这些值。如果要创建多可用区节点池(其中每个可用区的节点组名称必须匹配),则可以使用此亲和性。如需使用指定所有者项目中的任何节点组,请省略 JSON 文件中的整个 compute-googleapis.com/node-group-name 区块。

请参阅以下示例:

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "compute.googleapis.com/node-group-name",
    "operator" : "IN",
    "values" : ["GROUP_NAME"]
  },
]

指定自定义标签

您还可以使用节点亲和性和反亲和性,通过包含自定义标签的节点组创建节点池。系统会自动为每个节点组分配默认亲和性标签。您可以像前面的示例一样引用默认标签,或者使用创建节点模板时指定的自定义标签。您可以使用自定义标签来隔离或分组工作负载。

请参阅以下示例:

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
  },
]

限制

使用单租户节点创建节点池时,您需要负责管理单租户节点组的底层容量。请考虑以下功能如何与单租户节点组进行交互:

  • 您可以启用集群自动扩缩,但该功能受底层节点组容量的限制。您可以在 Compute Engine 中配置节点组自动扩缩器,以自动管理单租户节点组的大小。
  • 如果您使用单租户节点,则无法为集群启用节点自动预配功能。
  • 您可以使用任何节点升级策略,但必须确保有足够的容量来支持节点池使用其所选升级策略。

后续步骤