即使当前 CPU 低于目标 CPU,HPA 扩展也是如此

Jer*_*ars 2 cpu-usage google-cloud-platform kubernetes google-kubernetes-engine hpa

我正在 Kubernetes 中使用 Horizo​​ntal Pod Autoscaler。我已将 HPA 设置为在平均 CPU 利用率超过 35% 时启动新实例。然而,这似乎并没有按预期工作。即使 CPU 利用率远低于定义的目标利用率,HPA 也会触发重新调整。如下所示,“当前”利用率为 10%,与 35% 相去甚远。但它仍然将 Pod 数量从 5 个调整为 6 个。 在此输入图像描述

我还检查了我的 Google Cloud Platform 仪表板(我们托管应用程序的位置)中的指标。这也表明请求的 CPU 利用率没有超过 35% 的阈值。但仍然发生了几次调整。 在此输入图像描述

我的 HPA 的内容

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
 name: django
spec:
{{ if eq .Values.env "prod" }}
 minReplicas: 5
 maxReplicas: 35
{{ else if eq .Values.env "staging" }}
 minReplicas: 1
 maxReplicas: 3
{{ end }}
 scaleTargetRef:
   apiVersion: apps/v1
   kind: Deployment
   name: django-app
 targetCPUUtilizationPercentage: 35
Run Code Online (Sandbox Code Playgroud)

有谁知道这可能是什么原因?

Dre*_*rew 9

缩放比例基于requestsnot的 % limits。我认为我们应该更改这个答案,因为已接受答案中的示例显示:

 limits:
   cpu: 1000m
Run Code Online (Sandbox Code Playgroud)

但它targetCPUUtilizationPercentage是基于requests这样的:

requests:
   cpu: 1000m
Run Code Online (Sandbox Code Playgroud)

对于每个 Pod 资源指标(如 CPU),控制器从 Horizo​​ntalPodAutoscaler 所针对的每个 Pod 的资源指标 API 中获取指标。然后,如果设置了目标利用率值,则控制器会计算利用率值占每个 Pod 中容器上的等效资源请求的百分比。如果设置了目标原始值,则直接使用原始指标值。然后,控制器获取所有目标 Pod 的利用率或原始值(取决于指定的目标类型)的平均值,并生成用于缩放所需副本数量的比率。

https://kubernetes.io/docs/tasks/run-application/horizo​​ntal-pod-autoscale/#how-does-a-horizo​​ntalpodautoscaler-work