Kubernetes如何计算HPA的CPU使用率? [英] How Kubernetes computes CPU utilization for HPA?
问题描述
我想了解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。
函数GetResourceReplica
和calcPlainMetricReplicas
(表示非利用率百分比)计算给定当前指标的副本数量。
两者都使用GetMetricUtilizationRatio
返回的usageRatio
,此值乘以副本中当前就绪的Pod数,得到新的Pod数:
New_number_of_pods = Old_numbers_of_ready_pods * usageRatio
有容差检查(即,如果usageRatio
降到足够接近1,则不执行任何操作),并忽略挂起和未知状态的Pod(被认为使用了0%的资源),而没有度量的Pod被认为使用了100%的资源。
usageRatio
由GetResourceUtilizationRatio
计算,向所有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屋!