Kubernetes自动缩扩容HPA算法小结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes自动缩扩容HPA算法小结相关的知识,希望对你有一定的参考价值。
参考技术AKubernetes在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算法小结的主要内容,如果未能解决你的问题,请参考以下文章