管理自动扩缩器


如果您使用代管式实例组 (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

创建自动扩缩器

创建自动扩缩器的过程略有差别,具体视您要使用的自动扩缩政策而定。有关创建自动扩缩器的说明,请参阅:

获取自动扩缩器相关信息

如需获取有关特定自动扩缩器的更多信息,请使用控制台、gcloud compute instance-groups managed describe 子命令,或者对可用区级区域级自动扩缩器 REST 资源使用 get 方法。

控制台

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

    转到“实例组”

  2. 在列表中点击 MIG 的名称,以打开该组的概览页面。
  3. 点击详细信息查看该组的详细信息,包括其自动扩缩设置。

gcloud

使用 instance-groups managed describe 命令

gcloud compute instance-groups managed describe INSTANCE_GROUP_NAME

如果实例组挂接了自动扩缩器,则该命令会返回该自动扩缩器的详细信息:

...
autoscaler:
  autoscalingPolicy:
    coolDownPeriodSec: 60
    cpuUtilization:
      utilizationTarget: 0.6
    maxNumReplicas: 20
    minNumReplicas: 10
    mode: ON
    scaleInControl:
      timeWindowSec: 300
      maxScaledInReplicas:
        fixed: 3
        calculated: 3
...

REST

使用 instanceGroupManagers.get 方法。 对于地区 MIG,请将 zones/ZONE 替换为 regions/REGION

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME

如果实例组挂接了自动扩缩器,则请求会返回一个指向该自动扩缩器资源的链接。

200 OK

{
  ...
  "status": {
    ...
    "autoscaler": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c/autoscalers/example-group"
  },
}

如需检索有关自动扩缩器资源的详细信息,请使用 autoscalers.get 方法(对于可用区级 MIG)或 regionAutoscalers.get 方法(对于区域级 MIG)。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers/example-autoscaler
200 OK

{
 "kind": "compute#autoscaler",
 "id": "8744945839459481093",
 "creationTimestamp": "2018-09-28T13:02:50.553-07:00",
 "name": "example-group",
 "target": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c/instanceGroupManagers/example-group",
 "autoscalingPolicy": {
  "minNumReplicas": 10,
  "maxNumReplicas": 20,
  "mode": "ON",
  "scaleInControl": {
    "timeWindowSec": 60,
    "maxScaledInReplicas": {
      "calculated": 3,
      "percent": 15
    }
  },
  "coolDownPeriodSec": 60,
  "cpuUtilization": {
   "utilizationTarget": 0.6
  }
 },
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c",
 "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c/autoscalers/example-group",
 "status": "ACTIVE"
}

更新自动扩缩程序

更新自动扩缩器,更改可能需要一段时间才能传播,而且新的自动扩缩器设置可能需要几分钟时间才会生效。

控制台

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

    转到“实例组”

  2. 在列表中点击 MIG 的名称,以打开该组的概览页面。
  3. 点击修改以查看和更新该组的当前配置,包括其自动扩缩设置。
  4. 完成后,请点击保存

gcloud

使用 update-autoscaling 命令

gcloud compute instance-groups managed update-autoscaling INSTANCE_GROUP_NAME \
        --max-num-replicas MAX_NUM ...

如需了解如何创建自动扩缩器,请参阅创建自动扩缩器

REST

如需更新自动扩缩器资源,请使用 autoscalers.patch 方法(对于可用区级 MIG)或 regionAutoscalers.patch 方法(对于区域级 MIG)。提供包含新配置的请求正文。

PATCH https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/autoscalers/example-autoscaler

{
 "autoscalingPolicy": {
  "maxNumReplicas": 20
 }
}
200 OK

{
 "kind": "compute#operation",
 "id": "4244494732310423322",
 "name": "operation-1556912627871-58800f8216ed7-74ab1720-7d360603",
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f",
 "operationType": "compute.autoscalers.patch",
 "targetLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/autoscalers/example-autoscaler",
 "targetId": "340775527929467142",
 "status": "RUNNING",
 ...
}

当您执行任何修改数据的请求时,系统会返回 zoneOperationsregionOperations 资源,并且您可以查询该操作以检查更改的状态。

使用预测性自动扩缩

预测性自动扩缩使用历史数据在预期负载前扩容实例组。如果您的工作负载符合以下条件,则预测性自动扩缩最有效:

  • 您的应用需要很长时间才能完成初始化,例如,您配置了超过 2 分钟的初始化期
  • 您的工作负载每日或每周预计会发生变化。

如需了解详情,请参阅根据预测进行扩缩

关闭或限制自动扩缩器

您可以关闭自动扩缩器,以暂时阻止它扩缩您的 MIG,也可以对自动扩缩器施加限制,使其仅对您的 MIG 执行扩容。如果您希望执行以下操作,此功能会非常有用:

  • 在不受缩减干扰的情况下调查虚拟机实例。
  • 重新配置 MIG 的多个属性,并确保在此操作完成之前不触发扩缩操作。
  • 维护 MIG 容量,以便在将工作负载重定向到新 MIG 时实现快速回滚。
  • 稍后启用预测性自动扩缩。预测性自动扩缩需要自动扩缩政策,才能开始收集用于预测的负载历史记录。即使其模式设置为 OFF,自动扩缩器也会检测此历史记录。

如果重新启用自动扩缩器,自动扩缩器会自动恢复正常运行。

使用本部分中提供的说明设置自动扩缩器的模式。可用的模式有:

  • 关闭:暂时停用自动扩缩功能。使用此模式可防止系统自动更改 MIG 的大小。自动扩缩配置保持不变,以便日后重新启用自动扩缩。
  • 仅横向扩容 (Only scale out):将自动扩缩功能限制为仅添加新的虚拟机实例。使用此模式可防止实例组缩减,并允许实例组在负载增加时预配额外的虚拟机。
  • 开启:根据政策启用所有自动扩缩操作

控制台

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

    转到“实例组”

  2. 在列表中点击 MIG 的名称,以打开该组的概览页面。
  3. 点击修改以查看该组的当前配置,包括其自动扩缩设置。
  4. 自动扩缩下,设置自动扩缩模式以停用或限制该组的自动扩缩功能,或重新启用自动扩缩器。
  5. 完成后,请点击保存

gcloud

如需停用、限制或重新启用自动扩缩器,请使用带有 --mode 标志的 update-autoscaling 命令

gcloud compute instance-groups managed update-autoscaling INSTANCE_GROUP_NAME \
        --mode MODE 

替换以下内容:

  • MODE
    • off 用于停用自动扩缩器,但保留其配置
    • only-scale-out 用于将自动扩缩器限制为只添加虚拟机实例
    • on 用于根据自动扩缩器的政策重新启用所有自动扩缩器活动

REST

如需更新自动扩缩器资源的模式,请使用 autoscalers.patch 方法(对于可用区级 MIG)或 regionAutoscalers.patch 方法(对于区域级 MIG)。提供包含 autoscalingPolicy.mode 属性的请求正文。

PATCH https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1-f/autoscalers?autoscaler=my-autoscaler

{
  "autoscalingPolicy": {
    "mode":"MODE"
  }
}

替换以下内容:

  • MODE
    • OFF 用于停用自动扩缩器,但保留其配置
    • ONLY_SCALE_OUT 用于将自动扩缩器限制为只添加实例
    • ON 用于根据自动扩缩器的政策重新启用所有自动扩缩器活动

自动扩缩模式设置为 ONLY_SCALE_OUT 时,自动扩缩器的工作方式如下:

  • 即使负载减少或自动扩缩器配置更改,自动扩缩器也不会降低 MIG 的 targetSize 值。
  • 如果您手动更改可用区级 MIG 的目标大小,并且目标大小小于自动扩缩器的建议大小,自动扩缩器会替换手动提供的大小。
  • 您无法手动更改区域级 MIG 的目标大小。
  • 如果您将 autoscalingPolicy.maxNumReplicas 字段的值设置为低于实例组的当前 targetSize 值,并且自动扩缩器的模式设置为 ONLY_SCALE_OUT,则自动扩缩器不会减少实例组中实例的数量。与往常一样,自动扩缩器会不断重新计算实例组的建议大小,并且可能会减小实例组的建议大小以符合新的上限,但实例组不会缩容。
  • autoscalers.status 字段报告警告:“自动扩缩在受限模式下运行:ONLY_SCALE_OUT。”

自动扩缩器的模式设置为 OFF 时,自动扩缩器的工作方式如下:

  • 即使负载或自动扩缩器配置发生变化,自动扩缩器也不会更改 MIG 的 targetSize 值。与往常一样,自动扩缩器会不断重新计算实例组的建议大小,并且可能会减小实例组的建议大小以符合新的上限,但实例组不会缩容。
  • 您可以手动更改可用区级或区域级 MIG 的目标大小。自动扩缩政策的 minNumReplicasmaxNumReplicas 值不会影响您设置的大小。
  • 如果您为启用了主动式实例重新分布的区域级 MIG 关闭自动扩缩功能,并且该 MIG 的各可用区中实例分布不均匀,则实例组会主动在其可用区中删除或创建实例以恢复到分布均匀的状态。
  • autoscalers.status 字段报告警告:“自动扩缩在受限模式下运行:OFF”。

控制自动扩缩器的缩减速率

如果您的工作负载需要很长时间来初始化,应配置缩容控制机制,以降低由于突发的缩容事件而导致响应延迟及服务中断的风险。具体而言,如果您常常预计到在负载下降后不久出现负载峰值,则可以限制缩容速率。限制缩容速率可防止自动扩缩器将 MIG 的大小缩减到超过工作负载所能容忍失去的虚拟机实例数量。

配置缩容控制机制

配置缩容控制机制是可选操作。默认情况下,系统不会配置缩容控制机制。如果未配置,则自动扩缩器仍会依赖其默认稳定机制。也就是说,它会将建议的大小维持在处理稳定期期间的峰值级别。

控制台

如需为自动扩缩的 MIG 配置缩容控制机制,请执行以下操作:

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

    转到“实例组”

  2. 点击列表中自动扩缩的 MIG 的名称,以打开该组的概览页面。

  3. 点击修改以查看该组的当前配置,包括其自动扩缩设置。

  4. 自动扩缩下,点击缩容控制机制,然后选择启用缩容控制机制

  5. 缩容幅度不超过下,指定一次可以从组中移除的实例的最大数量或百分比。

  6. “- 在以下时间段内:”下,指定可以从组中移除实例的频率。

  7. 点击保存

gcloud

您可以在创建自动扩缩器或更新自动扩缩器时配置缩减控制机制。

在创建自动扩缩器时配置缩减控制机制

为 MIG 创建自动扩缩器时,将 --scale-in-control 标志与 gcloud compute instance-groups managed set-autoscaling 命令结合使用来设置缩减控制机制。例如,使用以下命令为 example-group 配置自动扩缩:

gcloud compute instance-groups managed set-autoscaling INSTANCE_GROUP_NAME \
    --target-cpu-utilization 0.6 \
    --max-num-replicas 50 \
    --scale-in-control max-scaled-in-replicas=MAX_SCALE_IN_REPLICAS,time-window=TIME_WINDOW

在更新自动扩缩器时配置缩减控制机制

--scale-in-control 标志与 gcloud compute instance-groups managed update-autoscaling 命令结合使用,更新MIG 现有自动扩缩器中的缩减控制机制。例如,使用以下命令在 example-group 的现有自动扩缩配置中设置缩减控制机制:

gcloud compute instance-groups managed update-autoscaling INSTANCE_GROUP_NAME \
    --scale-in-control max-scaled-in-replicas=MAX_SCALE_IN_REPLICAS,time-window=TIME_WINDOW

替换以下内容:

  • INSTANCE_GROUP_NAME:要更新的 MIG 的名称。
  • MAX_SCALE_IN_REPLICAS:允许从取自指定的跟踪时间窗口的峰值大小中减去的最大虚拟机数量。可以同时扩缩指定数量的虚拟机实例,因此您的服务应该能够承受同时失去此数量的虚拟机。您可以指定虚拟机数量或百分比。使用 % 符号表示百分比;例如 50%
  • TIME_WINDOW:要从中获取峰值大小的跟踪时间窗口。自动扩缩的缩减量不会超出在此跟踪时间窗口内取得的峰值大小所允许的最大副本数。在 [60, 3600] 间隔内指定此值(以秒为单位)。

例如,假设您将时间窗口设置为 1800 秒(30 分钟)。在计算 MIG 的当前建议大小时,自动扩缩器会使用以下逻辑:

  • 使用过去 30 分钟的峰值大小(例如 100 个虚拟机)
  • 使用 max-scaled-in-replicas(例如 10 个虚拟机)
  • 将建议大小的下限设置为:峰值大小减去 max-scaled-in-replicas(100 - 10 = 90 个虚拟机)

REST

通过在地区级区域级自动扩缩器资源中的 autoscalingPolicy.scaleInControl 结构内设置 maxScaledInReplicastimeWindowSec 字段来配置缩减控制机制。这些字段没有默认值,您必须为这两个字段提供值。

您可以在创建自动扩缩器或更新自动扩缩器时配置缩减控制机制。

在创建自动扩缩器时配置缩减控制机制

对于可用区级 MIG,请使用 autoscalers.insert 方法。对于区域级 MIG,请使用 regionAutoscalers.insert 方法

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

{
  "name": "AUTOSCALER_NAME",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME",
  "autoscalingPolicy": {
    "minNumReplicas": 1,
    "maxNumReplicas": 5,
    "coolDownPeriodSec": 60,
    "cpuUtilization": {
      "utilizationTarget": 0.8
    },
    "scaleInControl": {
      "maxScaledInReplicas": {
           "fixed": MAX_SCALE_IN_REPLICAS
      },
      "timeWindowSec": TIME_WINDOW
    }
  }
}

如需详细了解如何创建自动扩缩器,请参阅以下文章:

在更新自动扩缩器时配置缩减控制机制

对于可用区级 MIG,请使用 autoscalers.patch 方法。对于区域级 MIG,请使用 regionAutoscalers.patch 方法

PATCH
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "minNumReplicas": 1,
    "maxNumReplicas": 5,
    "coolDownPeriodSec": 60,
    "cpuUtilization": {
      "utilizationTarget": 0.8
    },
    "scaleInControl": {
      "maxScaledInReplicas": {
           "fixed": MAX_SCALE_IN_REPLICAS
      },
      "timeWindowSec": TIME_WINDOW
    }
  }
}

替换以下内容:

  • AUTOSCALER_NAME:要创建的自动扩缩器的名称。自动扩缩器有两种命名方式:采用将使用它的 MIG 命名,或者指定其他名称。
  • INSTANCE_GROUP_NAME:要向其添加自动扩缩器的 MIG 的名称。对于地区级 MIG,请将 zones/ZONE 替换为 regions/REGION
  • MAX_SCALE_IN_REPLICAS:允许从取自指定的跟踪时间窗口的峰值推荐目标大小中减去的最大虚拟机数量。可以同时缩容指定数量的虚拟机实例,因此您的服务应该能够承受同时失去此数量的虚拟机。您可以指定虚拟机数量或百分比。使用 maxScaledInReplicas.percentage 指定百分比值。
  • TIME_WINDOW:从中获取峰值建议大小的跟踪时间窗口。自动扩缩的缩减量不会超出在此跟踪时间窗口内获取的峰值建议大小所允许的最大副本数。在 [60, 3600] 间隔内指定此值(以秒为单位),例如:1800

例如,假设您将时间窗口设置为 1800 秒(30 分钟)。在计算 MIG 的当前建议大小时,自动扩缩器会使用以下逻辑:

  • 使用过去 30 分钟的峰值大小(例如 100 个虚拟机)
  • 使用 max-scaled-in-replicas(例如 10 个虚拟机)
  • 将建议大小的下限设置为:峰值大小减去 max-scaled-in-replicas(100 - 10 = 90 个虚拟机)

如需详细了解缩减控制机制的工作原理,请参阅了解自动扩缩器决策

获取缩减控制机制的当前配置

如需获取缩减控制机制的当前配置,请参阅获取自动扩缩器相关信息

移除缩容控制机制

您可以使用 Google Cloud CLI 或 Compute Engine API 移除缩容控制机制,以解除对缩容操作的时间和幅度的限制。

如果没有缩容控制机制,自动扩缩器仍依赖于其默认稳定机制。具体地说,它会将建议的大小维持在稳定期内观察到的峰值负载所需的级别。

控制台

如需为自动扩缩的 MIG 移除缩容控制机制,请执行以下操作:

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

    转到“实例组”

  2. 点击列表中自动扩缩的 MIG 的名称,以打开该组的概览页面。

  3. 点击修改以查看该组的当前配置,包括其自动扩缩设置。

  4. 自动扩缩下,点击缩容控制机制,然后清除启用缩容控制机制复选框。

  5. 点击保存

gcloud

--clear-scale-in-control 标志与 gcloud compute instance-groups managed update-autoscaling 命令搭配使用可以移除缩容控制机制。例如,使用以下命令可以从 example-group 的自动扩缩配置中移除缩减控制机制:

gcloud compute instance-groups managed update-autoscaling example-group \
    --clear-scale-in-control

REST

如需移除缩容控制机制,请使用 autoscalers.patch 方法(对于可用区级 MIG)或 regionAutoscalers.patch 方法(对于区域级 MIG),并为缩容控制机制提供空配置。

PATCH
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scaleInControl": null
  }
}

替换以下内容:

  • AUTOSCALER_NAME:要更新的自动扩缩器的名称。如需获取现有自动扩缩器及其目标 MIG 的列表,请使用 autoscalers.aggregatedList 方法

删除自动扩缩器

您可以永久删除自动扩缩器资源及其历史记录。如果您要暂时停止自动扩缩,并保留自动扩缩器资源及其配置和历史记录,请改为停用自动扩缩器。

控制台

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

    转到“实例组”

  2. 在列表中点击 MIG 的名称,以打开该组的概览页面。

  3. 点击修改以查看该组的当前配置,包括其自动扩缩设置。

  4. 自动扩缩下,从自动扩缩模式下拉列表中选择删除自动扩缩配置,以停止自动扩缩器并删除其配置。

  5. 完成后,请点击保存

gcloud

使用 stop-autoscaling 命令停止自动扩缩器并删除其配置。

gcloud compute instance-groups managed stop-autoscaling INSTANCE_GROUP_NAME

停止自动扩缩器会将其从 MIG 中删除。如果要重启自动扩缩器,必须使用 set-autoscaling 命令重新创建它。

如果您使用 gcloud CLI 删除了 MIG,则连接到该 MIG 的任何自动扩缩器也会被删除。

REST

如需停止自动扩缩器并删除其配置,请使用 autoscalers.delete 方法(对于可用区级 MIG)或 regionAutoscalers.delete 方法(对于区域级 MIG)。

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

反馈

我们希望了解您对自动扩缩的使用情况、使用过程中遇到的问题和反馈。请发送至 mig-discuss@google.com,与我们的团队分享您的反馈。

后续步骤