了解自动扩缩程序决策

自动扩缩功能可代表您对托管实例组 (MIG) 执行自动扩缩。本文档可让您了解自动扩缩程序在扩缩 MIG 时做出的一些决策。

为 MIG 配置自动扩缩程序时,自动扩缩程序会不断监控实例组并将实例组的 recommendedSize 设置为处理最近 10 分钟的峰值负载所需的实例数。所谓的最近 10 分钟即称为稳定期

MIG 对自动扩缩程序建议大小的响应取决于您如何配置自动扩缩程序的 mode

  • ON。MIG 将其 targetSize 设置为建议的大小,实例组自动扩缩以符合其目标大小。
  • ONLY_UP。仅当建议的大小增加时,MIG 的目标大小才会增加。
  • OFF。目标大小不受建议大小的影响。不过,系统仍会计算建议的大小。

如果删除自动扩缩程序配置,则不计算建议的大小。

目标利用率和实际利用率之间的差距

在自动扩缩过程中,您会注意到较小实例组的实际利用率和目标利用率之间存在较大差距。这是因为自动扩缩程序在解释利用率数据,并确定要添加或移除的实例数时,始终会通过向上或向下舍入来保守地进行操作。这种做法可防止自动扩缩程序添加的资源数量不足,或移除过多的资源。

例如,如果您将利用率目标设置为 0.7,而您的应用超出了利用率目标,则自动扩缩程序可能会断定添加 1.5 个虚拟机 (VM) 实例会将利用率降低到接近 0.7。由于无法添加 1.5 个虚拟机实例,因此自动扩缩程序会向上舍入并添加 2 个虚拟机。这可能会导致平均 CPU 利用率降到低于 0.7,但可确保有足够的资源来支持您的应用。

同样,如果自动扩缩程序确定移除 1.5 个虚拟机实例会将您的利用率提高到接近 0.7,它将只会移除一个实例。

对于拥有更多虚拟机实例的较大实例组,利用率会在大量实例之间分配,因此添加或移除虚拟机实例会缩小实际利用率与目标利用率之间的差距。

缩减资源时出现的延迟

为了缩小实例组的规模,自动扩缩程序会根据最近 10 分钟内的峰值负载来计算该实例组的建议目标大小。所谓的最近 10 分钟即称为稳定期

观察最近 10 分钟的使用率可为自动调节程序提供以下帮助:

  • 确保从实例组收集的是稳定的用量信息。
  • 防止自动扩缩程序以过高的速率连续添加或移除实例。
  • 确定较小的实例组足以支持最近 10 分钟的峰值负载后,安全地移除实例。

这个 10 分钟的稳定期看似是缩减规模时发生延迟,但实际上是自动扩缩的内置功能。此外,如果托管实例组中新增了实例,那么此延迟还可确保该新实例至少运行 10 分钟后才能终止。

在决定是否缩减实例组资源时,系统会忽略新实例的冷却期

连接排空导致的延迟

如果该实例组属于已启用连接排空后端服务,则在连接排空结束后,最长可能需要等待 60 秒才会移除或删除虚拟机实例。

纵向扩容资源时出现的延迟

在实例初始化时,即冷却期,自动扩缩程序会忽略实例中的使用情况数据。如果您设置的冷却期值明显长于实例初始化所花费的时间,则您的自动扩缩程序可能会忽略合理的利用率数据,并且可能会低估您的实例组所需的大小。

例如,假设您根据 CPU 利用率进行扩缩,并且实例的 CPU 利用率在初始化后增加。CPU 利用率增加可保证纵向扩容。但是,如果实例仍在冷却期内,则会忽略 CPU 利用率的增加,因此,实例组不会纵向扩容。

为避免纵向扩容导致的延迟,请将冷却期设置为与实例初始化所花费的时间相近的值。

准备终止实例

自动扩缩程序在缩减实例组资源时,会确定需要关停的虚拟机实例数量,并从实例组中选择利用率较低的虚拟机实例以将其终止。在终止实例之前,您可能需要确保这些实例执行某些特定任务,例如关闭所有现有连接、正常关闭所有应用或应用服务器、上传日志等。您可以指示实例使用关停脚本来执行这些任务。

系统会在发出终止请求到实际终止实例之间的短暂期间内尽可能运行关停脚本。在此期间,Compute Engine 将尝试运行您的关停脚本以执行您在其中指定的所有任务。

如果您要对托管实例组使用负载平衡,则此功能会特别有用。如果您的实例运行状况不佳,则负载平衡器可能需要过一段时间才能识别出实例运行状况不佳,而这会导致负载平衡器继续向该实例发送新请求。如果使用关闭脚本,则实例会在关闭时报告其运行状况不佳,以便负载平衡器停止向该实例发送流量。如需了解详情,请参阅负载平衡文档中的处理运行状况不佳的实例

如需详细了解关停脚本,请参阅关停脚本

如需详细了解实例关停,请参阅关于停止删除实例的文档。

查看自动扩缩图表以了解利用率

如果您有一个正在使用自动扩缩的托管实例组,Compute Engine 会提供一个自动扩缩图表,用于跟踪任何时间点的总利用率和自动扩缩的实例数量。您可以通过 Google Cloud Console 访问此图表。

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 点击要查看的自动扩缩的托管实例组的名称。 请注意,此实例组必须是按 CPU 利用率进行自动扩缩(尚不支持其他自动扩缩指标)。
  3. 在托管实例组详情页面上,选择监控标签页(如果尚未选择)。

    “监控”标签页。

  4. 确保在下拉列表中选择了自动扩缩的实例数

该图表跟踪实例数量与 CPU 利用率的关系。以下信息可帮助理解这些图表:

  • 上方图表中的蓝线表示托管实例组中的实例数。
  • 下方图表中的蓝线表示该实例组的总 CPU 利用率。
  • 下方图表中的绿线表示该托管实例组剩余的可用容量。
    • 如果绿线位于蓝线之上,则表示有大量可用容量,且您的虚拟机实例很可能未得到充分利用。
    • 如果绿线位于蓝线之下,则表示剩余容量极少(如果还有),您应该向实例组添加更多实例。
  • 如果容量下降,则可能意味着实例组的规模已经缩小,因此上方图表中的蓝线也将下降。同样,如果您的容量增加,则实例组的规模很可能也会增大。

例如,下图截取的是一个已达到其容量的自动扩缩的托管实例组图片,在图中显示的情况下,会导致自动扩缩程序向该组添加更多虚拟机实例,从而增大该组的容量。

自动扩缩图表的屏幕截图

查看状态消息

自动调节程序在调节过程中遇到问题时,会返回警告或错误消息。您可以通过以下两种方式查看这些状态消息。

在“实例组”页面上查看状态消息

您可以直接在 Google Cloud Console 中的实例组页面上查看状态消息。

  1. 在 Google Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 查找所有具有“警告”图标 (!) 的实例组。例如:

    实例组页面上的状态消息。

  3. 将鼠标悬停在状态图标上以获取状态消息的详情。

在“实例组详情”页面上查看状态消息

您可以直接转到特定实例组的详情页面以查看相关的状态消息。

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 点击要查看其状态消息的实例组。
  3. 在详情页面的成员标签页上查看状态消息。 例如:

    实例组详情页面上的状态消息。

常见的返回状态消息

自动调节程序在调节过程中遇到问题时,会返回警告或错误消息。以下是一些常见的返回消息及其含义。

All instances in the instance group are unhealthy (not in RUNNING state). If this is an error, check the instances.
实例组中的所有实例均处于非 RUNNING 状态。如果这是故意为之,那么您可以忽略此消息; 否则请对实例组进行问题排查。
The number of instances has reached the maxNumReplicas. The autoscaler cannot add more instances.
您在创建自动扩缩程序时指定了实例组可以拥有的实例数上限。自动扩缩程序正在尝试向上调整实例组的规模以满足需求,但已达到 maxNumReplicas。如需了解如何将 maxNumReplicas 更新为较大的数字,请参阅更新自动扩缩程序
The monitoring metric that was specified does not exist or does not have the required labels. Check the metric.
虽然您使用 Stackdriver Monitoring 指标进行自动扩缩,但您提供的指标不存在或缺少所需的标签。所需的标签会有所不同,具体取决于指标是标准指标还是自定义指标。如需了解详情,请参阅根据 Monitoring 指标扩缩资源
Quota for some resources is exceeded. Increase the quota or delete resources to free up more quota.
您可以在 Google Cloud Console 的“配额”页面上获取有关可用配额的信息。
Autoscaling does not work with an HTTP/S load balancer configured for maxRate.
实例组正在以 maxRate 配置进行负载平衡,但自动扩缩程序不支持此模式。因此,请更改该配置或停用自动扩缩功能。如需详细了解 maxRate,请参阅负载平衡文档中的限制与准则
The autoscaler is configured to scale based on a load balancing signal but the instance group has not received any queries from the load balancer. Check that the load balancing configuration is working.
实例组正在进行负载平衡,但该实例组没有传入查询。该服务可能正处于空闲期,在这种情况下,您无需担心。但是,此消息也可能是由配置错误导致;例如,自动扩缩的实例组可能是多个负载平衡器的目标,而这种情况并不受支持。如需查看完整的指南列表,请参阅负载平衡文档中的限制与准则