kubernetes - Kubernetes 如何计算 HPA 的 CPU 利用率?
问题描述
我想了解 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 代码。
函数GetResourceReplica
和calcPlainMetricReplicas
(用于非利用率百分比)计算给定当前指标的副本数。
两者都使用了usageRatio
by 的返回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 请求的总和并收集指标,因为它们都在单个专用节点上运行。
推荐阅读
- javascript - Sails 自动删除我在布局中添加的资源
- woocommerce - 将文本添加到 WooCommerce 循环类别计数
- php - Linux中的Rachet和命名管道
- javascript - 使用 localStorage 编辑一组对象
- c - 如何删除包含用户在文件中提供的字符串的整行
- python - 在每个时期而不是按行拆分 .txt?
- mysql - 需要基于字符为阿拉伯语的搜索参数在 Mysql 中进行匹配的正则表达式
- python - 错误:“主机没有 pg_hba.conf 条目”使用 Django 和 PostgreSQL?
- javascript - Chrome 扩展中 popup.html 的内容没有快速更新
- python-3.x - Python DataFrame - 根据条件从另一列更新一个数据框列