Kubernetes如何计算HPA的CPU使用率? [英] How Kubernetes computes CPU utilization for HPA?

查看:24
本文介绍了Kubernetes如何计算HPA的CPU使用率?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想了解HPA如何计算跨Pod的CPU利用率。

根据doc,它等于实例的平均CPU利用率(过去1分钟的平均值)除以实例请求的CPU。然后计算所有Pod的CPU的算术平均值。

遗憾的是,文档包含一些过时的信息,例如,--horizontal-pod-autoscaler-sync-period默认设置为30秒,但在the official doc中,缺省值为15秒。

当我测试时,我注意到HPA甚至在平均CPU达到我设置的阈值(90%)之前就进行了扩展,这让我认为它可能会跨Pods占用最大CPU,而不是平均CPU。

我的问题是在哪里可以找到更新的文档以确切地了解HPA是如何工作的?

推荐答案

注意,我手头没有kubernetes集群,这是基于K8S源代码的理论答案。
看看这是否真的符合你的经验。


Kubernetes是开源的,这里似乎是HPA code

函数GetResourceReplicacalcPlainMetricReplicas(表示非利用率百分比)计算给定当前指标的副本数量。
两者都使用GetMetricUtilizationRatio返回的usageRatio,此值乘以副本中当前就绪的Pod数,得到新的Pod数:

New_number_of_pods = Old_numbers_of_ready_pods * usageRatio
有容差检查(即,如果usageRatio降到足够接近1,则不执行任何操作),并忽略挂起和未知状态的Pod(被认为使用了0%的资源),而没有度量的Pod被认为使用了100%的资源。

usageRatioGetResourceUtilizationRatio计算,向所有Pod传递指标和(资源)请求,如下所示:

utilization = Total_sum_resource_usage_all_pods / Total_sum_resource_requests_all_pods
usageRatio = utilization * 100 / targetUtilization

其中targetUtilization来自HPA规范。
代码比我的摘要更容易阅读,在这个上下文中,术语请求意味着"资源请求"(这是一个有根据的猜测)。

所以我认为90%是计算所有Pod的资源使用率,因为它们都是单个Pod,请求每个Pod的请求总和并收集指标,因为它们都在单个专用节点上运行。

这篇关于Kubernetes如何计算HPA的CPU使用率?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆