HPA的Kubernetes pod cpu使用计算方法

时间:2018-01-09 16:02:00

标签: docker kubernetes autoscaling

有人可以解释如何在具有多个容器的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%的使用量?

或者我的逻辑关闭了吗?

2 个答案:

答案 0 :(得分:3)

从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

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

答案 1 :(得分:2)

在Horizo​​ntal Pod Autoscaling设计文档中,它清楚地写明了它采用了pod的算术平均值'要与目标值进行比较的CPU利用率。这是文字:

  

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

目标豆荚数由以下公式计算:

TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)

有关详细信息:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md