【问题标题】:Kubernetes HPA not downscaling as expectedKubernetes HPA 未按预期缩减
【发布时间】:2020-10-26 00:35:18
【问题描述】:

发生了什么: 我已经用这些细节配置了一个 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 并且 Pod 仍然没有缩小,即使它们已经低于目标几个小时了。

一天后:

我预计当内存低于 400 时 pod 会缩小

环境

  • Kubernetes 版本(使用kubectl version):
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.9", GitCommit:"3e4f6a92de5f259ef313ad876bb008897f6a98f0", GitTreeState:"clean", BuildDate:"2019-08-05T09:22:00Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.10", GitCommit:"37d169313237cb4ceb2cc4bef300f2ae3053c1a2", GitTreeState:"clean", BuildDate:"2019-08-19T10:44:49Z", GoVersion:"go1.11.13", Compiler:"gc", Platform:"linux/amd64"}re configuration:
  • 操作系统(例如:cat /etc/os-release):
> cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
  • 内核(例如uname -a): x86_64 x86_64 x86_64 GNU/Linux

我真的很想知道这是为什么。我很乐意提供任何需要的信息。

谢谢!

【问题讨论】:

    标签: kubernetes horizontal-pod-autoscaling horizontalpodautoscaler


    【解决方案1】:

    HPA 如何决定运行多少个 pod 的公式在 Horizontal Pod Autoscaler documentation 中:

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

    根据你给出的数字,currentReplicas 是 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 问题有错误的想法对我来说并不合适;)
    【解决方案2】:

    有两件事要看:

    测试版,其中包括对内存扩展的支持和 自定义指标,可以在autoscaling/v2beta2 中找到。新领域 autoscaling/v2beta2 中引入的在 与autoscaling/v1合作。

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

    --horizontal-pod-autoscaler-downscale-stabilization: 的值 此选项是一个持续时间,指定自动缩放器有多长时间 等待之前另一个缩小操作可以在之后执行 当前一个已经完成。默认值为 5 分钟 (5m0s)。

    在更改上面建议的 API 后检查此特定标志的值。

    【讨论】:

    • 谢谢!我会试一试,然后回复你。其他一些优先事项出现了,我还没有机会测试这个建议
    • 非常感谢!现在可以按预期工作,并且可以按比例放大和缩小。
    猜你喜欢
    • 2020-04-16
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2020-02-20
    • 2021-04-18
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多