问题描述
我希望你能对此有所了解。
我面临与此处所述相同的问题: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
在当前数量的前提下决定副本的数量。
附注:在使用多个指标(例如 CPU
和 RAM
)的设置中,它将使用较高的指标并采取相应的行动。
另外请考虑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
这个例子表明副本数量没有变化。
副本数量:
-
Up 当
currentMetricValue
(49
) 超过desiredMetricValue
(75
) -
向下,当
currentMetricValue
(49
) 小于desiredMetricValue
(75
)
app2
与 app1
的情况相同,因此可以跳过
app3
:
-
Replicas
= ceil[1
* (49
/75
)] -
Replicas
= ceil[1
*0,6266..
] -
Replicas
= 细胞[0,6266..
] -
Replicas
=1
这个例子还表明副本数量没有变化。
副本数量:
-
Up 当
currentMetricValue
(47
) 超过desiredMetricValue
(75
)
其他资源: