Kubernetes自动缩扩容HPA算法小结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes自动缩扩容HPA算法小结相关的知识,希望对你有一定的参考价值。

参考技术A

Kubernetes在autoscalingV2版本的api中支持了Resource、Object、Pods三种指标类型,其中

metrics server从kubelet中的cAdvisor组件中获取,默认情况下,每10s(--cpu-manager-reconcile-period)采样一次,每30s(kubernetesCadvisorWindow)计算一次cpu使用量。

Pod在未Ready状态下,可正常收集metrics

目标副本数是通过一个调整副本的比例系数(usageRatio)计算的。

usageRatio = avgUtilization / target

一般性指标利用率,基于所有容器的当前指标和参与缩扩容计算的pod数量计算
usageRatio = (sum(metrics) / podCount) / target
cpu、memory等资源利用率,基于所有容器的当前指标和requests计算
usageRatio = (sum(metrics) / sum(requests)) / target

如果 Math.abs(1-usageRatio) > tolerance, 则按下面的公式计算目标副本数,否则返回原本副本数
TargetNumOfPods = ceil(usageRatio * podCount)

经实践,在进行滚动升级(Rolling-Update)时,由于cpu load升高会触发HPA。

在扩容计算时,获取所有pod的metrics,刚刚变为ready状态的pod load虽然降低了,但由于指标收集的滞后性,此时拿到的指标大概率是高负载时的数据,由于pod已经ready,该数据将会参与计算目标副本数。

为了避免这种情况,目前做法是,在进行滚动升级之前将HPA移除,待发布完成时,再重建HPA。

k8s关于HPA扩容缩容

以上是关于Kubernetes自动缩扩容HPA算法小结的主要内容,如果未能解决你的问题,请参考以下文章

k8s关于HPA扩容缩容

k8s关于HPA扩容缩容

k8s关于HPA扩容缩容

k8s关于HPA扩容缩容

Kubernetes HPA 的三个误区与避坑指南

自动扩容之Horizontal Pod Autoscaling(HPA)