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=2
和 minRequiredReplica=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 个实例:
- min_num_replicas 设置为 0。
- 仅使用这些自动缩放信号:schedules or per-group Cloud Monitoring metrics(或两者)。
特别是当自动缩放信号之一是 CPU 利用率、LB 利用率或 per-instance Cloud Monitoring metrics.
时,无法缩放到 0
我有一个 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=2
和 minRequiredReplica=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 个实例:
- min_num_replicas 设置为 0。
- 仅使用这些自动缩放信号:schedules or per-group Cloud Monitoring metrics(或两者)。
特别是当自动缩放信号之一是 CPU 利用率、LB 利用率或 per-instance Cloud Monitoring metrics.
时,无法缩放到 0