我已经为部署创建了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
答案 0 :(得分:0)
在这种情况下,Horizontal Pod Autoscaler正在按设计工作。
自动定标器可以是configured,以使用一个或多个指标。
HorizontalPodAutoscaler
资源上设置的目标值,然后将其四舍五入为更大的整数。 li>
desired_replicas = sum(utilization) / desired_utilization
。
示例:当配置为考虑CPU进行扩展时。如果将target设置为30%并且CPU使用率为97%:97%/ 30%= 3.23,并且HPA会将其四舍五入(下一个较大的整数)。
示例:如果要达到目标CPU使用率需要三个Pod,并且要达到目标内存使用率需要两个Pod,则Autoscaler会扩展到三个Pod-达到目标所需的最大数量。
希望对您有帮助。
答案 1 :(得分:0)
当负载减少时,HPA会在缩小应用程序之前有意地等待一段时间。这就是所谓的cooldown delay,有助于使应用程序缩放得过于频繁。这样的结果是,即使指标值远低于目标值,应用程序仍会在一定时间内以先前的高副本数运行。看起来HPA对降低的负载没有响应,但最终会响应。
但是,冷却延迟的默认持续时间为5分钟。因此,如果30-40分钟后该应用仍未缩小,这很奇怪。除非使用controller manager的--horizontal-pod-autoscaler-downscale-stabilization
标志将冷却延迟设置为其他时间。
在您发布的输出中,指标值为49%,目标值为60%,当前副本数为3。这实际上是 还不错。
一个问题可能是您使用内存使用率作为指标,这不是一个很好的自动扩展指标。
自动缩放指标应线性响应跨应用程序副本的当前负载。如果副本数增加了一倍,则度量值应减半;如果副本数减少一半,则度量值应加倍。在大多数情况下,内存利用率不会显示此行为。例如,如果每个副本使用固定数量的内存,则无论添加或删除了多少个副本,副本之间的平均内存利用率都大致保持不变。在这方面,CPU利用率通常要好得多。