共享单租户节点组


共享单租户节点组类似于本地单租户节点组。例如,共享节点组的费用相同,使用相同配额,并且也位于资源层次结构中的父项目下。

共享节点组和本地节点组之间的区别在于,您的组织中的其他项目可以在共享节点组中预配虚拟机 (VM) 实例。

跨多个项目或在整个组织中共享节点组可帮助您执行以下操作:

  • 将您管理的节点组整合到一个项目中,然后与其他项目或整个组织共享这些节点

  • 将各种项目的虚拟机合并到未充分利用的节点组后删除节点,从而降低费用

  • 通过单个团队管理单租户节点

  • 与较小的项目共享单租户节点,并保留这些项目之间的安全与访问权限控制边界

  • 在同一项目中的节点组之间执行实时迁移

  • 使用在节点组内迁移维护政策时,提高节点组的利用率并减少预留的维护节点的数量

下图展示了与其他项目共享的节点组,管理这些项目中的虚拟机的其他部门可以在共享节点组中预配虚拟机。

跨项目共享的节点组的图示。管理不同项目中的虚拟机的部门可以在共享节点组中预配虚拟机。

共享节点组的利用率优势

下表对使用本地节点组的项目和使用共享节点组的项目进行了比较。请注意,使用共享节点组的项目的 vCPU 利用率会降低。

项目配置 本地节点组 共享节点组
项目 10 10
vCPU/项目 24 24
节点组 10 1
节点数/节点组 1 3
vCPU/节点 80 80
利用率/节点组 24 80
利用率过低/节点组 56 0
利用率过低的 vCPU 总数 10 x 56 = 560 个 vCPU 1 x 0 = 0 个 vCPU

共享节点组设置

Compute Engine 使用以下设置来共享节点组并在共享节点组中预配虚拟机:

  • 您在创建或更新单租户节点组时配置的共享设置。如需指定是与其他项目还是与整个组织共享节点组,请使用 gcloud CLI 设置(--share-setting--share-with)或 REST 设置(shareSettingshareWith)。

  • 默认 compute.googleapis.com/project 节点亲和性标签,供您在使用节点亲和性标签在共享节点组中预配虚拟机时使用。 如需了解其他默认节点亲和性标签,请参阅默认亲和性标签

维护政策注意事项

当节点组使用在节点组内迁移维护政策时,Compute Engine 会为实时迁移事件至少预留 1 个节点,因此节点组必须至少有 2 个节点。您无法在预留节点中安排虚拟机,因此具有此维护政策的节点组通常总体利用率会较低。这使得需要在节点组内迁移维护政策的工作负载成为共享节点组的理想选择,因为它们通常可以从改进的利用率中获得最大的好处。

IAM 角色和权限

共享节点组时,请注意以下有关 IAM 角色和权限的信息:

  • 如果节点组与项目共享,则任何能够在列出的项目或组织中创建虚拟机的用户都可以将这些项目中的虚拟机预配到共享节点组,而无需更改 IAM 角色或权限。

  • compute.soleTenantViewer IAM 角色可让您列出和查看节点组 (gcloud CLI/REST)。您无法使用此角色修改节点组。拥有此角色或有权列出节点组的任何用户(无论他们在虚拟机上的 IAM 权限如何)都可以查看节点组中所有虚拟机的项目 ID、名称、机器类型以及有关本地 SSD 和 GPU 的信息。

限制

  • 合规性制度限制:

    • 任何有权列出节点组的用户(无论他们在虚拟机上的 IAM 权限如何)都可以查看节点组中所有虚拟机的项目 ID、名称和机器类型。因此,由于跨项目信息披露的风险,在共享节点组中预配了虚拟机的项目应受相同的合规性制度约束。
  • Google Cloud 控制台限制:

    • 如果您无权查看共享节点组上的虚拟机,则这些虚拟机不会显示在 Google Cloud 控制台的单租户节点页面上的虚拟机列表中。
    • 单租户节点组页面上修改共享设置后,界面中的共享对象设置不会更新。如需查看更新后的共享对象设置,请转到单租户节点页面。
    • 与组织中的所有项目或组织中的选定项目共享节点组后,您只能看到其所属项目中的共享节点组:您无法看到它获得共享的项目中的共享节点组。如需在共享节点组上预配虚拟机,请从共享该节点组的项目中转到虚拟机实例页面,然后修改单租户节点亲和性标签。
  • 共享限制:

    • 您必须更新节点组所属项目中的共享设置。
    • 使用 projects 共享设置时,您最多可以指定 100 个项目。
    • 您无法在组织之间共享节点组。例如,如果将包含共享节点组的项目从一个组织迁移到另一个组织,则还必须迁移在该共享节点组中运行虚拟机的所有项目。
    • 使用共享单租户节点组时,您无法在项目之间执行实时迁移。如需了解详情,请参阅手动实时迁移虚拟机

价格

共享节点组中的虚拟机不会产生额外费用,并且共享节点组本身也不会产生额外费用。如需详细了解单租户节点价格,请参阅单租户节点价格

准备工作

  • 在创建单租户节点组之前,创建单租户节点模板
  • 在单租户节点中预配虚拟机之前,请检查您的配额。根据您所预留节点的数量和大小,您可能需要申请更多配额
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

创建新的节点组并共享该节点组

如需创建新的节点组并将其与其他项目或整个组织共享,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

  1. 创建单租户节点组。如需了解详情,请参阅创建单租户节点组

  2. 通过在配置共享设置中指定以下其中一项,来配置共享设置:

    • 如需与组织中的所有项目共享节点组,请选择与组织中的所有项目共享此节点组
    • 如需与组织中的特定项目共享节点组,请选择与组织中的选定项目共享此节点组

    如果您不想共享节点组,请选择不与其他项目共享此节点组

gcloud

如需创建共享节点组,请使用以下 gcloud compute sole-tenancy node-groups create 命令

gcloud compute sole-tenancy node-groups create NODE_GROUP \
    --zone=ZONE \
    --node-template=NODE_TEMPLATE \
    --target-size=SIZE \
    --share-setting=SHARE_SETTING \
    --share-with=PROJECTS

替换以下内容:

  • NODE_GROUP:节点组的名称。

  • ZONE:要在其中创建节点组的可用区。

  • NODE_TEMPLATE:先前创建的节点模板的名称。

  • SIZE:节点组中的节点数。

  • SHARE_SETTING:节点组的共享设置。设置为 projects 可与特定项目共享,或设置为 organization 可与整个组织共享。

  • PROJECTS:要共享节点组的项目 ID 或项目编号的列表。只有在将 SHARE_SETTING 设置为 projects 时才需要。

REST

如需创建共享节点组,请使用以下 nodeGroups.insert 方法

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups

{
  ...
  "name": NODE_GROUP,
  "nodeTemplate": NODE_TEMPLATE,
  "size": SIZE,
  "shareSettings": {
    "shareType": SHARE_TYPE,
    "projectMap": {
      string: {
        "projectId": PROJECTS
      },
    }
  }
  ...
}

替换以下内容:

  • PROJECT:要在其中创建节点组的项目的名称。

  • ZONE:要在其中创建节点组的可用区。

  • NODE_GROUP:节点组的名称。

  • NODE_TEMPLATE:先前创建的节点模板的名称。

  • SIZE:节点组中的节点数。

  • SHARE_TYPE:节点组的共享设置。设置为 SPECIFIC_PROJECTS 可与特定项目共享,或设置为 ORGANIZATION 可与整个组织共享。

  • PROJECTS:要共享节点组的项目 ID 或项目编号的列表。只有在将 SHARE_TYPE 设置为 SPECIFIC_PROJECTS 时才需要。

在共享节点组中预配单租户虚拟机

如需在共享节点组中预配单租户虚拟机,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

  1. 在 Google Cloud 控制台中,切换到您已与其共享节点组的项目。

  2. 转到虚拟机实例页面。

    转到虚拟机实例

  3. 点击创建实例

  4. 可用区中,选择共享节点组的可用区。

  5. 机器配置 > 系列中,选择共享单租户节点组模板指定的机器类型。

  6. 打开高级选项 > 单租户 > 浏览

  7. 选择选择项目并指定包含共享节点组的项目。

  8. 选择要在其中预配虚拟机的单租户节点组或该组中特定单租户节点。

gcloud

使用节点组名称在共享节点组中预配虚拟机

如需使用节点组名称在共享节点组中预配单租户虚拟机,请使用以下 gcloud compute instances create 命令

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --node-group=NODE_GROUP \
    --node-project=NODE_PROJECT

替换以下内容:

  • VM_NAME:要在共享节点组中创建的新单租户虚拟机的名称

  • MACHINE_TYPE:新单租户虚拟机的机器类型

  • NODE_GROUP:要在其中创建单租户虚拟机的共享节点组的名称

  • NODE_PROJECT:要在其中预配虚拟机的节点组所属的项目

使用节点亲和性文件在共享节点组中预配虚拟机

如需使用节点亲和性文件在共享节点组中预配单租户虚拟机,请使用以下 gcloud compute instances create 命令

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --node-affinity-file=NODE_AFFINITY_FILE

替换以下内容:

  • VM_NAME:要使用亲和性标签在共享节点组中创建的单租户虚拟机的名称。

  • MACHINE_TYPE:要在共享节点组中创建的单租户虚拟机的机器类型。

  • NODE_AFFINITY_FILE:包含节点亲和性信息的 .json 文件的名称。在节点亲和性文件中,将亲和性标签键设置为 "compute.googleapis.com/project",运算符等于 "IN",值等于包含节点组的项目。如需详细了解如何配置节点亲和性,请参阅配置节点亲和性标签

REST

如需使用节点亲和性文件在共享节点组中预配单租户虚拟机,请使用以下 nodeGroups.insert 方法

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances

{
  ...
  "name": VM_NAME,
  "machineType": MACHINE_TYPE,
  "scheduling": {
    ...
    "nodeAffinities": [
      {
        "key": KEY,
        "operator": OPERATOR,
        "values": [
          VALUE
        ]
      }
    ],
    ...
  },
  ...
}

替换以下内容:

  • PROJECT:节点组所属的项目的名称。

  • ZONE:节点组的可用区。

  • VM_NAME:要使用亲和性标签在共享节点组中创建的单租户虚拟机的名称。

  • MACHINE_TYPE:要在共享节点组中创建的单租户虚拟机的机器类型。

  • KEY:亲和性标签。设置为 "compute.googleapis.com/project"

  • OPERATOR:亲和性标签运算符。设置为 "IN"

  • VALUE:要在其中预配虚拟机的节点组所属的项目。使用项目名称或项目 ID 指定一个项目。

如需详细了解如何配置节点亲和性,请参阅配置节点亲和性标签

查看节点组的共享设置

如需查看节点组的共享设置,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

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

    打开“单租户节点”

  2. 如需查看节点组的属性,请在名称列中点击节点组的名称。

gcloud

如需查看节点组的共享设置,请使用以下 gcloud compute sole-tenancy node-groups describe 命令

gcloud compute sole-tenancy node-groups describe NODE_GROUP

NODE_GROUP 替换为要查看其共享设置的节点组的名称。

REST

如需查看节点组的共享设置,请使用以下 nodeGroups.get 方法

GET https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups

替换以下内容:

  • PROJECT:要查看其共享设置的节点组所属的项目的名称

  • ZONE:要查看其共享设置的节点组所在的可用区

共享现有节点组

如需与其他项目或整个组织共享现有节点组,请使用 Google Cloud 控制台、gcloud CLI 或 REST。

控制台

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

    打开“单租户节点”

  2. 名称列中,点击节点组的名称。

  3. 如需与组织中的所有项目或组织中的选定项目共享节点组,请在概览 > 共享对象中,请点击修改

gcloud

如需更新节点组的共享设置,请使用以下 gcloud compute sole-tenancy node-groups update 命令

gcloud compute sole-tenancy node-groups update NODE_GROUP \
    --zone=ZONE \
    --share-setting=SHARE_SETTING \
    --share-with=PROJECTS

替换以下内容:

  • NODE_GROUP:要更新其共享设置的节点组的名称。

  • SHARE_SETTING:节点组的共享设置。设置为 projects 可与特定项目共享,或设置为 organization 可与整个组织共享。

  • PROJECTS:要共享节点组的项目 ID 或项目编号的列表。只有在将 SHARE_SETTING 设置为 projects 时才需要。

REST

如需更新节点组的共享设置,请使用以下 nodeGroups.patch 方法

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups/NODE_GROUP

{
  "shareSettings": {
    "shareType": SHARE_TYPE,
    "projectMap": {
      string: {
        "projectId": PROJECTS
      },
    }
  }
}

替换以下内容:

  • PROJECT:要更新其共享设置的节点组所属的项目的名称。

  • ZONE:要更新其共享设置的节点组所在的可用区。

  • NODE_GROUP:要更新其共享设置的节点组的名称。

  • SHARE_TYPE:节点组的共享设置。设置为 projects 可与特定项目共享,或设置为 organization 可与整个组织共享。

  • PROJECTS:要共享节点组的项目 ID 或项目编号的列表。只有在将 SHARE_SETTING 设置为 SPECIFIC_PROJECTS 时才需要。

停止共享节点组

如需停止与其他项目或整个组织共享节点组,请使用 gcloud CLI 或 REST。

控制台

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

    打开“单租户节点”

  2. 点击节点组的名称

  3. 概览 > 共享对象中,点击修改

  4. 如需停止共享,请选择不与其他项目共享此节点组

gcloud

如需停止与其他项目或整个组织共享节点组,请使用以下 gcloud compute sole-tenancy node-groups update 命令

gcloud compute sole-tenancy node-groups update NODE_GROUP \
    --zone=ZONE \
    --share-setting=local

NODE_GROUP 替换为要停止共享的节点组的名称。

REST

如需停止与其他项目或整个组织共享节点组,请使用以下 nodeGroups.patch 方法

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups/NODE_GROUP

{
  "shareSettings": {
    "shareType": LOCAL
  }
}

替换以下内容:

  • PROJECT:要停止共享的节点组所属的项目的名称

  • ZONE:要停止共享的节点组所在的可用区

  • NODE_GROUP:要停止共享的节点组的名称

从所属项目中删除共享节点组

如需从所属项目中删除共享节点组,请使用 Google Cloud 控制台、gcloud CLI 或 REST。在删除节点组之前,请停止该节点组中运行的所有虚拟机。

控制台

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

    打开“单租户节点”

  2. 名称列中,点击节点组的名称。

  3. 点击删除

gcloud

如需从所属项目中删除共享节点组,请使用以下 gcloud compute sole-tenancy node-groups delete 命令

gcloud compute sole-tenancy node-groups delete NODE_GROUP

NODE_GROUP 替换为要删除的节点组的名称。

REST

如需从所属项目中删除共享节点组,请使用以下 nodeGroups.delete 方法

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups/NODE_GROUP

替换以下内容:

  • PROJECT:要删除的节点组所属的项目的名称

  • ZONE:要删除的节点组所在的可用区

  • NODE_GROUP:要删除的节点组的名称