HPA缩减无法正常进行

时间:2019-10-24 06:17:34

标签: 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

2 个答案:

答案 0 :(得分:0)

在这种情况下,Horizontal Pod Autoscaler正在按设计工作。

自动定标器可以是configured,以使用一个或多个指标。

  1. 基于单个指标的自动缩放-汇总所有Pod的指标值,将其除以HorizontalPodAutoscaler资源上设置的目标值,然后将其四舍五入为更大的整数。 li>

desired_replicas = sum(utilization) / desired_utilization

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

  1. 基于多个Pod指标的自动缩放-分别计算每个指标的副本计数,然后采用最大值。

示例:如果要达到目标CPU使用率需要三个Pod,并且要达到目标内存使用率需要两个Pod,则Autoscaler会扩展到三个Pod-达到目标所需的最大数量。

  1. 基于自定义指标的自动缩放-允许您基于非资源指标类型进行放大/缩小,例如,基于每秒查询数来扩展前端应用程序。

希望对您有帮助。

答案 1 :(得分:0)

当负载减少时,HPA会在缩小应用程序之前有意地等待一段时间。这就是所谓的cooldown delay,有助于使应用程序缩放得过于频繁。这样的结果是,即使指标值远低于目标值,应用程序仍会在一定时间内以先前的高副本数运行。看起来HPA对降低的负载没有响应,但最终会响应。

但是,冷却延迟的默认持续时间为5分钟。因此,如果30-40分钟后该应用仍未缩小,这很奇怪。除非使用controller manager--horizontal-pod-autoscaler-downscale-stabilization标志将冷却延迟设置为其他时间。

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

一个问题可能是您使用内存使用率作为指标,这不是一个很好的自动扩展指标。

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