根据 CPU 或负载平衡服务容量进行扩缩

最简单的自动调节形式是根据一组虚拟机实例的 CPU 利用率进行调节。您还可以选择根据一组实例的 HTTP(S) 负载平衡服务容量进行调节。

本文档介绍了这两种方式。

准备工作

根据 CPU 利用率进行调节

您可以根据托管实例组的平均 CPU 利用率进行自动调节。如果您使用此政策,则是在指示自动调节程序收集组中实例的 CPU 利用率并确定是否需要对实例组进行调节。您可以设置自动调节程序应该维持的目标 CPU 利用率,而自动调节程序将尽力维持该级别。

自动调节程序将目标 CPU 利用率级别视为实例组中所有 vCPU 在一段时间内的平均使用率的一小部分。如果您的所有 vCPU 的平均使用率超过目标利用率,则自动调节程序将添加更多虚拟机。例如,如果将目标利用率设置为 0.75,则是在指示自动调节程序将实例组中的所有 vCPU 的平均使用率维持在 75%。

根据 CPU 利用率启用自动扩缩

如需详细了解如何根据 CPU 利用率启用自动扩缩,请学完以下教程:为高度可扩缩的应用使用自动扩缩

Console


  1. 转到“实例组”页面
  2. 如果您有实例组,请选择该实例组,然后点击修改组。如果您没有实例组,请点击创建实例组
  3. 自动调节下方,选择开启
  4. 自动调节的依据下方,选择 CPU 使用率
  5. 输入目标 CPU 使用率。此值会被视为百分比。例如,如果 CPU 使用率为 60%,请输入 60
  6. 提供您要包含在此实例组中的实例数量上限。您还可以设置实例数量下限和冷却期。冷却期是指在虚拟机启动后,自动调节程序在开始从虚拟机收集信息之前应该等待的秒数。这指明了虚拟机初始化可能需要的时间,在这段时间内收集的使用率对于自动调节而言并不可靠。默认冷却期为 60 秒。
  7. 保存更改。

gcloud


使用 set-autoscaling 子命令为托管实例组启用自动扩缩。例如,以下命令会创建目标 CPU 利用率为 75% 的自动调节程序。创建自动调节程序时,不仅需要 --target-cpu-utilization 参数,还需要 --max-num-replicas 参数:

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

或者,您可以使用 --cool-down-period 标志来告知自动调节程序以下信息:在新实例启动后,自动调节程序在开始收集使用率之前应该等待的秒数。冷却期过后,自动调节程序会开始收集新实例的使用率信息,并确定该组是否需要额外的实例。这指明了实例初始化可能需要的时间,在这段时间内收集的使用率对于自动调节而言并不可靠。默认冷却期为 60 秒。

您可以使用 instance-groups managed describe 子命令验证是否已成功启用自动调节,此子命令会描述相应的托管实例组并提供有关该实例组的任何自动调节功能的信息:

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

如需查看可用的 gcloud 命令和标志的完整列表,请参阅 gcloud 参考

API


注意:虽然自动调节是托管实例组的功能,但它是单独的 API 资源。针对自动调节构建 API 请求时请记住这一点。

在 API 中,向以下网址发出 POST 请求,同时将 myproject 替换为您自己的项目 ID 并将 us-central1-f 替换为您选择的地区:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

您的请求正文必须包含 nametargetautoscalingPolicy 字段。autoscalingPolicy 必须定义 cpuUtilizationmaxNumReplicas

或者,您可以使用 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.8
     },
    "coolDownPeriodSec": 90
  }
}

自动调节程序如何处理 CPU 利用率非常高的情况

在 CPU 利用率很高的时间段内,如果利用率接近 100%,则自动调节程序会估计该组可能已经严重过载。在这种情况下,自动调节程序最多将虚拟机的数量增加 50%。

根据 HTTP(S) 负载平衡服务容量进行调节

Compute Engine 提供对实例组中的负载平衡的支持。您可以将自动调节与负载平衡结合使用,只需设置根据实例的负载进行调节的自动调节程序即可。

HTTP(S) 负载平衡器在多个后端服务之间分布负载,这样会将流量分配给多个实例组。在后端服务中,您可以将与后端相关联的实例组的负载平衡服务容量定义为 CPU 利用率上限、每秒请求数上限 (RPS) 或者组的每秒请求数上限。当实例组达到服务容量时,后端服务将开始向其他实例组发送流量。

当您将自动调节程序附加到 HTTP(S) 负载平衡器时,自动调节程序将调节托管实例组以保持一部分负载平衡服务容量。

例如,假设托管实例组的负载平衡服务容量已定义为每个实例 100 RPS。如果使用 HTTP(S) 负载平衡政策创建自动调节程序,并对该自动调节程序进行设置,使其将目标利用率级别维持在 0.8(即 80%),则自动调节程序将在托管实例组中添加或移除实例以维持 80% 的服务容量(即每个实例 80 RPS)。

下图展示了自动调节程序与托管实例组和后端服务的互动方式:

显示自动调节程序、托管实例组和负载平衡后端服务之间的关系的图表。
自动调节程序会监控视托管实例组的服务容量(已在后端服务中定义),并会根据目标利用率进行调节。在此示例中,服务容量以 maxRatePerInstance 值来衡量。

适用的负载平衡配置

当您首次创建后端时,可以为您的负载平衡服务容量设置以下三个选项中的一个:CPU 利用率上限、每个实例的每秒请求数上限或整个组的每秒请求数上限。自动调节仅支持 CPU 利用率上限每个实例的每秒请求数上限,因为这些设置的值可以通过添加或移除实例来控制。例如,如果您将后端设置为每个实例每秒处理 10 个请求,而自动调节程序配置为维持在该速率的 80%,则当每个实例每秒处理的请求数发生变化时,自动调节程序可以添加或移除实例。

自动调节不支持每组的请求数上限,因为此设置与实例组中的实例数无关。无论实例组中有多少个实例,负载平衡器都会不断向实例组发送每组可以处理的最大数量的请求。

例如,如果您将后端设置为每个组每秒最多处理 100 个请求,则负载平衡器将继续每秒向该组发送 100 个请求,无论该组是具有两个实例还是 100 个实例。由于此值无法调整,因此自动调节不支持使用每组每秒处理最大数量的请求的负载平衡配置。

根据负载平衡服务容量启用自动扩缩

如需详细了解如何根据负载平衡服务容量启用自动扩缩,请学完以下教程:在全球范围自动扩缩 Compute Engine 上的 Web 服务

Console


  1. 转到 Google Cloud Platform Console 中的实例组窗格。
  2. 如果您有实例组,请选择该实例组,然后点击修改组。如果您没有实例组,请点击创建实例组
  3. 自动调节下方,选择开启
  4. 自动调节的依据下方,选择 HTTP 负载平衡使用率
  5. 输入目标负载平衡使用率。此值会被视为百分比。例如,如果 HTTP 负载平衡使用率为 60%,请输入 60
  6. 提供您要包含在此实例组中的实例数量上限。您还可以设置实例数量下限和冷却期。冷却期是指在虚拟机启动后,自动调节程序在开始从虚拟机收集信息之前应该等待的秒数。这指明了实例初始化可能需要的时间,在这段时间内收集的使用率对于自动调节而言并不可靠。默认冷却期为 60 秒。
  7. 保存更改。

gcloud


如需启用根据服务容量进行扩缩的自动扩缩程序,请使用 set-autoscaling 子命令。例如,以下命令会创建一个自动调节程序,该自动调节程序可调节目标托管实例组以维持 60% 的服务容量。创建自动调节程序时,不仅需要 --target-load-balancing-utilization 参数,还需要 --max-num-replicas 参数:

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

或者,您可以使用 --cool-down-period 标志来告知自动调节程序以下信息:在新虚拟机启动后,自动调节程序在开始从新虚拟机收集使用率信息之前应该等待的秒数。这计入了虚拟机初始化可能需要的时间,在这段时间内收集的使用率对于自动调节而言并不可靠。默认冷却期为 60 秒。

您可以使用 describe 子命令来验证是否已成功创建自动调节程序:

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

如需查看可用的 gcloud 命令和标志的完整列表,请参阅 gcloud 参考

API


注意:虽然自动调节是托管实例组的功能,但它是单独的 API 资源。针对自动调节构建 API 请求时请记住这一点。

在 API 中,向以下网址发出 POST 请求,同时将 myproject 替换为您自己的项目 ID 并将 us-central1-f 替换为您选择的地区:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

您的请求正文必须包含 nametargetautoscalingPolicy 字段。autoscalingPolicy 必须定义 loadBalancingUtilization

或者,您可以使用 coolDownPeriodSec 参数来告知自动调节程序以下信息:在新实例启动后,自动调节程序在开始收集使用率之前应该等待的秒数。冷却期过后,自动调节程序会开始收集新实例的使用率信息,并确定该组是否需要额外的实例。这指明了实例初始化可能需要的时间,在这段时间内收集的使用率对于自动调节而言并不可靠。默认冷却期为 60 秒。

{

 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 20,
    "loadBalancingUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

根据网络负载平衡进行调节

网络负载平衡器使用 TCP 和 UDP 等较低级别的协议来分配负载。网络负载平衡可让您分配并非基于 HTTP(S)(如 SMTP)的流量。

您可以使用 CPU 利用率或自定义指标来自动调节属于网络负载平衡器目标池的托管实例组。如需了解详情,请参阅根据 CPU 利用率进行扩缩根据 Stackdriver Monitoring 指标进行扩缩

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档