Kubernetes HPA未按预期缩小规模

Kubernetes HPA未按预期缩小规模,kubernetes,horizontal-pod-autoscaling,horizontalpodautoscaler,Kubernetes,Horizontal Pod Autoscaling,Horizontalpodautoscaler,发生了什么事 我已使用以下详细信息配置了hpa: apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: api-horizontalautoscaler namespace: develop spec: scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: api-deplo

发生了什么事 我已使用以下详细信息配置了hpa:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: api-horizontalautoscaler
  namespace: develop
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: api-deployment
  minReplicas: 1
  maxReplicas: 4
  metrics:
  - type: Resource
    resource:

      name: memory
      targetAverageValue: 400Mib
我预期会发生什么: 当我们加载一些负载时,POD扩展到3个,平均内存超过了预期的400。现在平均内存已经下降到大约300个,尽管已经低于目标数几个小时了,但豆荚仍然没有缩小。

一天后:

我预计当内存降至400以下时,吊舱会缩小

环境

  • Kubernetes版本(使用
    kubectl版本
    ):
  • 操作系统(例如:
    cat/etc/OS-release
    ):
  • 内核(例如
    uname-a
    ): x86_64 x86_64 x86_64 GNU/Linux
我很想知道为什么会这样。我很乐意提供所需的任何信息


谢谢

有两件事要看:

  • 委员会:
beta版,包括对内存和内存扩展的支持 自定义指标,可在
自动缩放/v2beta2
中找到。新领域 在
自动缩放/v2beta2中引入的
使用
自动缩放/v1

K8s 1.12中引入了
autoscaling/v2beta2
,因此尽管您使用的是1.13(现在是6个主要的旧版本),但它应该可以正常工作(不过,建议升级到新版本)。尝试将您的
apiVersion:
更改为
autoscaling/v2beta2

  • 委员会:
——水平吊舱自动缩放降尺度稳定化
:用于 此选项是一个持续时间,用于指定自动缩放器的持续时间 等待,然后在 当前一个已完成。默认值为5分钟(
5ms


更改上述建议的API后,请检查此特定标志的值。

HPA决定运行多少POD的公式如下:

根据您给出的数字,
currentMetricValue
为3,
currentMetricValue
为300 MiB,
desiredMetricValue
为400 MiB,因此这将减少到

desiredReplicas = ceil[3 * (300 / 400)]
desiredReplicas = ceil[3 * 0.75]
desiredReplicas = ceil[2.25]
desiredReplicas = 3
您需要进一步降低负载(低于266 MiB平均内存利用率)或增加目标内存利用率,以便进一步缩小规模


(仅仅低于目标本身不会触发缩放,您必须足够低于目标,此公式才能生成较低的数字。如果负载正好在阈值附近,这有助于避免抖动,从而触发一个方向或另一个方向的缩放。)

感谢您的回答。这是有道理的,但我显示的第二个屏幕截图显示内存大约为190M,这意味着使用公式,所需的副本应该是2。不是这样吗?TBH我也注意到了这一点,但指出@DavidMaze可能与k8s问题有误的想法对我来说是不对的;)谢谢我会试一试,然后再打给你。一些其他的优先事项出现了,我从来没有机会测试这个建议yetMany谢谢!这是现在的工作,因为我会预期,我得到了它的规模向上和向下。
> cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
desiredReplicas = ceil[3 * (300 / 400)]
desiredReplicas = ceil[3 * 0.75]
desiredReplicas = ceil[2.25]
desiredReplicas = 3