我想了解HPA如何计算跨Pod的CPU利用率。
根据此doc,它用pod的平均CPU利用率(最近1分钟的平均值)除以pod所请求的CPU。然后计算所有Pod的CPU的算术平均值。
不幸的是,文档中包含一些过时的信息,例如--horizontal-pod-autoscaler-sync-period
默认设置为30秒,而the official doc中的默认值为15秒。
当我进行测试时,我注意到HPA甚至在平均CPU达到我设置的阈值(90%)之前就已经扩大了,这让我认为也许Pod占用了CPU的最大CPU而不是平均值。
我的问题是,在哪里可以找到更新的文档以准确了解HPA的工作原理?
答案 0 :(得分:4)
请注意,我手头还没有Kubernetes集群,这是基于k8s源代码的理论答案。
看看这是否真的符合您的经验。
Kubernetes是开源的,这里似乎是HPA code。
在给定当前指标的情况下,函数GetResourceReplica
和calcPlainMetricReplicas
(用于非利用率百分比)计算副本数。
两者都使用GetMetricUtilizationRatio
返回的usageRatio
,该值乘以副本服务器中当前准备就绪的吊舱的数量即可获得新的吊舱数量:
New_number_of_pods = Old_numbers_of_ready_pods * usageRatio
进行容错检查(即,如果usageRatio
足够接近1,则什么也不做),而暂挂和未知状态的Pod被忽略(考虑使用0%的资源)如果没有指标,则认为已使用100%的资源。
usageRatio
由GetResourceUtilizationRatio
计算,并传递度量标准和 all 所有pod的(资源请求),其过程如下:
utilization = Total_sum_resource_usage_all_pods / Total_sum_resource_requests_all_pods
usageRatio = utilization * 100 / targetUtilization
targetUtilization
来自HPA规范。
该代码比我的摘要更易于阅读,在这种情况下,请求一词的意思是“资源请求”(这是有根据的猜测)。
因此,我想说90%是所有Pod中的资源使用量 ,因为它们都是一个Pod,它请求每个Pod的请求之和并收集指标,因为它们都在运行一个专用节点。
答案 1 :(得分:0)
根据https://github.com/kubernetes/kubernetes/issues/78988#issuecomment-502106361,这是与配置有关的,并且是度量服务器和kublet报告的问题,因此HPA宁愿仅使用以下信息: https://kubernetes.io/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#cpu
我认为持续时间应由kubelet的--housekeeping-interval定义,默认为10秒