尝试理解 Kubernetes 自动缩放中averageUtilization的含义

5 kubernetes

文档说

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

假设我有一个 Pod:

        resources:
          limits:
            cpu: "0.3"
            memory: 500M
          requests:
            cpu: "0.01"
            memory: 40M
Run Code Online (Sandbox Code Playgroud)

现在我有一个自动缩放定义:

type: Resource
resource:
  name: cpu
  target:
    type: Utilization
    averageUtilization: 60
Run Code Online (Sandbox Code Playgroud)

根据文档:

根据此指标,HPA 控制器会将扩展目标中 Pod 的平均利用率保持在 60%。利用率是Pod当前使用的资源与请求的资源之间的比率

所以,我在这里不明白一些事情。如果request是运行应用程序所需的最低资源,那么如何根据该值进行扩展?0.01 的 60% 不算什么,而且服务会不断扩展。

Man*_*nke 10

您的误解可能是, 的值request不一定是您的应用程序运行所需的最小值。

这是您(开发人员、管理员、DevOps)从 Kubernetes 集群请求运行应用程序中的 pod 的请求,它可以帮助调度程序为您的工作负载选择正确的节点(例如具有足够可用资源的节点)。所以,这个值不要选得太小或太高。

除此之外,自动缩放的工作原理正如您所描述的那样。在这种情况下,集群会计算您请求的 CPU 的使用量,并在使用量超过 60% 时进行扩展。请记住,Kubernetes 不会查看每个 Pod,而是查看该组中所有 Pod 的平均值。

例如,假设有两个正在运行的 pod,其中一个 pod 可以处理 100% 的请求,而另一个 pod(几乎)可以处理 0% 的请求。平均值约为 50%,因此在 Horizo​​ntal Pod Autoscaler 的情况下不会发生自动缩放。

在生产中,我个人尝试猜测正确的值,然后查看指标并根据我的实际工作负载调整这些值。Prometheus 是你的朋友,或者至少是指标服务器:

https://github.com/prometheus-operator/kube-prometheus https://github.com/kubernetes-sigs/metrics-server