在单租户节点上预配虚拟机


本页面介绍了如何在单租户节点(即仅运行单个项目中的虚拟机的物理服务器)上供应虚拟机。在单租户节点上供应虚拟机之前,请先阅读单租户节点概览

在单租户节点上供应虚拟机需要执行以下操作:

  1. 创建单租户节点模板。单租户节点模板为单租户节点组中的所有单租户节点指定了统一属性。

  2. 使用先前创建的单租户节点模板创建单租户节点组。

  3. 创建虚拟机并在单租户节点组中供应这些虚拟机。

准备工作

  • 在单租户节点上供应虚拟机之前,请检查您的配额。 根据您所预留节点的数量和大小,您可能需要申请更多配额
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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. Install the Google Cloud CLI, then initialize it by running the following command:

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

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

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

创建单租户节点模板

单租户节点模板是指定单租户节点组属性的区域性资源。您必须先创建节点模板,然后才能创建节点组。 但是,如果您使用的是 Google Cloud 控制台,则必须在创建单租户节点组期间创建节点模板。

控制台

您必须先创建单租户节点模板,然后才能创建节点组。如果使用 Google Cloud 控制台,您必须在创建单租户节点组期间创建节点模板。新节点模板是在您在节点组属性中指定的同一区域中创建。

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

    转到“单租户节点”

  2. 点击创建节点组

  3. 为节点组指定一个名称

  4. 指定要在其中创建节点模板的地区。您可以使用节点模板在此地区的任何区域中创建节点组。

  5. 指定可用区,然后点击继续

  6. 节点模板列表中,点击创建节点模板以开始创建单租户节点模板。

  7. 为节点模板指定一个名称

  8. 为要基于此节点模板创建的节点组中的每个单租户节点指定节点类型

  9. 可选:您还可以为节点模板指定以下属性。

    • 添加本地 SSDGPU 加速器
    • 选择启用 CPU 过度使用功能以控制节点上调度的每个虚拟机的 CPU 过度使用水平

    • 添加节点亲和性标签。借助亲和性标签,您可以对节点和节点组进行逻辑分组,然后在供应虚拟机时,您可以为虚拟机指定亲和性标签,以便将虚拟机调度到一组特定节点或节点组上。如需了解详情,请参阅节点亲和性和反亲和性

  10. 点击创建以完成节点模板的创建。

  11. 可选:如需在其他区域中添加新的单租户节点模板,请重复上述步骤。

如需查看节点模板,请点击单租户节点页面中的节点模板

gcloud

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

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
  --node-type=NODE_TYPE \
  [--region=REGION \]
  [--node-affinity-labels=AFFINITY_LABELS \]
  [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
  [--disk type=local-ssd,count=DISK_COUNT,size=DISK_SIZE \]
  [--cpu-overcommit-type=CPU_OVERCOMMIT_TYPE]

请替换以下内容:

  • TEMPLATE_NAME:新节点模板的名称。

  • NODE_TYPE:基于此模板创建的单租户节点的节点类型。使用 gcloud compute sole-tenancy node-types list 命令获取每个区域中可用节点类型的列表。

  • REGION:要在其中创建节点模板的区域。您可以使用该模板在此地区的任何区域中创建节点组。

  • AFFINITY_LABELS:亲和性标签的键和值 ([KEY=VALUE,...])。借助亲和性标签,您可以对节点和节点组进行逻辑分组,然后在供应虚拟机时,您可以为虚拟机指定亲和性标签,以便将虚拟机调度到一组特定节点或节点组上。如需了解详情,请参阅节点亲和性和反亲和性

  • GPU_TYPE:基于此节点模板创建的每个单租户节点的 GPU 类型。如需了解 GPU 的可用区级可用性,请使用 gcloud compute accelerator-types list 命令,然后选择 n1g2 单租户节点类型可用的可用区。根据可用区可用性,设置为以下其中一项:

    • nvidia-l4
    • nvidia-tesla-p100
    • nvidia-tesla-p4
    • nvidia-tesla-t4
    • nvidia-tesla-v100
  • GPU_COUNT:要指定的 GPU 数量,具体取决于 GPU 的类型。设置为 GPU 类型指定的值,如下表所示:

    GPU_TYPE GPU_COUNT
    nvidia-l4 8
    nvidia-tesla-p100 4
    nvidia-tesla-p4 4
    nvidia-tesla-t4 4
    nvidia-tesla-v100 8
  • DISK_COUNT:SSD 磁盘数量。设置为 1624

  • DISK_SIZE:本地 SSD 分区大小的可选值(以 GB 为单位)。唯一支持的分区大小为 375,如果您未设置此值,则默认为 375

  • CPU_OVERCOMMIT_TYPE:虚拟机上 CPU 的过度使用类型。设置为 enablednone

REST

使用 nodeTemplates.insert 方法创建节点模板:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/nodeTemplates

{
  "name": "TEMPLATE_NAME",
  "nodeType": "NODE_TYPE",
  "nodeAffinityLabels": {
    "KEY": "VALUE",
    ...
  },
  "accelerators": [
    {
      "acceleratorType": "GPU_TYPE",
      "acceleratorCount": GPU_COUNT
    }
  ],
  "disks": [
    {
      "diskType": "local-ssd",
      "diskSizeGb": DISK_SIZE,
      "diskCount": DISK_COUNT
    }
  ],
  "cpuOvercommitType": CPU_OVERCOMMIT_TYPE
}

请替换以下内容:

  • PROJECT_ID:项目 ID。

  • REGION:要在其中创建节点模板的区域。您可以使用该模板在此地区的任何区域中创建节点组。

  • TEMPLATE_NAME:新节点模板的名称。

  • NODE_TYPE:基于此模板创建的单租户节点的节点类型。使用 nodeTypes.list 方法获取每个区域中可用节点类型的列表。

  • KEYnodeAffinityLabels 值,用于指定以键值对形式表示的节点亲和性标签的键部分。借助亲和性标签,您可以对节点和节点组进行逻辑分组,然后在供应虚拟机时,您可以为虚拟机指定亲和性标签,以便将虚拟机调度到一组特定节点或节点组上。如需了解详情,请参阅节点亲和性和反亲和性

  • VALUEnodeAffinityLabels 值,用于指定节点亲和性标签键值对的值部分。

  • GPU_TYPE:基于此节点模板创建的每个单租户节点的 GPU 类型。如需了解 GPU 的可用区级可用性,请使用 gcloud compute accelerator-types list 命令,然后选择 n1g2 单租户节点类型可用的可用区。根据可用区可用性,设置为以下其中一项:

    • nvidia-l4
    • nvidia-tesla-p100
    • nvidia-tesla-p4
    • nvidia-tesla-t4
    • nvidia-tesla-v100
  • GPU_COUNT:基于此节点模板创建的每个单租户节点的 GPU 数量。设置为 GPU 类型指定的值,如下表所示:

    GPU_TYPE GPU_COUNT
    nvidia-l4 8
    nvidia-tesla-p100 4
    nvidia-tesla-p4 4
    nvidia-tesla-t4 4
    nvidia-tesla-v100 8
  • DISK_SIZE:本地 SSD 分区大小的可选值(以 GB 为单位)。唯一支持的分区大小为 375,如果您未设置此值,则默认为 375

  • DISK_COUNT:SSD 磁盘数量。设置为 1624

  • CPU_OVERCOMMIT_TYPE:CPU 过度使用类型。设置为 enablednoneCPU_OVERCOMMIT_TYPE_UNSPECIFIED

创建单租户节点组

使用之前创建的单租户节点模板,创建单租户节点组。单租户节点组会继承单租户节点模板指定的属性,并且具有您必须指定的其他值。

控制台

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

    转到“单租户节点”

  2. 点击创建节点组,以开始创建节点组。

  3. 为节点组指定一个名称

  4. 为节点组指定区域,以显示该区域中的可用节点模板。

  5. 在该地区中指定要在其中创建节点组的区域

  6. 指定节点模板以创建节点组,或点击创建节点模板创建新的单租户节点模板。所选节点模板将应用于节点组。

  7. 节点组自动扩缩器选择下列其中一种自动扩缩模式

    • 关闭:手动管理节点组的大小。

    • 开启:让系统自动向节点组添加节点或从中移除节点。

    • 仅横向扩容:在需要额外容量时向节点组添加节点。

  8. 指定节点组的节点数。如果您启用节点组自动扩缩器,请指定节点组的大小范围。您可以稍后手动更改这些值。

  9. 配置维护设置部分中,将单租户节点组的维护政策设置为以下值之一。借助维护政策,您可以配置节点组上的虚拟机在主机维护事件期间的行为。如需了解详情,请参阅维护政策

    • 默认
    • 就地重新启动
    • 在节点组内迁移
  10. 对于单租户节点组维护的处理,您可以在常规维护窗口和高级维护控制之间选择,如下所示:

    • 维护窗口:选择一个时间段,单租户节点组中节点的计划内维护事件在该时间段内进行。

    • 选择启用单租户高级维护控制单租户的高级维护控制可让您控制单租户节点组的计划内维护事件,并最大限度地减少与维护相关的中断。如需选择启用高级维护控制,请点击选择启用单租户高级维护控制开关以切换到开启位置。如果您选择为节点维护使用此选项,则维护窗口字段会停用,维护将按照高级维护控制中的配置进行。

    请注意,高级维护控制仅支持默认维护政策。

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

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

    如果您不想共享节点组,请选择不与其他项目共享此节点组。如需详细了解如何共享节点组,请参阅共享单租户节点组

  12. 点击创建以完成节点组的创建。

gcloud

运行 gcloud compute sole-tenancy node-groups create 命令,以基于之前创建的节点模板创建节点组:

gcloud compute sole-tenancy node-groups create GROUP_NAME \
  --node-template=TEMPLATE_NAME \
  --target-size=TARGET_SIZE \
  [--zone=ZONE \]
  [--maintenance-policy=MAINTENANCE_POLICY \]
  [--maintenance-window-start-time=START_TIME \]
  [--autoscaler-mode=AUTOSCALER_MODE: \
  --min-nodes=MIN_NODES \
  --max-nodes=MAX_NODES]

请替换以下内容:

  • GROUP_NAME:新节点组的名称。

  • TEMPLATE_NAME:用于创建此节点组的节点模板的名称。

  • TARGET_SIZE:要在组中创建的节点数。

  • ZONE:要在其中创建节点组的可用区。此区域必须与您用于创建节点组的节点模板位于同一地区。

  • MAINTENANCE_POLICY:节点组的维护政策。如需了解详情,请参阅维护政策。此项必须为以下值之一:

    • default
    • restart-in-place
    • migrate-within-node-group

    或者,您可以使用 --maintenance-interval 标志,选择为单租户节点组启用高级维护控制。如需了解详情,请参阅在单租户节点上启用高级维护控制

  • START_TIME:此节点组中虚拟机的维护窗口(以 GMT 为单位)的开始时间。请设置为 00:0004:0008:0012:0016:0020:00 之一。如果未设置,则节点组没有固定的维护窗口。

  • AUTOSCALER_MODE:节点组的自动扩缩器政策。此项必须为以下值之一:

    • off:手动管理节点组的大小。

    • on:让系统自动向节点组添加节点或从中移除节点。

    • only-scale-out:在需要额外容量时向节点组添加节点。

  • MIN_NODES:节点组的大小下限。默认值为 0,且必须是小于或等于 MAX_NODES 的整数值。

  • MAX_NODES:节点组的大小上限。 此值必须小于或等于 100 且大于或等于 MIN_NODES。如果 AUTOSCALER_MODE 未设置为 off,则必须指定此项。

REST

使用 nodeGroups.insert 方法,基于之前创建的节点模板创建节点组:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/nodeGroups?initialNodeCount=TARGET_SIZE
{ "nodeTemplate": "regions/REGION/nodeTemplates/TEMPLATE_NAME", "name": "GROUP_NAME", "maintenancePolicy": MAINTENANCE_POLICY, "maintenanceWindow": { "startTime": "START_TIME" } "autoscalingPolicy": { "mode": AUTOSCALER_MODE, "minNodes": MIN_NODES, "maxNodes": MAX_NODES }, }

请替换以下内容:

  • PROJECT_ID:项目 ID。

  • ZONE:要在其中创建节点组的可用区。此可用区必须与您用于创建节点组的节点模板位于同一区域。

  • TARGET_SIZE:要在组中创建的节点数。

  • REGION:要在其中创建节点组的区域。 节点模板必须位于所选区域中。

  • TEMPLATE_NAME:用于创建此节点组的节点模板的名称。

  • GROUP_NAME:新节点组的名称。

  • MAINTENANCE_POLICY:节点组的维护政策。此项必须为以下值之一:

    • DEFAULT
    • RESTART_IN_PLACE
    • MIGRATE_WITHIN_NODE_GROUP

    或者,您可以使用 maintenanceInterval 字段,选择为单租户节点组启用高级维护控制。如需了解详情,请参阅在单租户节点上启用高级维护控制

  • START_TIME:此节点组中虚拟机的维护窗口(以 GMT 为单位)的开始时间。请设置为 00:0004:0008:0012:0016:0020:00 之一。如果未设置,则节点组没有固定的维护窗口。

  • AUTOSCALER_MODE:节点组的自动扩缩器政策。此项必须为以下值之一:

    • OFF:手动管理节点组的大小。

    • ON:让系统自动向节点组添加节点或从中移除节点。

    • ONLY_SCALE_OUT:在需要额外容量时向节点组添加节点。

  • MIN_NODES:节点组的大小下限。默认值为 0,且必须是小于或等于 MAX_NODES 的整数值。

  • MAX_NODES:节点组的大小上限。 此值必须小于或等于 100 且大于或等于 MIN_NODES。如果 AUTOSCALER_MODE 未设置为 OFF,则必须指定此项。

供应单租户虚拟机

基于之前创建的节点模板创建节点组后,您可以在单租户节点组上供应各个虚拟机。

如需在其亲和性标签与您之前分配给节点模板的亲和性标签匹配的特定节点或节点组上供应虚拟机,请按照创建虚拟机实例的标准过程操作,并为虚拟机分配亲和性标签

或者,您可以按照以下过程,通过节点组详情页面在单租户节点上供应虚拟机。Compute Engine 会根据您在其中供应虚拟机的节点组分配亲和性标签

控制台

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

    转到“单租户节点”

  2. 点击节点组

  3. 点击要在其中供应虚拟机实例的节点组的名称。然后,如需选择在特定单租户节点上供应虚拟机,请点击要用于供应虚拟机的特定单租户节点的名称。

  4. 点击创建实例以在此节点组上供应虚拟机实例,然后记下自动应用于名称地区区域的值,并根据需要修改这些值。

  5. 通过指定机器系列系列机器类型来选择机器配置。选择与单租户节点类型对应的系列

  6. 根据需要修改启动磁盘防火墙和其他设置。

  7. 点击单独租用,记下自动分配的节点亲和性标签,然后根据需要使用浏览进行调整。

  8. 点击管理,然后为主机维护时选择以下任一项:

    • 迁移虚拟机实例(推荐):在维护事件期间将虚拟机迁移到节点组中的其他节点。

    • 终止:在维护事件期间停止虚拟机。

  9. 对于自动重启,请选择以下项之一:

    • 启用(推荐):如果虚拟机因维护事件而停止,则自动重启这些虚拟机。

    • 关闭:在维护事件发生后,系统不会自动重启虚拟机。

  10. 点击创建以完成单租户虚拟机的创建。

gcloud

使用 gcloud compute instances create 命令在单租户节点组上供应虚拟机:

gcloud compute instances create VM_NAME \
  [--zone=ZONE \]
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT \
  --node-group=GROUP_NAME \
  --machine-type=MACHINE_TYPE \
  [--maintenance-policy=MAINTENANCE_POLICY \]
  [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
  [--local-ssd interface=SSD_INTERFACE \]
  [--restart-on-failure]

--restart-on-failure 标志指示单租户虚拟机是否在停止后重启。默认情况下,此标志处于启用状态。如需停用此标志,请使用 --no-restart-on-failure

请替换以下内容:

  • VM_NAME:新的单租户虚拟机的名称。

  • ZONE:要在其中供应单租户虚拟机的可用区。

  • IMAGE_FAMILY:要用于创建虚拟机的映像所属的映像系列

  • IMAGE_PROJECT:映像系列所属的映像项目

  • GROUP_NAME:要在其中供应虚拟机的节点组的名称。

  • MACHINE_TYPE:单租户虚拟机的机器类型。使用 gcloud compute machine-types list 命令获取项目的可用机器类型列表。

  • MAINTENANCE_POLICY:指定在维护事件期间单租户虚拟机的重启行为。设置为以下其中一项:

    • MIGRATE:在维护事件期间将虚拟机迁移到节点组中的其他节点。

    • TERMINATE:在维护事件期间停止虚拟机。

  • GPU_TYPE:GPU 类型。设置为创建节点模板时指定的其中一个加速器类型。

  • GPU_COUNT:节点模板指定的要挂接到此虚拟机的 GPU 总数。默认值为 1

  • SSD_INTERFACE:本地 SSD 接口的类型。您只能为支持本地 SSD 的节点模板创建的实例进行此设置。如果您在创建实例时指定此标志并且节点模板不支持本地 SSD,则实例创建将失败。如果启动磁盘映像驱动程序针对 NVMe 进行了优化,请设置为 nvme,否则设置为 scsi。为每个本地 SSD 分区指定此标志和相应的值。

REST

使用 instances.insert 方法在单租户节点组上供应虚拟机:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/VM_ZONE/instances
{ "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "scheduling": { "onHostMaintenance": MAINTENANCE_POLICY, "automaticRestart": RESTART_ON_FAILURE, "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] }

请替换以下内容:

  • PROJECT_ID:项目 ID。

  • VM_ZONE:要在其中供应单租户虚拟机的可用区。

  • MACHINE_TYPE_ZONE:机器类型的可用区。

  • MACHINE_TYPE:单租户虚拟机的机器类型。使用 machineTypes.list 方法获取项目的可用机器类型列表。

  • VM_NAME:新的单租户虚拟机的名称。

  • MAINTENANCE_POLICY:指定在维护事件期间单租户虚拟机的重启行为。设置为以下其中一项:

    • MIGRATE:在维护事件期间将虚拟机迁移到节点组中的其他节点。

    • TERMINATE:在维护事件期间停止虚拟机。

  • RESTART_ON_FAILURE:指示单租户虚拟机是否在停止后重启。默认值为 true

  • GROUP_NAME:要在其中供应虚拟机的节点组的名称。

  • NETWORK:此虚拟机的网络资源网址。

  • REGION:包含此虚拟机所在的子网的区域。

  • SUBNETWORK:此虚拟机的子网资源网址。

  • GPU_TYPE:GPU 类型。设置为创建节点模板时指定的其中一个加速器类型。

  • GPU_COUNT:节点模板指定的要挂接到此虚拟机的 GPU 总数。默认值为 1

  • IMAGE_PROJECT:映像系列所属的映像项目

  • IMAGE_FAMILY:要用于创建虚拟机的映像所属的映像系列

  • LOCAL_SSD_ZONE:本地 SSD 的可用区。

  • SSD_INTERFACE:本地 SSD 接口的类型。如果启动磁盘映像驱动程序针对 NVMe 进行了优化,请设置为 NVME,否则设置为 SCSI

预配一组单租户虚拟机

通过代管式实例组 (MIG),您可以供应一组完全相同的单租户虚拟机。通过亲和性标签,您可以指定要在其中供应这组单租户虚拟机的单租户节点或节点组。

对于区域级 MIG,您必须在每个区域级 MIG 的可用区中创建节点组,并且必须在区域级 MIG 的实例模板中为这些节点组指定节点亲和性。

gcloud

  1. 使用 gcloud compute instance-templates create 命令为要在单租户节点组上创建的一组虚拟机创建托管式实例组模板:

    gcloud compute instance-templates create INSTANCE_TEMPLATE \
      --machine-type=MACHINE_TYPE \
      --image-project=IMAGE_PROJECT \
      --image-family=IMAGE_FAMILY \
      --node-group=GROUP_NAME \
      [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
      [--local-ssd interface=SSD_INTERFACE]
    

    请替换以下内容:

    • INSTANCE_TEMPLATE:新实例模板的名称。

    • MACHINE_TYPE:单租户虚拟机的机器类型。 使用 gcloud compute machine-types list 命令获取项目的可用机器类型列表。

    • IMAGE_PROJECT:映像系列所属的映像项目

    • IMAGE_FAMILY:要用于创建虚拟机的映像所属的映像系列

    • GROUP_NAME:要在其中供应虚拟机的节点组的名称。 或者,如果您要使用此实例模板创建存在于多个可用区中的区域级 MIG,请使用 --node-affinity-file 标志为该区域级 MIG 的节点组指定值列表。

    • GPU_TYPE:GPU 类型。设置为创建节点模板时指定的其中一个加速器类型。

    • GPU_COUNT:节点模板指定的要挂接到此虚拟机的 GPU 总数。默认值为 1

    • SSD_INTERFACE:本地 SSD 接口的类型。 如果启动磁盘映像驱动程序针对 NVMe 进行了优化,请设置为 nvme,否则设置为 scsi。 为每个本地 SSD 分区指定此标志和相应的值。

  2. 使用 gcloud compute instance-groups managed create 命令在单租户节点组中创建托管式实例组:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
      --size=SIZE \
      --template=INSTANCE_TEMPLATE \
      --zone=ZONE
    

    请替换以下内容:

    • INSTANCE_GROUP_NAME:此实例组的名称。

    • SIZE:要包含在此实例组中的虚拟机的数量。您的节点组必须具有足够的资源来容纳此托管式实例组中的实例。使用托管式实例组自动扩缩器自动管理托管式实例组的大小。

    • INSTANCE_TEMPLATE:用于创建此 MIG 的实例模板的名称。该模板必须具有一个或多个指向相应节点组的节点亲和性标签

    • ZONE:要在其中创建代管式实例组的可用区。 对于区域级 MIG,将 --zone 标志替换为 --region 标志并指定区域;此外,添加 --zones 标志可指定节点组所在的所有可用区。

REST

  1. 使用 instanceTemplates.insert 方法在单租户节点组中创建托管式实例组模板:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/TEMPLATE_ZONE/instance-templates
    { "name": "INSTANCE_TEMPLATE", "properties": { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "scheduling": { "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] } }

    请替换以下内容:

    • PROJECT_ID:项目 ID。

    • TEMPLATE_ZONE:在其中创建实例模板的可用区。

    • INSTANCE_TEMPLATE:新实例模板的名称。

    • MACHINE_TYPE_ZONE:机器类型的可用区。

    • MACHINE_TYPE:单租户虚拟机的机器类型。使用 machineTypes.list 方法获取项目的可用机器类型列表。

    • GROUP_NAME:要在其中预配虚拟机的节点组的名称。 如果您想使用此实例模板创建存在于多个可用区中的区域级 MIG,请指定与该区域级 MIG 位于相同可用区中的节点组列表。

    • NETWORK:此实例模板的网络资源网址。

    • REGION:包含此实例模板所在子网的区域。

    • SUBNETWORK:此实例模板的子网资源网址。

    • GPU_TYPE:GPU 类型。设置为创建节点模板时指定的其中一个加速器类型。

    • GPU_COUNT:节点模板指定的要挂接到此虚拟机的 GPU 总数。默认值为 1

    • IMAGE_PROJECT:映像系列所属的映像项目

    • IMAGE_FAMILY:要用于创建虚拟机的映像所属的映像系列

    • LOCAL_SSD_ZONE:本地 SSD 的可用区。

    • SSD_INTERFACE:本地 SSD 接口的类型。如果启动磁盘映像驱动程序针对 NVMe 进行了优化,请设置为 NVME,否则设置为 SCSI

  2. 使用 instanceGroupManagers.insert 方法,基于先前创建的实例模板在单租户节点组中创建 MIG。或者,如果您要创建区域级 MIG,请使用 regionInstanceGroupManagers.insert 方法,并按照实例模板中所指定的指定所有节点组的区域和可用区。

    例如,如需创建可用区级 MIG,请使用以下请求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    {
      "baseInstanceName": "NAME_PREFIX",
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE"
    }
    

    替换以下内容:

    • PROJECT_ID:项目 ID。

    • ZONE:要在其中创建代管式实例组的可用区。

    • NAME_PREFIX:托管式实例组中每个实例的前缀名称。

    • INSTANCE_GROUP_NAME:实例组的名称。

    • SIZE:要包含在此实例组中的虚拟机的数量。您的节点组必须具有足够的资源来容纳此托管式实例组中的实例。使用托管式实例组自动扩缩器自动管理托管式实例组的大小。

    • INSTANCE_TEMPLATE:用于创建此节点组的实例模板的网址。该模板必须具有指向相应节点组的节点亲和性标签

配置节点亲和性标签

通过节点亲和性标签,您可以对节点组进行逻辑分组,并在一组特定的节点组上调度虚拟机。您还可以使用节点亲和性标签将虚拟机调度到不同区域的节点组上,并仍然保留节点组的逻辑分组。以下过程展示了如何使用亲和性标签将虚拟机与用于生产工作负载的特定节点组关联。 此示例展示了如何调度单个虚拟机,但您也可以使用代管式实例组来调度一组虚拟机。

gcloud

  1. 使用 gcloud compute sole-tenancy node-templates create 命令为生产工作负载创建一个具有一组亲和性标签的节点模板:

    gcloud compute sole-tenancy node-templates create prod-template \
      --node-type=n1-node-96-624 \
      --node-affinity-labels workload=frontend,environment=prod
    
  2. 使用 gcloud compute sole-tenancy node-templates describe 命令查看分配给节点模板的节点亲和性标签。

  3. 使用 gcloud compute sole-tenancy node-groups create 命令创建使用该生产模板的节点组:

    gcloud compute sole-tenancy node-groups create prod-group \
      --node-template=prod-template \
      --target-size=1
    
  4. 对于生产虚拟机,请创建 node-affinity-prod.json 文件,以指定生产虚拟机的亲和性。例如,您可以创建一个文件来指定虚拟机仅在同时具有 workload=frontendenvironment=prod 亲和性的节点上运行。使用 Cloud Shell 创建节点亲和性文件,或在您选择的位置创建该文件。

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "IN",
        "values" : ["prod"]
      }
    ]
    
  5. 搭配使用 node-affinity-prod.json 文件和 gcloud compute instances create 命令,在具有匹配的亲和性标签的节点组上调度虚拟机。

    gcloud compute instances create prod-vm \
      --node-affinity-file node-affinity-prod.json \
      --machine-type=n1-standard-2
    
  6. 使用 gcloud compute instances describe 命令并检查 scheduling 字段,以查看分配给虚拟机的节点亲和性。

配置节点反亲和性标签

您可以将节点亲和性标签配置为反亲和性标签,以防止虚拟机在特定节点上运行。例如,您可以使用反亲和性标签来防止用于开发目的的虚拟机被调度到生产虚拟机所在的相同节点上。以下示例展示了如何使用亲和性标签来阻止虚拟机在特定节点组上运行。此示例展示了如何调度单个虚拟机,但您也可以使用代管式实例组来调度一组虚拟机。

gcloud

  1. 对于开发虚拟机,请指定开发虚拟机的亲和性,方法是使用 Cloud Shell 创建 node-affinity-dev.json 或在您选择的位置创建该文件。例如,您可以创建文件来将虚拟机配置为在具有 workload=frontend 亲和性但不具有 environment=prod 亲和性的任何节点组中运行:

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "NOT_IN",
        "values" : ["prod"]
      }
    ]
    
  2. 搭配使用 node-affinity-dev.json 文件与 gcloud compute instances create 命令来创建开发虚拟机:

    gcloud compute instances create dev-vm \
      --node-affinity-file=node-affinity-dev.json \
      --machine-type=n1-standard-2
    
  3. 使用 gcloud compute instances describe 命令并检查 scheduling 字段,以查看分配给虚拟机的节点反亲和性。

删除一个节点组

如果您需要删除单租户节点组,请先从该节点组中移除任何虚拟机。

控制台

  1. 转到单租户节点页面。

    转到“单租户节点”

  2. 点击要删除的节点组的名称

  3. 对于节点组中的每个节点,请点击该节点的名称,然后在节点详情页面上删除各个虚拟机实例,或按照删除单个虚拟机的标准过程执行操作。如需删除托管式实例组中的虚拟机,请删除托管式实例组

  4. 删除在节点组的所有节点上运行的所有虚拟机实例后,请返回单租户节点页面。

    转到单租户节点

  5. 点击节点组

  6. 选择需要删除的节点组的名称。

  7. 点击删除

gcloud

  1. 使用 gcloud compute sole-tenancy node-groups list-nodes 命令列出节点组内的节点上正在运行的虚拟机实例:

    gcloud compute sole-tenancy node-groups list-nodes GROUP_NAME \
      --zone=ZONE

    替换以下内容:

    • GROUP_NAME:节点组的名称

    • ZONE:节点组所在的区域

  2. 如果节点组上有任何虚拟机正在运行,请按照删除单个虚拟机的过程删除代管式实例组的过程进行操作。

  3. 删除在节点组的所有节点上运行的所有虚拟机后,请使用 gcloud compute sole-tenancy node-groups delete 命令删除该节点组:

    gcloud compute sole-tenancy node-groups delete GROUP_NAME \
        --zone=ZONE

    请替换以下内容:

    • GROUP_NAME:节点组的名称

    • ZONE:节点组的可用区

REST

  1. 使用 nodeGroups.listNodes 方法列出节点组中的节点上正在运行的虚拟机实例:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/nodeGroups/GROUP_NAME/listNodes

    请替换以下内容:

    • PROJECT_ID:项目 ID

    • ZONE:节点组的可用区

    • GROUP_NAME:要为其列出虚拟机的组

  2. 如果节点组上有任何虚拟机正在运行,请按照删除单个虚拟机的过程删除代管式实例组的过程进行操作。

  3. 删除在节点组的所有节点上运行的所有虚拟机后,请使用 nodeGroups.delete 方法删除该节点组:

    DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/nodeGroups/GROUP_NAME
    

    请替换以下内容:

    • PROJECT_ID:项目 ID

    • ZONE:节点组的可用区

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

删除节点模板

您可以在删除使用某个节点模板的所有节点组后删除该模板。

控制台

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

    转到“单租户节点”

  2. 点击节点模板

  3. 选择某个未使用的节点模板的名称。

  4. 点击删除

gcloud

使用 gcloud compute sole-tenancy node-templates delete 命令删除未使用的节点模板:

gcloud compute sole-tenancy node-templates delete TEMPLATE_NAME \
  --region=REGION

请替换以下内容:

  • TEMPLATE_NAME:要删除的节点模板的名称

  • REGION:节点模板的区域

REST

使用 compute.nodeTemplates.delete 方法删除未使用的节点模板:

 DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/nodeTemplates/TEMPLATE_NAME
 

替换以下内容:

  • PROJECT_ID:您的项目 ID

  • REGION:包含节点模板的 Google Cloud 地区

  • TEMPLATE_NAME:要删除的节点模板的名称

后续步骤