Horizo​​ntalPodAutoscaler Kubernetes不保留最少数量的副本

问题描述

下午好。我正在使用HPA(Horizo​​ntalPodAutoscaler)来自动缩放Pod的副本,在这种情况下,我使用内存使用作为参考,我声明如下:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
Metadata:
  name: find-complementary-account-info-1
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: find-complementary-account-info-1
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: memory
      target:
        type: utilization
        averageutilization: 70

我想要的是在Pod的内存百分比使用率大于70%时自动缩放我的Pod,并且当此百分比下降时,我的副本将返回到声明的最小值,但是,在进行测试时,我将限制设置为70 ,如果没有,但是,当内存使用率低于此值时,副本将在4中继续。

5分钟过去了,这就是HPA显示内容

[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl get hpa -o wide
NAME                                REFERENCE                                      TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
find-complementary-account-info-1   Deployment/find-complementary-account-info-1   65%/70%   2         5         4          2d4h

我对HPA的概念有误,或者我以错误的方式声明了HPA的配置,或者一旦内存使用量低于指示的使用量,如何减少副本数

我的环境是本地环境,并且已配置了Metalb,并且我使用LoadBalancer公开了我的服务

解决方法

它正在按设计工作。通过使用以下公式,algorithm counts所需的副本数:

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

因此,如果您的desiredMetricValue为70%,而currentMetricValue为65%,则

desiredReplicas=4*(65%/70%)=~3.7

CEIL()函数返回大于或等于数字的最小整数值,因此在这种情况下为4。

如果要将数量减少到3个副本,则必须将利用率降低到52.5%:

3=4*(`currentMetricValue`/70)
currentMetricValue=52.5%