Kubernetes源码分析-阿里云Kubernetes关于HPA没有扩缩容的原因定位

最近使用阿里云的kubernetes容器服务,在一个应用上发现了HPA的一些奇怪的地方。如下图所示,当前使用率高于期望值使用率时,没有发生扩容事件,当当前使用率低于期望值使用率时,没有发生缩容事件。由此,通过源码分析一下其中的过程。
Kubernetes源码分析-阿里云Kubernetes关于HPA没有扩缩容的原因定位_第1张图片

所以说我们现在遇到的情况应道发生HPA行为,拿我们的例子来说就是math.Ceil((118/110)2),比率运算约等于2.14545454然后向上取整数值应当是3,很明显应该扩容,然后math.Ceil((92/110)3),比率运算约等于2.609090909,向上取整应该是3,缩容的情况根据我的分析,没有缩容对的,但是没有发扩容这是为什么呢?
我们提了一个阿里云工单,工单回复的算法与源码中的有出入,少了一个当前副本数的乘积运算,如下图
这笔肯定在坑人,没办法只能继续看源码。。。
Kubernetes源码分析-阿里云Kubernetes关于HPA没有扩缩容的原因定位_第2张图片

最近又对源码翻了几翻

找到很多种判断与运算pod metrics的函数,其中一个函数GetMetricUtilizationRatio计算的是这个工作负载的每个pod资源使用的平均值如下图
Kubernetes源码分析-阿里云Kubernetes关于HPA没有扩缩容的原因定位_第3张图片
我的理解是这个方法有很多种取值运算预期节点的函数,HPA最初创建的死循环通过不停的判断这些函数来判断是否修改replicas数。

由此得出prometheus监控HPA是否达到扩容阈值判断语句如下:

CPU

Kubernetes源码分析-阿里云Kubernetes关于HPA没有扩缩容的原因定位_第4张图片

内存

Kubernetes源码分析-阿里云Kubernetes关于HPA没有扩缩容的原因定位_第5张图片

你可能感兴趣的:(kubernetes,源码分析)