HPA 缩减未正确发生

Lak*_*ddy 2 kubernetes kubernetes-hpa

我已经为我的部署创建了 HPA,它可以很好地扩展到最大副本(在我的情况下为 6),当负载将其规模减少到 5 但它应该达到我的原始副本状态(在我的情况下为 1)作为负载变得正常。我在 30-40 分钟后验证仍然我的应用程序有 5 个副本..它应该是 1 个副本。

[ec2-user@ip-192-168-x-x ~]$ kubectl describe hpa admin-dev -n dev

Name: admin-dev
Namespace: dev
Labels: <none>
Annotations: <none>
CreationTimestamp: Thu, 24 Oct 2019 07:36:32 +0000
Reference: Deployment/admin-dev
Metrics: ( current / target )
resource memory on pods (as a percentage of request): 49% (1285662037333m) / 60%
Min replicas: 1
Max replicas: 10
Deployment pods: 3 current / 3 desired
Conditions:
  Type           Status Reason             Message
  ----           ------ ------             -------
  AbleToScale    True   ReadyForNewScale   recommended size matches current size
  ScalingActive  True   ValidMetricFound   the HPA was able to successfully calculate a replica count from memory resource utilization (percentage of request)
  ScalingLimited False  DesiredWithinRange the desired count is within the acceptable range 

Events:
  Type   Reason            Age   From                      Message
  ----   ------            ----  ----                      -------
  Normal SuccessfulRescale 13m   horizontal-pod-autoscaler New size: 2; reason: memory resource utilization (percentage of request) above target
  Normal SuccessfulRescale 5m27s horizontal-pod-autoscaler New size: 3; reason: memory resource utilization (percentage of request) above target
Run Code Online (Sandbox Code Playgroud)

wei*_*eld 7

当负载减少时,HPA 会在缩小应用程序之前有意等待一段时间。这称为冷却延迟,有助于使应用程序过于频繁地放大和缩小。这样做的结果是,在一段时间内,即使指标值远低于目标,应用程序也会以之前的高副本计数运行。这可能看起来 HPA 对减少的负载没有响应,但最终会响应。

但是,冷却延迟的默认持续时间为 5 分钟。所以,如果 30-40 分钟后应用程序仍然没有缩小,这很奇怪。除非使用控制器管理器--horizontal-pod-autoscaler-downscale-stabilization标志将冷却延迟设置为其他内容。

在您发布的输出中,指标值为 49%,目标为 60%,当前副本计数为 3。这实际上似乎还不错。

一个问题可能是您将内存利用率用作指标,这不是一个好的自动缩放指标。

自动缩放指标应线性响应跨应用程序副本的当前负载。如果副本数加倍,度量值应该减半,如果副本数减半,度量值应该加倍。大多数情况下的内存利用率不会显示这种行为。例如,如果每个副本使用固定数量的内存,那么无论添加或删除多少副本,副本之间的平均内存利用率大致保持不变。在这方面,CPU 利用率通常要好得多。


Mar*_* K. 0

在这种情况下,Horizo​​ntal Pod Autoscaler按设计工作。

自动缩放器可以配置为使用一个或多个指标。

  1. 基于单个指标的自动缩放 - 将所有 pod 的指标值相加,除以资源上设置的目标值HorizontalPodAutoscaler,然后将其四舍五入到下一个更大的整数。

desired_replicas = sum(utilization) / desired_utilization

示例:当配置为考虑 CPU 扩展时。如果目标设置为 30% 并且 CPU 使用率为 97%:97%/30%=3.23,HPA 会将其舍入为 4(下一个更大的整数)。

  1. 基于多个 Pod 指标的自动缩放 - 单独计算每个指标的副本计数,然后取最高值。

示例:如果需要三个 pod 才能实现目标 CPU 使用率,并且需要两个 pod 才能实现目标内存使用率,则 Autoscaler 将扩展到 3 个 pod - 满足目标所需的最高数量。

  1. 根据自定义指标自动缩放 - 允许您根据非资源指标类型向上/向下缩放,例如根据每秒查询数缩放前端应用程序。

我希望它有帮助。