我有一个GCP托管实例组,我想使用cron计划扩展到0到1个实例中。GCP有一个限制:
缩放计划只能用于具有至少一种其他类型的自动缩放信号的MIG,例如基于平均CPU利用率、负载平衡服务容量或云监控指标进行缩放的信号。
所以我必须指定一个额外的自动缩放信号。文档继续建议一种变通方法:
要仅根据时间表进行扩展,您可以将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
?
谢谢!
更新:
现在,必须用缩放时间表指定额外的自动缩放信号的限制已经消失,现在可以配置在0和1个实例之间交替的时间表(但请参阅下面的一般答案(。
当可以扩展到0个实例时:
- min_num_replicas设置为0
- 仅使用这些自动缩放信号:时间表或每组云监控指标(或两者兼有(
特别是,当自动缩放信号之一是CPU利用率、LB利用率或每个实例的云监控指标时,不可能缩放到0。
您允许在CPU利用率达到100%后自动缩放(自动缩放策略(。因此,性能将受到影响。因此,您可以将策略设置在60%到90%之间。
具有/不具有自动缩放功能的实例组的最小实例数(minNumReplicas(应为1,因此不可能在0时进行缩放。
对于其他信号/度量(HTTP负载平衡利用率、堆栈驱动程序监控度量(,不可能在0处进行扩展。
使用"放大"控件。如果突然出现负载峰值,它会有所帮助。