繁体   English   中英

Kubernetes 如何计算 HPA 的 CPU 利用率?

[英]How Kubernetes computes CPU utilization for HPA?

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

根据此文档,它采用 pod 的 CPU 利用率的平均值(过去 1 分钟的平均值)除以 pod 请求的 CPU。 然后计算所有 Pod 的 CPU 的算术平均值。

不幸的是,该文档包含一些过时的信息,例如--horizontal-pod-autoscaler-sync-period默认设置为 30 秒,但在官方文档中,默认值为 15 秒。

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

在此处输入图片说明

我的问题是在哪里可以找到更新的文档以准确了解 HPA 的工作原理?

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


Kubernetes 是开源的,这里似乎是HPA 代码

函数GetResourceReplicacalcPlainMetricReplicas (用于非利用率百分比)计算给定当前指标的副本数。
两者都使用usageRatio返回的GetMetricUtilizationRatio ,该值乘以 Replica 中当前准备好的 pod 数量,以获得新的 pod 数量:

New_number_of_pods = Old_numbers_of_ready_pods * usageRatio

有一个容忍检查(即如果usageRatio足够接近1,什么都不做)并且挂起和未知状态的pods 被忽略(被认为使用0% 的资源)而没有metrics 的pods 被认为使用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 的请求总和并收集指标,因为它们都在单个专用节点上运行。

根据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 秒

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM