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=2
和 minRequiredReplica=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 服务器上运行
为啥我在 gcloud 中设置 http 负载均衡器时无法选择我创建的托管实例组?