通过已暂停和已停止的虚拟机加速扩容

本文档介绍了已暂停和已停止的虚拟机 (VM) 实例的备用池的工作原理,以及如何使用备用池来加速托管式实例组 (MIG) 的扩容。

准备工作

使用 MIG API 进行自动扩缩

我们建议您使用 Compute Engine 自动扩缩器来自动扩缩 MIG。不过,如果您出于某种原因更倾向于使用其他自动扩缩器,请使用 MIG API 的端点来处理已暂停和已停止的虚拟机。

在已暂停和已停止的池之间选择

在已暂停和已停止的池之间选择取决于您的具体应用场景。为了获得最佳性能,您应该针对扩容场景尝试不同的备用池类型,以确定哪种类型最符合您的需求。 不同工作负载可能展示使用不同选项进行处理的时间更短。在某些情况下,将内存状态从存储复制到虚拟机这一操作所花费的时间可能比重启虚拟机或从头开始创建新虚拟机的时间更长。

为了找到最佳方法,请先参考以下准则:

  • 如果虚拟机需要耗时的内存初始化,请使用已暂停的虚拟机,因为已暂停的虚拟机会保留内存状态。确保您的应用可以暂停和恢复。保留内存状态需要额外的存储空间,并且可能会产生额外费用。
  • 如果虚拟机初始化主要侧重于初始化存储在永久性磁盘中的数据,请使用已停止的虚拟机。

修改 MIG 中的待机政策

本部分介绍了如何设置备用池模式来扩容池,以及如何设置初始延迟时间。

控制台

  1. 在 Trusted Cloud 控制台中,前往实例群组页面。

    进入“实例组”

  2. 在列表的名称列下方,点击要在其中修改待机政策的实例组的名称。

  3. 点击编辑以修改此托管式实例组。

  4. 点击显示高级配置

  5. 备用池部分的模式下,选择扩容

  6. 初始延迟字段中,输入 MIG 在暂停或停止虚拟机之前应等待的秒数。初始延迟时间可让初始化脚本有时间来准备虚拟机以快速地进行扩容。

  7. 点击保存

gcloud

使用 instance-groups managed update 命令并指定操作模式和初始延迟时间。

gcloud compute instance-groups managed update MIG_NAME \
  --standby-policy-mode=scale-out-pool \
  --standby-policy-initial-delay=DELAY \
  [--region=REGION | --zone=ZONE]

替换以下内容:

  • MIG_NAME:MIG 的名称。
  • DELAY:MIG 在暂停或停止虚拟机之前应等待的秒数。初始延迟时间可让初始化脚本有时间来准备虚拟机以快速地进行扩容。
  • REGION:对于区域级 MIG,这是 MIG 所在的区域。
  • ZONE:对于可用区级 MIG,这是 MIG 所在的可用区。

Terraform

以下示例会创建一个具有备用政策的可用区级 MIG。使用 standby_policy 块设置初始延迟时间,并将模式设置为 SCALE_OUT_POOL

该示例使用 google_compute_instance_group_manager 资源。对于区域级 MIG,请使用 google_compute_region_instance_group_manager 资源

resource "google_compute_instance_group_manager" "default" {
  name               = "standby-mig"
  base_instance_name = "test"
  target_size        = 3
  zone               = "us-central1-f"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  standby_policy {
    initial_delay_sec = 50
    mode              = "SCALE_OUT_POOL"
  }
}

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

REST

使用 instanceGroupManager.patch 方法并在请求正文中指定操作模式和初始延迟时间。对于区域级 MIG,请使用 regionInstanceGroupManager.patch 方法

PATCH https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
// ...
"standbyPolicy": {
  "mode": "SCALE_OUT_POOL",
  "initialDelaySec": DELAY
}
// ...
}

替换以下内容:

  • PROJECT_ID:您的项目的 ID。
  • ZONE:对于可用区级 MIG,这是 MIG 所在的可用区。
    • 对于区域级 MIG,将 zones/ZONE 替换为 regions/REGION 并指定 MIG 所在的区域。
  • MIG_NAME:MIG 的名称。
  • DELAY:MIG 在暂停或停止虚拟机之前应等待的秒数。初始延迟时间可让初始化脚本有时间来准备虚拟机以快速地进行扩容。

调整 MIG 中备用池的大小

本部分介绍了如何调整 MIG 中已暂停和已停止虚拟机的备用池的大小。

控制台

  1. 在 Trusted Cloud 控制台中,前往实例群组页面。

    进入“实例组”

  2. 在列表的名称列下方,点击要在其中修改备用池大小的实例组的名称。

  3. 点击编辑以修改此托管式实例组。

  4. 点击显示高级配置

  5. 备用池部分的已暂停的虚拟机已停止的虚拟机字段中输入新大小。

  6. 点击保存

gcloud

使用带有 --suspended-size--stopped-size 标志的 instance-groups managed update 命令

gcloud compute instance-groups managed update MIG_NAME \
--suspended-size=SUSPENDED_SIZE \
--stopped-size=STOPPED_SIZE \
[--region=REGION | --zone=ZONE]

替换以下内容:

  • MIG_NAME:要在其中暂停实例的 MIG 的名称。
  • SUSPENDED_SIZE:MIG 在任何给定时间应维护的已暂停虚拟机的数量。
  • STOPPED_SIZE:MIG 在任何给定时间应维护的已停止虚拟机的数量。
  • REGION:对于区域级 MIG,这是 MIG 所在的区域。
  • ZONE:对于可用区级 MIG,这是 MIG 所在的可用区。

Terraform

以下示例会为已暂停和已停止的虚拟机创建一个具有目标大小的可用区级 MIG。如需设置目标大小,请使用 target_suspended_sizetarget_stopped_size 参数。

该示例使用 google_compute_instance_group_manager 资源。对于区域级 MIG,请使用 google_compute_region_instance_group_manager 资源

resource "google_compute_instance_group_manager" "default" {
  name                  = "standby-mig"
  base_instance_name    = "test"
  target_size           = 1
  target_suspended_size = 1
  target_stopped_size   = 2
  zone                  = "us-central1-f"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  standby_policy {
    initial_delay_sec = 50
    mode              = "SCALE_OUT_POOL"
  }
}

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

REST

使用 instanceGroupManager.patch 方法并在请求正文中指定已暂停和已停止的虚拟机池大小。对于区域级 MIG,请使用 regionInstanceGroupManager.patch 方法

PATCH https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
// ...
"targetSuspendedSize": SUSPENDED_SIZE,
"targetStoppedSize": STOPPED_SIZE
// ...
}

替换以下内容:

  • PROJECT_ID:您的项目的 ID。
  • ZONE:对于可用区级 MIG,这是 MIG 所在的可用区。
    • 对于区域级 MIG,将 zones/ZONE 替换为 regions/REGION 并指定 MIG 所在的地区。
  • MIG_NAME:要在其中停止实例的 MIG 的名称。
  • SUSPENDED_SIZE:MIG 在任何给定时间应维护的已暂停虚拟机的数量。
  • STOPPED_SIZE:MIG 在任何给定时间应维护的已停止虚拟机的数量。

后续步骤