即使使用率低于阈值,Kubernetes 部署也不会缩减

Eti*_*tin 0 autoscaling kubernetes kubernetes-pod horizontal-pod-autoscaling

我\xe2\x80\x99m 很难理解我的水平 Pod 自动缩放器发生了什么\xe2\x80\x99s。

\n\n

如果内存或 CPU 使用率超过 80%,I\xe2\x80\x99m 会尝试扩展我的部署。

\n\n

这里\xe2\x80\x99是我的HPA模板:

\n\n
apiVersion: autoscaling/v2beta2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: my-hpa\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: my-deployment\n  minReplicas: 2\n  maxReplicas: 10\n  metrics:\n    - type: Resource\n      resource:\n        name: cpu\n        target:\n          type: Utilization\n          averageUtilization: 80\n    - type: Resource\n      resource:\n        name: memory\n        target:\n          type: Utilization\n          averageUtilization: 80\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是,尽管使用率低于 80%,但它\xe2\x80\x99 已经在 3 个副本上呆了好几天了,而且我不\xe2\x80\x99 不明白为什么。

\n\n
$ kubectl get hpa --all-namespaces\n\nNAMESPACE        NAME             REFERENCE                  TARGETS            MINPODS   MAXPODS   REPLICAS   AGE\nmy-ns            my-hpa           Deployment/my-deployment   61%/80%, 14%/80%   2         10        3          2d15h\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里\xe2\x80\x99是top命令的输出:

\n\n
$ kubectl top pods\n\nNAME                             CPU(cores)   MEMORY(bytes)   \nmy-deployment-86874588cc-chvxq   3m           146Mi           \nmy-deployment-86874588cc-gkbg9   5m           149Mi           \nmy-deployment-86874588cc-nwpll   7m           149Mi   \n
Run Code Online (Sandbox Code Playgroud)\n\n

每个 Pod 消耗大约 60% 的请求内存(因此它们低于 80% 的目标):

\n\n
$ kubectl get hpa --all-namespaces\n\nNAMESPACE        NAME             REFERENCE                  TARGETS            MINPODS   MAXPODS   REPLICAS   AGE\nmy-ns            my-hpa           Deployment/my-deployment   61%/80%, 14%/80%   2         10        3          2d15h\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的部署:

\n\n
$ kubectl top pods\n\nNAME                             CPU(cores)   MEMORY(bytes)   \nmy-deployment-86874588cc-chvxq   3m           146Mi           \nmy-deployment-86874588cc-gkbg9   5m           149Mi           \nmy-deployment-86874588cc-nwpll   7m           149Mi   \n
Run Code Online (Sandbox Code Playgroud)\n\n

我手动缩小到 2 个副本,但它立即无缘无故地恢复到 3 个:

\n\n
Normal   SuccessfulRescale             28s (x4 over 66m)    horizontal-pod-autoscaler  New size: 3; reason:\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人知道\xe2\x80\x99s 发生了什么吗?

\n

小智 5

https://kubernetes.io/docs/tasks/run-application/horizo​​ntal-pod-autoscale/#algorithm-details

根据您当前的数字,除非您的内存使用量下降到所需百分比的一半,否则它永远不会缩小。

即 CPU 和内存的当前利用率应达到 40%(在您的情况下)或更低

根据下面的公式

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
                = ceil[3 * (61/80)]
                = ceil[3 * (0.7625)]
                = ceil[2.2875]
desiredReplicas = 3
Run Code Online (Sandbox Code Playgroud)

你可能会怀疑你的CPU低于40%为什么它没有降级..但是hpa不会以这种方式工作..它总是会寻找更大的数字。