4

我已经为我的部署创建了 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
4

2 回答 2

9

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

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

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

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

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

于 2019-10-26T14:03:20.573 回答
0

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

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 将扩展到三个 pod - 达到目标所需的最高数量。

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

我希望它有所帮助。

于 2019-10-25T08:23:07.330 回答