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


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

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

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

准备工作

  • 创建实例模板,以便创建代管式实例组。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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. Terraform

      如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。

      1. 安装 Google Cloud CLI。
      2. 如需初始化 gcloud CLI,请运行以下命令:

        gcloud init
      3. 为您的 Google 账号创建本地身份验证凭据:

        gcloud auth application-default login

      如需了解详情,请参阅 Set up authentication for a local development environment

      REST

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

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

        gcloud init

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

限制

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

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

使用 Google Cloud 控制台gcloud 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 都需要实例模板。如果您没有实例模板,请创建一个。例如,以下命令会创建具有默认属性的基本实例模板:

gcloud compute instance-templates create example-template

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

gcloud compute instance-groups managed create example-rmig \
    --template example-template  \
    --size 30 \
    --region us-east1

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

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --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 都需要实例模板。如果您没有实例模板,请创建一个

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

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

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE"
}

替换以下内容:

  • PROJECT_ID:此请求的项目 ID。
  • REGION:该实例组所在的区域。
  • BASE_INSTANCE_NAME:(可选)实例组中创建的每个虚拟机实例的名称。例如,基本实例名称 example-instance 将创建名称类似于 example-instance-[RANDOM_STRING] 的实例,其中 [RANDOM_STRING] 由服务器生成。
  • INSTANCE_TEMPLATE_NAME:要使用的实例模板。对于区域级实例模板,您必须指定模板的完整或部分网址。完整网址的示例是 https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceTemplates/example-regional-instance-template,部分网址是 projects/example-project/regions/us-central1/instanceTemplates/example-regional-instance-template
  • INSTANCE_GROUP_NAME:MIG 的名称。
  • TARGET_SIZE:实例组中的虚拟机的目标数量。

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

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

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "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": "global/instanceTemplates/example-instance",
  "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,则必须停用主动式实例重新分布功能。

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

后续步骤