【问题标题】:HPA not scaling downHPA 未按比例缩小
【发布时间】:2021-04-18 14:56:21
【问题描述】:

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

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

我的配置几乎相同。

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

kubectl 获取 hpa -A

命名空间名称参考目标 MINPODS MAXPODS REPLICAS AGE
my-ns1 my-app1 部署/my-app1 49%/75%, 2%/75% 1 10 2 20h
my-ns2 my-app2 部署/my-app2 50%/75%, 10%/75% 1 10 2 22h
my-ns2 my-app3 部署/my-app3 47%/75%, 10%/75% 1 10 1 22h
kubectl top po -A

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

【问题讨论】:

  • 你为什么要更多?它位于 1m CPU 上?而且,根本与 AKS 无关。还阅读链接线程中的答案
  • 我发现奇怪的是,所有 HPA 的 currentMetricValue/desiredMetricValue 几乎相同,但这个保持在 1。确实根据公式,不需要扩展 pod。
  • @Catalin 正如我所见,您已经找到了HPA 没有放大/缩小Deployments 的原因。当您找到原因时,请回答您的问题,以帮助社区解决类似问题。 PS:当目标值高于 75% 时,my-app3 将扩展到 2 个副本。当目标值小于 37.5% 时,my-app2 将扩展到 1 个副本。

标签: kubernetes hpa


【解决方案1】:

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

不知道为什么给my-app3分配了一个replica,另外两个app分配了两个replica,但是根据算法,此时不需要横向扩展。

【讨论】:

    【解决方案2】:

    发布此答案可能有助于社区成员了解为什么 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[] - 向上取整:

    • ceil(4,55) = 5
    • ceil(4,01) = 5

    app1:

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

    这个例子表明副本的数量不会改变。

    副本数量会去:

    • currentMetricValue (49) 超过desiredMetricValue (75) 时上升
    • currentMetricValue (49) 不到desiredMetricValue (75) 的一半下降

    app2app1的情况一样,可以跳过

    app3:

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

    这个例子也表明副本数量不会改变。

    副本数量会去:

    • currentMetricValue (47) 超过desiredMetricValue (75) 时上升

    其他资源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2015-01-09
      • 2015-07-03
      • 2018-06-12
      • 2016-05-23
      • 2018-06-18
      相关资源
      最近更新 更多