Kubernetes pod cpu 使用率计算方法 HPA

Posted

技术标签:

【中文标题】Kubernetes pod cpu 使用率计算方法 HPA【英文标题】:Kubernetes pod cpu usage calculation method for HPA 【发布时间】:2018-06-18 17:19:38 【问题描述】:

有人可以解释如何在具有多个容器的 Pod 内计算 CPU 使用率,以便与 Horizo​​ntal Pod Autoscaler 一起使用吗? 是平均值吗?如何计算?

例如: 如果我们有 2 个容器:

Container1 请求 0.5 cpu 并使用 0 cpu Container2 请求 1 个 cpu 并使用 2 个 cpu

如果我们分别计算并取平均值:(0% + 200%)/2 = 100% 使用率?

如果我们求和取平均值:2/1.5 = 133% 的使用率?

还是我的逻辑有问题?

【问题讨论】:

【参考方案1】:

从 kubernetes 1.9 开始,HPA 将 pod cpu 利用率计算为 pod 中所有容器的总 cpu 使用率除以总请求数。因此,在您的示例中,计算出的使用率为 133%。我认为这在任何地方的文档中都没有指定,但相关代码在这里:https://github.com/kubernetes/kubernetes/blob/v1.9.0/pkg/controller/podautoscaler/metrics/utilization.go#L49

但是,我认为这是一个实现细节。因此,它可以在未来的版本中轻松更改。

【讨论】:

我认为这个文档现在已经过时了,您还有最新的吗?【参考方案2】:

在 Horizo​​ntal Pod Autoscaling 设计文档中,清楚地写道,它采用 pod 的 CPU 利用率的算术平均值来与目标值进行比较。以下是正文:

自动定标器作为控制循环实现。它定期 查询由 Scale 子资源的 Status.PodSelector 描述的 pod,以及 收集他们的 CPU 利用率。然后,它比较算术平均值 pod 的 CPU 利用率与定义的目标 Spec.CPUUtilization,并根据需要调整 Scale 的副本 匹配目标(保留条件:MinReplicas

目标 pod 数量由以下公式计算:

TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)

更多详情:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md

【讨论】:

如果我理解正确,这个信息是关于如何计算 HPA 需要启动多少个 pod。如果 pod 中有多个容器,它没有说明如何计算 pod cpu 使用率。我认为我的问题仍然存在。 这描述了自动缩放器如何考虑一组 pod 中每个 pod 的 CPU 使用率,而不是一组 pod 中每个容器的 CPU 使用率。

以上是关于Kubernetes pod cpu 使用率计算方法 HPA的主要内容,如果未能解决你的问题,请参考以下文章

通过Prometheus查询计算Kubernetes集群中Pod 的CPU、内存使用率等指标

kubernetes修改源代码,突破cpu的request限制

prometheus作为监控,如何计算kubernetes中容器的cpu使用率?

Kubernetes Pod 驱逐详解

kubernetes之计算机资源管理

Prometheus 查询以获取 kubernetes pod 中的 CPU 和内存使用情况