HPA - 如何避免因 CPU 利用率峰值而扩大规模(不是在启动时)当为不同国家/地区加载业务配置时,CPU 负载增加 1 分钟,但我们希望避免扩大那 1 分钟。
在图片下方,CurrentMetricValue 只是矩阵中的当前值或上次轮询到当前轮询持续时间的平均值--horizontal.-pod-autoscaler-sync-period
HPA - 如何避免因 CPU 利用率峰值而扩大规模(不是在启动时)当为不同国家/地区加载业务配置时,CPU 负载增加 1 分钟,但我们希望避免扩大那 1 分钟。
在图片下方,CurrentMetricValue 只是矩阵中的当前值或上次轮询到当前轮询持续时间的平均值--horizontal.-pod-autoscaler-sync-period
默认 HPA 检查间隔为 30 秒。这可以通过您提到的通过更改--horizontal-pod-autoscaler-sync-period
控制器管理器的标志值来配置。
Horizontal Pod Autoscaler 实现为控制循环,周期由控制器管理器的 --horizontal-pod-autoscaler-sync-period 标志控制。
在每个期间,控制器管理器根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率。控制器管理器从资源指标 API(对于每个 pod 的资源指标)或自定义指标 API(对于所有其他指标)获取指标。
为了在 kube-controller-manager 中更改/添加标志 - 您应该可以访问/etc/kubernetes/manifests/
主节点上的目录并能够修改/etc/kubernetes/manifests/kube-controller-manager.yam
l 中的参数。
注意:您无法在 GKE、EKS 和其他托管集群上执行此操作。
更重要的是,我建议增加--horizontal-pod-autoscaler-downscale-stabilization
(替换为--horizontal-pod-autoscaler-upscale-delay
)。
如果您担心长时间中断,我建议您设置一个自定义指标(如果网络在 last 中关闭,则为 1 ${duration}
,否则为 0)并将指标的目标值设置为 1(除了基于 CPU 的自动缩放)。这边走:
${duration}
如果基于自定义指标的最后建议中的网络出现故障,则将等于您的当前部署规模。此建议的最大值和非常低的 CPU 建议将等于当前部署的大小。在连接恢复之前不会出现缩减(+ 几分钟后,因为缩减稳定窗口)。
如果网络可用,基于指标的推荐将为 0。使用 CPU 推荐达到最大值后,它将等于 CPU 推荐,并且自动缩放器将正常运行。我认为这比限制自动缩放步骤的大小更能解决您的问题。限制自动缩放步骤的大小只会减慢 pod 数量减少的速度,因此更长的网络中断仍会导致您的部署缩小到允许的最小大小。
您还可以使用基于内存的缩放
由于无法在 Kubernetes 中创建基于内存的 hpa,因此编写了一个脚本来实现相同的功能。您可以通过单击此链接在此处找到我们的脚本:
https://github.com/powerupcloud/kubernetes-1/blob/master/memory-based-autoscaling.sh
克隆存储库:
https://github.com/powerupcloud/kubernetes-1.git
然后转到 Kubernetes 目录。执行帮助命令获取指令:
./memory-based-autoscaling.sh --help
在此处阅读更多内容:基于内存的自动缩放。