【问题标题】:Kubernetes HPA Auto Scaling VelocityKubernetes HPA 自动扩展速度
【发布时间】:2020-02-20 23:02:21
【问题描述】:

我们为应用程序定义了 HPA,使其具有最少 1 个和最多 4 个副本,以 80% cpu 作为阈值。

我们想要的是,如果 pod cpu 超过 80%,应用程序需要一次放大 1 个。 相反,正在发生的事情是应用程序正在扩大到最大数量的副本。

我们如何定义一次缩放 1 个 pod 的缩放速度。同样,如果其中一个 pod 消耗超过 80% 的 cpu,则再扩大一个 pod,但不要扩大最大副本数。

让我知道我们如何实现这一目标。

【问题讨论】:

  • 根据您的目标 CPU (80%),仅添加一个 pod 的扩展是否达到了该目标?据我所知,它的工作方式是 kubernetes 扩展到所需的 pod 数量以低于目标,并且它立即这样做以避免颠簸(因为这会消耗资源而不断扩大和缩小),你还应该请注意,每次放大或缩小之间都有一个死区时间,这被认为是一个禁止窗口。
  • 您能发布 hpa yaml 或告诉我们您的 scaleTargetRef 是什么吗?

标签: kubernetes kubernetes-hpa


【解决方案1】:

首先,80% CPU 利用率不是阈值而是目标值。

用于计算所需副本数的HPA algorithm基于以下公式:

X = N * (C/T)

地点:

  • X:所需的副本数
  • N: 当前副本数
  • C:指标的当前值
  • T:指标的目标值

换句话说,该算法旨在计算副本计数,以使观察到的指标值尽可能接近目标值。

在您的情况下,这意味着如果您的应用程序的 pod 的平均 CPU 利用率低于 80%,HPA 倾向于减少副本数量(以使剩余 pod 的 CPU 利用率上升)。另一方面,如果跨 pod 的平均 CPU 利用率在 80% 以上,HPA 倾向于增加副本数,从而降低单个 pod 的 CPU 利用率。

在单个步骤中添加或删除的副本数取决于当前指标值与目标值的距离以及当前的副本数。这个决定是 HPA 算法内部的,你不能直接影响它。 HPA 与其用户签订的唯一合同是使指标值尽可能接近目标值。

如果您需要非常具体的自动缩放行为,您可以编写自定义控制器(或运算符)来自动缩放您的应用程序,而不是使用 HPA。

【讨论】:

    【解决方案2】:

    这 - https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details - 解释了 HPA 使用的算法,包括计算“所需副本”数量的公式。

    如果我记得,HPA 算法在 v1.12 中有一些(积极的)变化。

    【讨论】:

      【解决方案3】:

      从今天起,HPA 可以完全控制扩大规模。您只能使用以下参数微调缩减操作。

      --horizo​​ntal-pod-autoscaler-downscale-stabilization

      好消息是Configurable scale up/down velocity for HPA有提议

      【讨论】:

        猜你喜欢
        • 2021-07-08
        • 2020-10-15
        • 1970-01-01
        • 2021-01-26
        • 2021-02-07
        • 2019-10-07
        • 1970-01-01
        • 2020-11-23
        • 2021-11-05
        相关资源
        最近更新 更多