GCP 托管实例组不会缩减为零

GCP managed instance group won't scale to zero

我有一个 GCP 托管实例组,我想使用 cron 计划将其扩展到 0 到 1 个实例之间。 GCP 有一个 limitation 表示:

Scaling schedules can only be used for MIGs that have at least one other type of autoscaling signal, such as a signal for scaling based on average CPU utilization, load balancing serving capacity, or Cloud Monitoring metrics.

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

to scale based only on a schedule, you can set your CPU utilization target to 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?

谢谢!

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

实例组的最小实例数 (minNumReplicas) with/without 自动缩放应为 1,因此不可能缩减为 0。

对于其他 signals/metrics 也(HTTP 负载平衡利用率、Stackdriver 监控指标)不可能缩减为 0。

使用“缩放”控件。如果突然出现负载峰值,它会有所帮助。

更新:

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

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

  1. min_num_replicas 设置为 0。
  2. 仅使用这些自动缩放信号:schedules or per-group Cloud Monitoring metrics(或两者)。

特别是当自动缩放信号之一是 CPU 利用率、LB 利用率或 per-instance Cloud Monitoring metrics.

时,无法缩放到 0