GCP 托管实例组不会缩放到零

Posted

技术标签:

【中文标题】GCP 托管实例组不会缩放到零【英文标题】:GCP managed instance group won't scale to zero 【发布时间】:2021-07-20 22:42:17 【问题描述】:

我有一个 GCP 托管实例组,我想使用 cron 计划在 0 到 1 个实例之间进行横向扩展。 GCP 有一个 limitation,上面写着:

扩缩计划只能用于具有至少一种其他类型的自动扩缩信号的 MIG,例如基于平均 CPU 利用率、负载平衡服务容量或 Cloud Monitoring 指标的扩缩信号。

所以我必须指定一个额外的自动缩放信号。 文档继续提出解决方法:

要仅根据计划进行扩展,您可以将 CPU 利用率目标设置为 100%。

所以我做到了。但是托管组不会缩小到 0,它只是保持在 1。 我没有使用过Scale-in controls,所以唯一可以防止缩减的AFAICT 是我已经考虑到的10 分钟Stabilization period

我的自动扩缩器配置:


   "name":"myname",
   "target":"the/url",
   "autoscalingPolicy":
      "minNumReplicas":0,
      "maxNumReplicas":1,
      "scalingSchedules":
         "out":
            "minRequiredReplicas":1,
            "schedule":"0,20,40 * * * *",
            "durationSec":300,
            "description":"scale out"
         
      ,
      "cpuUtilization":
         "utilizationTarget":1
      
   

计划本身将 5 分钟的横向扩展设置为 1 个实例,然后有 10 分钟的稳定时间,然后缩减为 0 应该发生,但它没有。

如果我使用相同的配置,但只更改 maxNumReplicas=2minRequiredReplica=2,自动缩放器会在预期的时间进行缩放,但在 1 到 2 个实例之间。我认为这意味着时间表本身很好。

我的理论是cpuUtilization 信号会阻止缩放到 0。有没有办法可以按计划在 0 和 1 之间缩放?也许是另一个信号,不是cpuUtilization

谢谢!

【问题讨论】:

这可能最好在 serverfault 上问,因为它不是编程问题。虽然我觉得有趣的是,MIG 是使用自动缩放器“minNumReplicas”创建的:“0”,因为它可能是not be allowed。也许用这个gcloud command来描述MIG可能会透露更多信息。 【参考方案1】:

更新:

现在取消了必须使用扩展计划指定额外自动扩展信号的限制,现在可以配置在 0 和 1 个实例之间交替的计划(但请参阅下面的一般答案)。

当可以扩展到 0 个实例时:

    min_num_replicas 设置为 0。 仅使用以下自动缩放信号:schedules 或 per-group Cloud Monitoring metrics(或两者)。

尤其是当自动缩放信号之一是 CPU 利用率、LB 利用率或per-instance Cloud Monitoring metrics 时,无法缩放到 0。

【讨论】:

【参考方案2】:

您在 CPU 利用率达到 100% 后允许自动缩放(自动缩放策略)。因为那个性能会受到影响。因此,您可以将策略设置在 60% 到 90% 之间。

具有/不具有自动缩放功能的实例组的最小实例数 (minNumReplicas) 应为 1,因此无法在 0 处缩小。

对于其他信号/指标(HTTP 负载平衡利用率、Stackdriver 监控指标)也无法在 0 处缩减。

使用缩小控件。如果发生突然的负载峰值,它会有所帮助。

【讨论】:

以上是关于GCP 托管实例组不会缩放到零的主要内容,如果未能解决你的问题,请参考以下文章

启动脚本未在启用自动缩放的 GCP Compute Engine Windows 服务器上运行

GKE 集群自动扩缩器与托管实例组中的自动扩缩器

为啥我在 gcloud 中设置 http 负载均衡器时无法选择我创建的托管实例组?

设置“期望大小:0”是不是会阻止集群自动缩放器扩展托管节点组?

将“非托管实例组”添加到 HTTPS 负载均衡器时响应缓慢

在GCP负载均衡器后面设置自动缩放弹性搜索