创建使用批量模式的 MIG

本文档介绍如何在 MIG 中使用批量模式,同时创建所需的所有虚拟机 (VM) 实例。一次性创建实例可确保 MIG 仅在所有必要资源都可用时创建实例。

如需了解批量模式的工作原理,请参阅 关于在 MIG 中批量创建实例

创建实例模板

MIG 中的批量模式仅支持指定了“受预留约束”或“灵活启动”预配模型的实例模板。如需使用批量模式,请使用以下部分中所述的其中一种预配模型创建实例模板。如需详细了解预配模型,请参阅 Compute Engine 实例预配模型

使用“受预留约束”预配模型

如需创建实例模板,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,转到实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板。 系统会打开创建实例模板页面。

  3. 名称字段中,输入实例模板的名称。

  4. 位置部分,选择以下选项之一:

    • 如需创建区域级实例模板,请选择区域级(推荐),然后选择要创建模板的区域。

    • 如需创建全球实例模板,请选择全球

  5. 机器配置 部分中,指定机器类型。

  6. 预配模型 部分中,完成以下步骤:

    1. 展开虚拟机预配模型高级设置

    2. 虚拟机终止时列表中,选择删除

  7. 可选:如需更改启动磁盘类型或映像的默认值,请在启动磁盘部分中,点击更改。然后,按照提示更改启动磁盘。

  8. 展开高级选项部分,然后执行以下操作:

    1. 展开管理部分。

    2. 预留部分中,选择选择预留,然后点击选择预留。 在随即显示的窗格中,按照提示选择您要使用的预留。

  9. 点击创建

gcloud

如需创建实例模板,请将 instance-templates create 命令与以下标志设置结合使用:

  • --instance-termination-action 标志设置为 DELETE

  • --maintenance-policy 标志设置为 TERMINATE

  • --provisioning-model 标志设置为 RESERVATION_BOUND

  • --reservation-affinity 标志设置为 specific

  • --reservation 标志。

以下示例命令会创建一个区域级实例模板。如果您要创建全球实例模板,请使用相同的命令,但不使用 --instance-template-region 标志。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --instance-termination-action=DELETE \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --provisioning-model=RESERVATION_BOUND \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:要创建的实例模板的名称。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE_FAMILY:一個 映像系列。指定映像系列以使用最新的未弃用操作系统映像。例如,如果您指定 debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅 映像系列最佳实践

  • REGION:要在其中创建实例模板的区域。

  • MACHINE_TYPE:您要使用的预留中指定的机器类型。

  • RESERVATION_URL:为您要使用的日历模式下的未来预留自动创建的预留的网址。请指定以下某个值:

    • 如果自动创建的预留存在于您的项目中:RESERVATION_NAME

    • 如果自动创建的预留存在于其他项目中:projects/PROJECT_ID/reservations/RESERVATION_NAME

REST

如需创建实例模板,请向以下方法之一发出 POST 请求:

在请求正文中,添加以下字段:

  • 设置为 SPECIFIC_RESERVATIONreservationAffinity.consumeReservationType 字段。

  • 设置为 compute.googleapis.com/reservation-namereservationAffinity.key 字段。

  • 设置为自动创建的预留的网址的 reservationAffinity.values 字段。

  • 设置为 DELETEscheduling.instanceTerminationAction 字段。

  • 设置为 TERMINATEscheduling.onHostMaintenance 字段。

  • 设置为 RESERVATION_BOUNDscheduling.provisioningModel 字段。

例如,如需创建区域级实例模板,请发出如下请求:

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "reservationAffinity": {
      "consumeReservationType": "SPECIFIC_RESERVATION",
      "key": "compute.googleapis.com/reservation-name",
      "values": [
        "RESERVATION_URL"
      ]
    },
    "scheduling": {
      "instanceTerminationAction": "DELETE",
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "RESERVATION_BOUND"
    }
  }
}

替换以下内容:

  • PROJECT_ID:要创建实例模板的项目 ID。

  • REGION:要在其中创建实例模板的区域。

  • INSTANCE_TEMPLATE_NAME:要创建的实例模板的名称。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE:指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20240617

    • 一个映像系列,其格式必须为 family/IMAGE_FAMILY。指定映像系列以使用最新的未弃用操作系统映像。例如,如果您指定 family/debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用 映像系列,请参阅 映像系列最佳实践

  • MACHINE_TYPE:您要使用的预留中指定的机器类型。

  • RESERVATION_URL:为您要使用的日历模式下的未来预留自动创建的预留的网址。请指定以下某个值:

    • 如果自动创建的预留存在于您的项目中:RESERVATION_NAME

    • 如果自动创建的预留存在于其他项目中:projects/PROJECT_ID/reservations/RESERVATION_NAME

如需详细了解如何创建实例模板,请参阅 创建实例模板

使用“灵活启动”预配模型

如需创建实例模板,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,转到实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板。 系统会打开创建实例模板页面。

  3. 名称字段中,输入实例模板的名称。

  4. 位置部分,选择以下选项之一:

    • 如需创建区域级实例模板,请选择区域级(推荐),然后选择要创建模板的区域。

    • 如需创建全球实例模板,请选择全球

  5. 机器配置 部分中,指定机器类型。

  6. 预配模型 部分中,完成以下步骤:

    1. 虚拟机预配模型列表中,选择灵活启动

    2. 展开虚拟机预配模型高级设置

    3. 选中为虚拟机设置时间限制 复选框。

    4. 如需为通过实例模板创建的虚拟机设置运行时长,请在输入小时数 字段中输入小时数。该值必须介于 36 秒 (0.01) 到 7 天 (168) 之间。

  7. 可选:如需更改启动磁盘类型或映像的默认值,请在启动磁盘部分中,点击更改。然后,按照提示更改启动磁盘。

  8. 点击创建

gcloud

如需创建实例模板,请将 instance-templates create 命令与以下标志设置结合使用:

  • --instance-termination-action 标志设置为 DELETE

  • --maintenance-policy 标志设置为 TERMINATE

  • --max-run-duration 标志。

  • --provisioning-model 标志设置为 FLEX_START

  • --reservation-affinity 标志设置为 none

以下示例命令会创建一个区域级实例模板。如果您要创建全球实例模板,请使用相同的命令,但不使用 --instance-template-region 标志。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --instance-template-region=REGION \
    --instance-termination-action=DELETE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --max-run-duration=RUN_DURATION \
    --provisioning-model=FLEX_START \
    --reservation-affinity=none

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:要创建的实例模板的名称。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE_FAMILY:一個 映像系列。指定映像系列以使用最新的未弃用操作系统映像。例如,如果您指定 debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅 映像系列最佳实践

  • REGION:要在其中创建实例模板的区域。

  • MACHINE_TYPE:要用于灵活启动虚拟机的机器类型。如果您指定 N1 机器类型,则 必须添加 --accelerator 标志 以定义要挂接到虚拟机的 GPU 的数量和类型。

  • RUN_DURATION:您希望请求的虚拟机运行的时长。您必须将该值的格式设置为天数、小时数、分钟数或秒数,并分别添加对应的后缀 dhms。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。

REST

如需创建实例模板,请向以下方法之一发出 POST 请求:

在请求正文中,添加以下字段:

  • 设置为 NO_RESERVATIONreservationAffinity.consumeReservationType 字段。

  • 设置为 DELETEscheduling.instanceTerminationAction 字段。

  • scheduling.maxRunDuration 字段。

  • 设置为 TERMINATEscheduling.onHostMaintenance 字段。

  • 设置为 FLEX_STARTscheduling.provisioningModel 字段。

以下示例请求会创建一个区域级实例模板:

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "reservationAffinity": {
      "consumeReservationType": "NO_RESERVATION"
    },
    "scheduling": {
      "instanceTerminationAction": "DELETE",
      "maxRunDuration": {
        "seconds": RUN_DURATION
      },
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "FLEX_START"
    }
  }
}

替换以下内容:

  • PROJECT_ID:要创建实例模板的项目 ID。

  • REGION:要在其中创建实例模板的区域。

  • INSTANCE_TEMPLATE_NAME:要创建的实例模板的名称。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE:指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20240617

    • 一个映像系列,其格式必须为 family/IMAGE_FAMILY。指定映像系列以使用最新的未弃用操作系统映像。例如,如果您指定 family/debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用 映像系列,请参阅 映像系列最佳实践

  • MACHINE_TYPE:要用于虚拟机的机器类型。如果您指定 N1 机器类型,则必须添加 guestAccelerators字段 以定义要挂接到虚拟机的 GPU 的数量和类型。

  • RUN_DURATION:您希望请求的虚拟机运行的时长(以秒为单位)。该值必须介于 600(600 秒,即 10 分钟)到 604800(604,800 秒,即 7 天)之间。

如需详细了解如何创建实例模板,请参阅 创建实例模板

创建使用批量模式的 MIG

如需在 MIG 中启用批量创建实例,请在 MIG 的配置中将 targetSizePolicy.mode 字段设置为 BULK。使用此批量模式时,MIG 会等待所有资源都可用,然后一次性创建实例。

控制台

  1. 前往实例组页面。

    进入“实例组”

  2. 点击创建实例组。 此时会打开创建实例组页面。

  3. 名称 字段中,输入 MIG 的名称。

  4. 在选择实例模板之前,您必须执行以下操作:

    1. 如果您使用“灵活启动”预配模型,则必须按如下方式关闭修复功能:
      1. 虚拟机实例生命周期 部分中,取消选中允许在备用可用区中修复虚拟机 复选框。
      2. 失败时的默认操作 列表中,选择无操作
    2. 位置 部分中,执行以下操作:
      • 如需创建可用区级 MIG,请选择单个可用区
      • 如需创建区域级 MIG,请选择多个可用区 。在 目标分布形状 中,选择任意单个可用区。在随即显示的对话框中,选择停用实例重新分配
  5. 返回到实例模板 字段。在实例模板 列表中,选择您在上一部分中创建的实例模板。

  6. 实例数 字段中,指定您要一次性创建的实例数。

  7. 选中使用批量目标大小政策一次性获取所有虚拟机 复选框。

  8. 点击创建

gcloud

如需创建启用了批量创建的 MIG,请使用 gcloud compute instance-groups managed create 命令 并将 --target-size-policy-mode 标志设置为 bulk

如果您使用“灵活启动”预配模型,则必须在 MIG 中关闭修复功能,方法是在以下命令中添加 --default-action-on-vm-failure=do-nothing 标志。

  • 如需创建可用区级 MIG,请运行以下命令:
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --target-size-policy-mode=bulk \
    --template=INSTANCE_TEMPLATE_URL \
    --zone=ZONE \
  • 如需创建区域级 MIG,请运行以下命令:
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --target-size-policy-mode=bulk \
    --template=INSTANCE_TEMPLATE_URL \
    --zones=LIST_OF_ZONES \

替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称。
  • SIZE:MIG 中的实例数。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建实例的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • ZONE:MIG 在其中创建实例的可用区。
  • LIST_OF_ZONES:区域级 MIG 在其中创建实例的可用区的逗号分隔列表。例如,us-central1-a, us-central1-b, us-central1-c

REST

如需创建启用了批量创建的 MIG,请发出 POST 请求,如下所示。在请求正文中,将 targetSizePolicy.mode 字段设置为 bulk

如果您使用“灵活启动”预配模型,则必须在 MIG 中关闭修复功能 ,方法是在以下请求中添加 "instanceLifecyclePolicy": {"defaultActionOnFailure": "DO_NOTHING"}字段 。

  • 如需创建可用区级 MIG,请向 instanceGroupManagers.insert 方法发出 POST 请求。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    
    {
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "targetSizePolicy": {
        "mode": "bulk"
      },
      "versions": [
        {
          "instanceTemplate": "INSTANCE_TEMPLATE_URL"
        }
      ]
    }
    
  • 如需创建区域级 MIG,请向 regionInstanceGroupManagers.insert方法发出POST请求。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
    
    {
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "targetSizePolicy": {
        "mode": "bulk"
      },
      "versions": [
        {
          "instanceTemplate": "INSTANCE_TEMPLATE_URL"
        }
      ]
    }
    

替换以下内容:

  • PROJECT_ID:项目 ID。
  • ZONE:MIG 在其中创建实例的可用区。
  • REGION:MIG 在其中创建实例的区域。
  • INSTANCE_GROUP_NAME:MIG 的名称。
  • SIZE:MIG 中的实例数。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建实例的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID

添加或删除实例

在使用批量模式的 MIG 中,您可以通过手动增加或减少 MIG 的目标大小来添加或移除实例。

  • 添加实例:当您将目标大小从零增加时,MIG 会以与创建 MIG 相同的方式添加 实例。当 MIG 中没有实例时,您还可以使用 createInstances 方法创建具有特定名称的实例。如需创建具有特定名称的实例,请参阅 在 MIG 中创建具有特定名称的实例

  • 删除实例:当您将目标大小减小到零时,MIG 会删除组中的所有现有实例,并取消任何正在进行的创建操作 。 您可以通过将目标大小减小到 0 来移除实例。如需减小到非零大小,MIG 不得有正在进行的批量实例操作(bulkInstanceOperation.inProgress 必须为 false)。

如需通过更改目标大小来在 MIG 中添加或移除实例,请参阅 手动设置 MIG 的大小

后续步骤