HPA 未按比例缩小 对每个 Deployments 的计算

问题描述

我希望你能对此有所了解。

我面临与此处所述相同的问题:Kubernetes deployment not scaling down even though usage is below threshold

我的配置几乎相同。

我已经检查了 hpa 算法,但我找不到解释我只有一个 my-app3 副本这一事实。 有什么提示吗?

kubectl get hpa -A 

NAMESPACE            NAME        REFERENCE              TARGETS            MINPODS   MAXPODS   REPLICAS   AGE
my-ns1               my-app1     Deployment/my-app1     49%/75%,2%/75%    1         10        2          20h
my-ns2               my-app2     Deployment/my-app2     50%/75%,10%/75%   1         10        2          22h
my-ns2               my-app3     Deployment/my-app3     47%/75%,10%/75%   1         10        1          22h
kubectl top po -A

NAMESPACE             NAME                                                     cpu(cores)   MEMORY(bytes)              
my-ns1                pod-app1-8d694bc8f-mkbrh                                 1m           76Mi            
my-ns1                pod-app1-8d694bc8f-qmlnw                                 1m           72Mi            
my-ns2                pod-app2-59d895d96d-86fgm                                1m           77Mi            
my-ns2                pod-app2-59d895d96d-zr67g                                1m           73Mi            
my-ns2                pod-app3-6f8cbb68bf-vdhsd                                1m           47Mi 

解决方法

确实,从我的研究来看,HPA 算法似乎是这样工作的: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details

不知道为什么my-app3被分配了一个副本,另外两个应用分配了两个副本,但根据算法,此时不需要横向扩展。

,

发布此答案,因为它可能有助于社区成员了解为什么Horizontal Pod Autoscaler 决定在此特定设置中扩展副本数量。

副本工作负载量的公式是:

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

根据 HPA 的描述:

NAMESPACE            NAME        REFERENCE              TARGETS            MINPODS   MAXPODS   REPLICAS   AGE
my-ns1               my-app1     Deployment/my-app1     49%/75%,2%/75%    1         10        2          20h
my-ns2               my-app2     Deployment/my-app2     50%/75%,10%/75%   1         10        2          22h
my-ns2               my-app3     Deployment/my-app3     47%/75%,10%/75%   1         10        1          22h

HPA当前数量的前提下决定副本的数量。

附注:在使用多个指标(例如 CPURAM)的设置中,它将使用较高的指标并采取相应的行动。

另外请考虑downscaling has a cooldown


对每个 Deployments 的计算

ceil[] - 向上取整:

  • 细胞(4,55)= 5
  • 细胞(4,01)= 5

app1

  • Replicas = ceil[2 * (49 / 75)]
  • Replicas = ceil[2 * 0,6533..]
  • Replicas = 细胞[1,3066..]
  • Replicas = 2

这个例子表明副本数量没有变化。

副本数量:

  • UpcurrentMetricValue (49) 超过 desiredMetricValue (75)
  • 向下,当 currentMetricValue (49) 小于 desiredMetricValue (75 )

app2app1 的情况相同,因此可以跳过

app3

  • Replicas = ceil[1 * (49 / 75)]
  • Replicas = ceil[1 * 0,6266..]
  • Replicas = 细胞[0,6266..]
  • Replicas = 1

这个例子还表明副本数量没有变化。

副本数量:

  • UpcurrentMetricValue (47) 超过 desiredMetricValue (75)

其他资源: