创建 MIG 以包含一个区域中的多个可用区的虚拟机


本文档介绍如何创建代管式实例组 (MIG),使其虚拟机分布在一个区域内的多个可用区中。将应用负载分布到多个区域可保护您的工作负载免受可用区性故障的影响。如果发生可用区性故障,您的应用可以继续通过在同一区域的其他可用可用区中运行的实例提供服务。

这种类型的 MIG 也称为区域级 MIG。如需了解详情,请参阅区域级 MIG 简介

您还可以阅读创建 MIG 的其他基本场景

准备工作

  • 创建实例模板,以便创建代管式实例组。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    限制

    如需查看 MIG 限制的完整列表(因您使用的配置而异),请参阅 MIG 限制

    创建 MIG 以包含一个区域中的多个可用区的虚拟机

    使用 Google Cloud consolegcloud CLI、Terraform 或 REST

    控制台

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

      转到“实例组”

      其余步骤会显示在 Google Cloud 控制台中。

    2. 点击创建实例组以创建一个新的实例组。
    3. 选择新代管式实例组选项之一:
    4. 为实例组指定名称和(可选)说明。
    5. 为实例组选择一个实例模板或创建一个新实例模板
    6. 实例数自动扩缩中,指定此实例组的实例数。请务必预配足够多的虚拟机,以便在一个可用区发生故障时,您的应用可获得相应的支持。
    7. 对于位置,选择多个可用区
    8. 选择一个区域,然后选择要使用的可用区。如果您选择了区域级实例模板,则系统会根据模板的区域自动选择区域
    9. 目标分布形状下,选择均匀。如果您想选择其他形状,请参阅为区域级 MIG 中的虚拟机设置目标分布形状
    10. 如果您要停用主动式实例重新分布功能,请在实例重新分布下,取消选中 Allow instance redistribution(允许实例重新分布)复选框。
    11. 继续完成 MIG 创建过程的剩余部分。
    12. 如需创建 MIG,请点击创建

    gcloud

    所有 MIG 都需要实例模板。如果您没有实例模板,请创建一个。例如,以下命令会在 us-east1 区域中创建具有默认实例属性的实例模板:

    gcloud compute instance-templates create example-template --instance-template-region us-east1

    创建 MIG 时,您可以指定实例模板的 ID 或名称。Google 建议您指定 ID,因为与名称不同,实例模板 ID 无法重复使用。如需查看您创建的实例模板的唯一 ID,请使用 describe 命令

    gcloud compute instance-templates describe example-template --region us-east1 --format="value(id)"

    接下来,使用带有 --region 标志的 instance-groups managed create 命令。例如,以下命令会在 us-east1 区域内的三个可用区中创建一个区域级 MIG:

    gcloud compute instance-groups managed create example-rmig \
        --template projects/my-project/regions/us-east1/instanceTemplates/1234567890 \
        --size 30 \
        --region us-east1

    如果要选择实例组应使用的特定区域,请提供 --zones 标志:

    gcloud compute instance-groups managed create example-rmig \
        --template projects/my-project/regions/us-east1/instanceTemplates/1234567890 \
        --size 30 \
        --zones us-east1-b,us-east1-c

    如果您不需要使用特定可用区,可以指定所有可用区并使用平衡分发形状。如需了解详情,请参阅虚拟机在各可用区中的分布

    如果您要停用主动式实例重新分布功能,请参阅主动式实例重新分布

    Terraform

    如果您尚未创建您希望为 MIG 中的每个虚拟机指定机器类型、启动磁盘映像、网络和其他虚拟机属性的实例模板,请创建实例模板

    如需创建区域级 MIG,您可以使用 google_compute_region_instance_group_manager 资源

    resource "google_compute_region_instance_group_manager" "default" {
      name                      = "example-rmig"
      region                    = "us-east1"
      distribution_policy_zones = ["us-east1-b", "us-east1-c"]
      target_size               = 30
      base_instance_name        = "instance"
      version {
        instance_template = google_compute_instance_template.default.id
      }
    }

    如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

    REST

    所有 MIG 都需要实例模板。如果您没有实例模板,请创建一个

    创建 MIG 时,您可以指定实例模板的 ID 或名称。Google 建议您指定 ID,因为与名称不同,实例模板 ID 无法重复使用。如需查看您创建的实例模板的唯一 ID,请对您创建的区域全局实例模板使用 get 方法。

    接下来,构建对 regionInstanceGroupManagers.insert 方法POST 请求。在请求正文中,指定实例组名称、实例组大小和实例模板的网址。(可选)指定其他字段,例如实例组中实例的基本名称。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
    
    {
      "baseInstanceName": "BASE_INSTANCE_NAME",
      "instanceTemplate": "INSTANCE_TEMPLATE_URL",
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": "TARGET_SIZE"
    }
    

    替换以下内容:

    • PROJECT_ID:此请求的项目 ID。
    • REGION:该实例组所在的区域。
    • BASE_INSTANCE_NAME:(可选)实例组中创建的每个虚拟机实例的名称。例如,基本实例名称 example-instance 将创建名称类似于 example-instance-[RANDOM_STRING] 的实例,其中 [RANDOM_STRING] 由服务器生成。
    • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建虚拟机的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
      • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
      • 对于全球实例模板:INSTANCE_TEMPLATE_ID
    • TARGET_SIZE:实例组中的虚拟机的目标数量。

    如果您要选择特定可用区,或者要在包含的可用区少于或多于三个的区域中创建虚拟机,请在您的请求中添加 distributionPolicy 属性并提供可用区列表。将 ZONE 替换为要在其中创建虚拟机的可用区的名称。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
    
    {
      "baseInstanceName": "BASE_INSTANCE_NAME",
      "instanceTemplate": "INSTANCE_TEMPLATE_URL",
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": "TARGET_SIZE",
      "distributionPolicy": {
         "zones": [
           {"zone": "zones/ZONE"},
           {"zone": "zones/ZONE"}
          ]
       }
    }

    例如,以下命令会创建一个名为 example-rmig 的区域级 MIG,其中的 10 个代管实例分布在 us-east1-bus-east1-c 可用区:

    POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers
    
    {
      "instanceTemplate": "projects/my-project/regions/us-east1/instanceTemplates/1234567890",
      "name": "example-rmig",
      "targetSize": 10,
      "distributionPolicy": {
          "zones": [
            {"zone": "zones/us-east1-b"},
            {"zone": "zones/us-east1-c"}
          ]
       }
    }

    各种政策和操作可能会影响组中的实例,具体取决于您对 MIG 进行配置和操作的方式。若要确定哪些代管实例已启动并正在运行,请参阅检查代管实例的状态

    如果每个可用区中没有足够的容量来支持实例组中的虚拟机,则 Compute Engine 会创建尽可能多的虚拟机,并在后续获得额外容量时继续尝试创建其余虚拟机。

    如果您未在请求中明确指定各个可用区,则 Compute Engine 会自动选择三个可用区来创建虚拟机。如果您需要在多于或少于三个可用区中创建虚拟机,或者您希望选择使用哪些可用区,可以在您的请求中提供可用区列表。如需了解详情,请参阅可用区选择

    跨可用区的虚拟机分布

    默认情况下,区域级 MIG 会在选定的可用区之间均匀分布虚拟机。由于您要创建区域 MIG,因此需要注意,某些资源是可用区级的,例如 GPU 和现有永久性磁盘。如果 MIG 的实例模板指定了可用区级资源,您必须确保所有选定可用区中都存在所有这些资源,这样这些资源才能够附加到区域 MIG 创建的虚拟机。或者,如果您希望实例组替您检查是否存在可用区级资源,则可以设置 MIG 的目标分布形状,以仅在包含这些资源的可用区中创建实例。

    有关详情,请参阅以下文档:

    主动式实例重新分布

    主动式实例重新分布功能默认启用。如果您需要手动管理每个可用区中的虚拟机数量或将 MIG 的目标分布形状设置为 BALANCEDANY_SINGLE_ZONE,则必须停用主动式实例重新分布功能。

    如需了解详情,请参阅以下文档:

    后续步骤