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

标签 kubernetes cpu autoscaling hpa

我想了解 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 而不是平均值。

enter image description here

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

最佳答案

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

Kubernetes 是开源的,这里好像是 HPA code .

功能 GetResourceReplica calcPlainMetricReplicas (对于非利用率百分比)在给定当前指标的情况下计算副本数。
两者都使用 usageRatio返回者 GetMetricUtilizationRatio ,这个值乘以 Replica 中当前准备好的 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 - Kubernetes 如何计算 HPA 的 CPU 利用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60948575/

相关文章:

c# - 线程与单线程

hadoop - 如何对 AWS 组件进行自动化功能测试?

amazon-ec2 - 如何在 RabbitMQ 集群中进行负载分配?

Redis Pub/Sub 当 sub 是自动缩放组的一部分时

postgresql - 无法从外部机器连接到 Postgres(通过 Kubernetes Helm 安装)服务,连接被拒绝

kubernetes - 如何跟踪 Kubernetes 集群中的所有日志

kubernetes - Kubelet 未启动 : Crashing with Exit Status: 255/n/a

kubernetes - 如何在docker命令中切换用户(su)

c++ - Qt 如何获取 CPU 使用率?

c - IEEE 754 和浮点精度