创建启用了自动扩缩功能的 MIG


本文档介绍如何创建能够自动扩缩的代管式实例组 (MIG),以便根据整个实例组的平均 CPU 利用率自动添加和移除虚拟机。例如,如果实例组的 CPU 利用率较低,则实例组会自动移除虚拟机以节省费用。

您可以根据各种自动扩缩信号来自动扩缩 MIG。如需了解详情,请参阅自动扩缩器概览

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

准备工作

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

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

    控制台

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

    gcloud

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

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

    Terraform

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

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

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

      gcloud auth application-default login

    如需了解详情,请参阅 为本地开发环境设置身份验证

    REST

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

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

      gcloud init

限制

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

创建 MIG 并启用自动扩缩

使用 Google Cloud 控制台gcloud CLI、Terraform, 或 REST

控制台

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

    转到“实例组”

    其余步骤将自动显示在 Google Cloud 控制台中。

  2. 如果您有实例组,请选择该实例组,然后点击修改。如果您没有实例组,请点击创建实例组
  3. 对于新实例组,请指定名称,然后为该实例组选择实例模板或创建新的实例组
  4. 如果不存在自动扩缩配置,请在自动扩缩下点击配置自动扩缩
  5. 自动扩缩模式下,选择“开启:在实例组中添加和移除实例”
  6. 指定您希望自动扩缩器在此组中创建的实例数量下限和上限。
  7. 自动扩缩指标部分中,如果现有的 CPU 利用率指标尚不存在,请添加一项指标:
    1. 点击添加指标
    2. 指标类型下,选择 CPU 利用率
    3. 输入所需的目标 CPU 利用率。此值被视为百分比。例如,如果 CPU 利用率为 75%,请输入 75
    4. 预测性自动扩缩下,选择关闭。如需详细了解预测性自动扩缩以及它是否适合您的工作负载,请参阅根据预测进行扩缩
    5. 点击完成
  8. 您可以使用初始化期来设置初始化期,以告知自动扩缩器应用初始化所需的时间。指定准确的初始化期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认初始化期为 60 秒。
  9. 如需创建 MIG,请点击创建

gcloud

您必须先创建 MIG,然后才能启用自动扩缩功能。请按照说明执行以下操作:创建 MIG 并将虚拟机限制在单个可用区创建 MIG 并使其虚拟机分布在一个区域内的多个可用区中

然后使用 set-autoscaling 子命令为组启用自动扩缩功能。例如,以下命令会创建目标 CPU 利用率为 60% 的自动扩缩器。创建自动扩缩器时,不仅需要 --target-cpu-utilization 参数,还需要 --max-num-replicas 参数。

(可选)您可以设置 --min-num-replicas,以指明该组中所需的最小虚拟机数。如果您未设置最小值,则默认情况下,MIG 会将此值设置为 2。

您可以使用 --cool-down-period 标志来设置初始化期,用于告知自动扩缩器应用初始化所需的时间。指定准确的初始化期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认初始化期为 60 秒。

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
  --max-num-replicas 20 \
  --target-cpu-utilization 0.60 \
  --cool-down-period 90

如果需要,您可以启用预测性自动扩缩功能,以在预测的负载之前提前横向扩容。如需了解预测性自动扩缩是否适合您的工作负载,请参阅根据预测进行扩缩

您可以使用 instance-groups managed describe 命令验证自动扩缩功能是否已成功启用,该命令描述了相应的 MIG,并提供该组的任何自动扩缩功能的相关信息:

gcloud compute instance-groups managed describe example-managed-instance-group

Terraform

您必须先创建 MIG,然后才能启用自动扩缩功能。请按照说明执行以下操作:创建 MIG 并将虚拟机限制在单个可用区创建 MIG 并使其虚拟机分布在一个区域内的多个可用区中

如需在 MIG 中配置自动扩缩,您可以使用 google_compute_autoscaler 资源

以下示例根据可用区级 MIG 中的 CPU 利用率配置自动扩缩。

resource "google_compute_autoscaler" "default" {
  name   = "example-autoscaler"
  zone   = "us-central1-f"
  target = google_compute_instance_group_manager.default.id

  autoscaling_policy {
    max_replicas    = 20
    min_replicas    = 0
    cooldown_period = 90

    cpu_utilization {
      target = 0.60
    }
  }
}

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

REST

在启用自动扩缩功能之前,您必须先创建 MIG 并将虚拟机限制在单个可用区,或者创建 MIG 并使其虚拟机分布在一个区域内的多个可用区中

如果您有可用区级 MIG,请向 autoscalers.insert 方法发出 POST 请求。如果您有区域级 MIG,请使用 regionAutoscalers.insert 方法

例如:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers/

请求正文必须包含 nametargetautoscalingPolicy 字段。autoscalingPolicy 字段必须定义目标 cpuUtilization 值和 maxNumReplicas 值。

(可选)您可以设置 minNumReplicas,以指明该组中所需的最小虚拟机数。如果您未设置最小值,则默认情况下,MIG 会将此值设置为 2。

您可以使用 coolDownPeriodSec 字段来设置初始化期,以告知自动扩缩器应用初始化所需的时间。指定准确的初始化期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认初始化期为 60 秒。

{
  "name": "example-autoscaler",
  "target": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
  "autoscalingPolicy": {
    "maxNumReplicas": 10,
    "cpuUtilization": {
      "utilizationTarget": 0.6
    },
    "coolDownPeriodSec": 90
  }
}

如果需要,您可以启用预测性自动扩缩功能,以在预测的负载之前提前横向扩容。如需了解预测性自动扩缩是否适合您的工作负载,请参阅根据预测进行扩缩

如需详细了解如何根据 CPU 利用率启用自动扩缩功能,请参阅根据 CPU 利用率进行扩缩

后续步骤