在区域级 MIG 中停用和重新启用主动式虚拟机重新分布功能


区域级代管式实例组 (MIG) 中,如需在该区域的选定可用区中保持均匀的虚拟机 (VM) 实例数量,请使用主动式实例重新分布功能。此配置选项可在出现可用区级别故障时最大限度地提高应用的可用性。

对于区域级 MIG,主动式实例重新分布功能默认处于开启状态。主动式实例重新分布功能关闭时,实例组不会尝试主动在可用区之间重新分布虚拟机。在以下情况下,关闭主动式实例重新分布功能非常有用:

  • 从实例组中删除放弃虚拟机而不影响其他正在运行的虚拟机。例如,您可以在作业完成后删除批处理工作器虚拟机,而不影响其他工作器。
  • 避免系统由于执行主动式重新分布操作而意外自动删除具有有状态工作负载的虚拟机。
  • 将 MIG 的目标分布形状设置为 BALANCEDANY_SINGLE_ZONE

您可以在创建区域级 MIG 时停用主动式实例重新分布功能。您还可以为现有的区域级 MIG 启用或停用该功能。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

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

      gcloud init
    2. 设置默认区域和可用区

    REST

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

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

      gcloud init

创建停用了主动式实例重新分布功能的实例组

如需创建停用了主动式实例重新分布功能的区域级 MIG,请使用 Google Cloud 控制台gcloud CLI、Terraform 或 REST

控制台

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

    转到“实例组”页面

  2. 点击创建实例组以创建一个新的实例组。
  3. 为实例组指定名称和(可选)说明。
  4. 为实例组选择一个实例模板或创建一个新实例模板。
  5. 指定此实例组内的虚拟机数量。对于高可用性工作负载,请务必预配足够多的虚拟机,以便在一个可用区发生故障时,应用可获得相应的支持。
  6. 位置下,选择多个可用区
  7. 选择一个区域,然后选择要使用的可用区。
  8. 如需停用主动式实例重新分布功能,请在实例重新分布下,取消选中 Allow instance redistribution(允许实例重新分布)复选框。
  9. 继续完成 MIG 创建过程的剩余部分。

gcloud

如需创建不具备主动式实例重新分布功能的新地区级 MIG,请使用 gcloud compute instance-groups managed create 命令,并将 --instance-redistribution-type 标志设置为 NONE

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称
  • INSTANCE_TEMPLATE_NAME:要用于实例组的实例模板的名称
  • TARGET_SIZE:实例组的目标大小
  • ZONES:要在其中部署虚拟机的单个区域中的可用区列表

例如:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

Terraform

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

如需创建区域级 MIG,请使用 google_compute_region_instance_group_manager 资源

如需在区域级 MIG 中停用主动式实例重新分布功能,请添加 update_policy 块,并将 instance_redistribution_type 字段设置为 NONE

resource "google_compute_region_instance_group_manager" "default" {
  name                      = "example-rmig"
  region                    = "us-east1"
  distribution_policy_zones = ["us-east1-b", "us-east1-c"]
  update_policy {
    type                         = "PROACTIVE"
    minimal_action               = "REFRESH"
    instance_redistribution_type = "NONE"
    max_unavailable_fixed        = 3
  }
  target_size        = 30
  base_instance_name = "instance"
  version {
    instance_template = google_compute_instance_template.default.id
  }
}

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

REST

如需创建不具备主动式实例重新分布功能的非自动扩缩地区级 MIG,请向 regionInstanceGroupManagers.insert 方法发出 POST 请求。在请求正文中,添加 updatePolicy 属性并将其 instanceRedistributionType 字段设置为 NONE

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

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": TARGET_SIZE,
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • REGION:实例组所在的地区
  • INSTANCE_GROUP_NAME:MIG 的名称
  • INSTANCE_TEMPLATE_NAME:要用于实例组的实例模板的名称
  • TARGET_SIZE:实例组的目标大小
  • ZONE:要在其中部署虚拟机的单个区域中的可用区名称

关闭主动式实例重新分布功能

如需停用或重新启用主动式实例重新分布功能,请使用 Google Cloud 控制台gcloud CLIREST

控制台

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

    转到“实例组”页面

  2. 在列表的名称列下方,点击您要修改的实例组的名称。
  3. 点击修改以修改此代管实例组。
  4. 实例重新分布下,取消选中 Allow instance redistribution(允许实例重新分布)复选框。
  5. 点击保存

gcloud

如需关闭主动式实例重新分布功能,请使用以下命令将 --instance-redistribution-type 标志设置为 NONE

请替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称
  • REGION:实例组所在的地区

REST

如需关闭主动式实例重新分布功能,请使用如下方法将 instanceRedistributionType 字段设置为 NONE

  • 对于非自动扩缩的区域级 MIG 或模式设置为 OFFONLY_SCALE_OUT 的自动扩缩的区域级 MIG,请使用 regionInstanceGroupManagers.patch 方法

    例如:

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME
    
    {
     "updatePolicy": {
        "instanceRedistributionType": "NONE"
     }
    }
    
  • 对于模式设置为 ON 的自动扩缩的区域级 MIG,请使用 Beta 版 regionInstanceGroupManagers.patch 方法

    例如:

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME
    
    {
     "updatePolicy": {
          "instanceRedistributionType": "NONE"
      }
    }
    

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • REGION:实例组所在的地区
  • INSTANCE_GROUP_NAME:MIG 的名称

开启主动式实例重新分布功能

如需开启主动式实例重新分布功能,请使用与关闭主动式实例重新分布功能类似的命令,但将实例重新分布类型设置为 PROACTIVE

如果您手动删除或放弃某些代管式实例,导致区域中虚拟机分布不均匀,则必须先手动重新平衡实例组,然后才能重新启用主动式实例重新分布功能。任意两个区域的虚拟机数量差不应超过 1 个虚拟机。

当各个区域中的虚拟机分布不均匀(两个区域的虚拟机数量差为 2 个或以上虚拟机)时,地区级 MIG 不允许启用主动式实例重新分布功能。这是为了防止意外自动删除具有较多虚拟机的区域中的虚拟机,该操作会为了实现均匀分布而触发。

后续步骤