Kubernetes HPA规模缩小未正确进行

Kubernetes HPA规模缩小未正确进行,kubernetes,kubernetes-hpa,Kubernetes,Kubernetes Hpa,我已经为我的部署创建了HPA,在我的情况下,它可以很好地扩展到最大副本6,当负载将其扩展到5时,但在我的情况下,当负载变得正常时,它应该会恢复到副本1的原始状态。我已经验证了30-40分钟后我的应用程序仍然有5个副本。。 它应该是一个复制品 [ec2-user@ip-192-168-x-x ~]$ kubectl describe hpa admin-dev -n dev Name: admin-dev Namespace: dev Labels: <none> Annotatio

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

[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
在这种情况下,工作正常

Autoscaler可以使用一个或多个指标

基于单个度量的自动缩放-将所有POD的度量值相加,除以HorizontalPodAutoscaler资源上设置的目标值,然后将其四舍五入到下一个较大的整数。 所需的_副本=使用率/所需的_使用率

示例:当配置为可扩展时,考虑CPU。如果目标设置为30%,CPU使用率为97%:97%/30%=3.23,HPA将把它四舍五入到下一个更大的整数

基于多个pod度量的自动缩放-分别计算每个度量的副本计数,然后取最大值。 示例:如果需要三个POD才能达到目标CPU使用率,而需要两个POD才能达到目标内存使用率,则Autoscaler将扩展到三个POD—达到目标所需的最大数量

根据自定义指标自动缩放-允许您根据非资源指标类型进行上下缩放,例如根据每秒查询量缩放前端应用程序。 我希望它能有所帮助。

在这种情况下,它能按设计工作

Autoscaler可以使用一个或多个指标

基于单个度量的自动缩放-将所有POD的度量值相加,除以HorizontalPodAutoscaler资源上设置的目标值,然后将其四舍五入到下一个较大的整数。 所需的_副本=使用率/所需的_使用率

示例:当配置为可扩展时,考虑CPU。如果目标设置为30%,CPU使用率为97%:97%/30%=3.23,HPA将把它四舍五入到下一个更大的整数

基于多个pod度量的自动缩放-分别计算每个度量的副本计数,然后取最大值。 示例:如果需要三个POD才能达到目标CPU使用率,而需要两个POD才能达到目标内存使用率,则Autoscaler将扩展到三个POD—达到目标所需的最大数量

根据自定义指标自动缩放-允许您根据非资源指标类型进行上下缩放,例如根据每秒查询量缩放前端应用程序。
我希望这会有所帮助。

当负载减少时,HPA会故意等待一定时间,然后再缩小应用程序的规模。这被称为,并有助于该应用程序的放大和缩小过于频繁。这样做的结果是,即使度量值远低于目标值,应用程序仍会以先前的高副本计数运行一段时间。这可能看起来HPA对降低的负载没有响应,但最终会响应

但是,冷却延迟的默认持续时间为5分钟。因此,如果在30-40分钟后,应用程序仍然没有被缩小,这很奇怪。除非冷却延迟已通过的-水平吊舱自动缩放降尺度稳定标志设置为其他值

在您发布的输出中,度量值为49%,目标值为60%,当前副本计数为3。这似乎是真的 还不错

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


自动缩放指标应线性响应应用程序副本中的当前负载。如果复制副本数量加倍,则度量值应减半;如果复制副本数量减半,则度量值应加倍。在大多数情况下,内存利用率并不显示这种行为。例如,如果每个复制副本使用固定数量的内存,则无论添加或删除了多少复制副本,复制副本的平均内存利用率都大致相同。CPU利用率通常在这方面工作得更好。

当负载减少时,HPA会故意等待一段时间,然后再缩小应用程序。这被称为,并有助于该应用程序的放大和缩小过于频繁。这样做的结果是,即使度量值远低于目标值,应用程序仍会以先前的高副本计数运行一段时间。这可能看起来HPA对降低的负载没有响应,但最终会响应

但是,冷却延迟的默认持续时间为5分钟。因此,如果在30-40分钟后,应用程序仍然没有被缩小,这很奇怪。除非冷却延迟已通过的-水平吊舱自动缩放降尺度稳定标志设置为其他值

在您发布的输出中,度量值为49%,目标值为60%,当前副本计数为3。这似乎是真的 不太 糟糕

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


自动缩放指标应线性响应应用程序副本中的当前负载。如果复制副本数量加倍,则度量值应减半;如果复制副本数量减半,则度量值应加倍。在大多数情况下,内存利用率并不显示这种行为。例如,如果每个复制副本使用固定数量的内存,则无论添加或删除了多少复制副本,复制副本的平均内存利用率都大致相同。在这方面,CPU利用率通常要高得多。

但CPU负载的百分比是多少?它是否低于阈值?@suren是的,它是正常的,仅低于我的目标。@LakshmiReddy您能粘贴kubectl Descripte hpa的输出吗?@vesna,[ec2-user@ip-192-168-x-x~]$kubectl descripe hpa admin dev-n dev Name:admin dev命名空间:dev标签:Annotations:CreationTimestamp:Thu,2019年10月24日07:36:32+0000参考:部署/管理开发指标:POD上的当前/目标资源内存占请求的百分比:49%128566203733M/60%Min副本:最多1个副本:10个部署POD:3个当前/3desired@vesna,条件:类型状态原因消息-----AbleToScale True ReadyForNewScale建议的大小与当前大小匹配缩放活动True VALIDMETRIC发现HPA能够根据的内存资源利用率百分比成功计算副本计数request ScalingLimited False desired within范围所需计数在可接受范围内,但CPU负载的百分比是多少?它是否低于阈值?@suren是的,它是正常的,仅低于我的目标。@LakshmiReddy您能粘贴kubectl Descripte hpa的输出吗?@vesna,[ec2-user@ip-192-168-x-x~]$kubectl descripe hpa admin dev-n dev Name:admin dev命名空间:dev标签:Annotations:CreationTimestamp:Thu,2019年10月24日07:36:32+0000参考:部署/管理开发指标:POD上的当前/目标资源内存占请求的百分比:49%128566203733M/60%Min副本:最多1个副本:10个部署POD:3个当前/3desired@vesna,条件:类型状态原因消息-----AbleToScale True ReadyForNewScale建议的大小与当前大小匹配缩放活动True VALIDMETRIC发现HPA能够根据的内存资源利用率百分比成功计算副本计数request scaling limited False desired within范围所需计数在可接受范围内感谢您的详细解释。我的情况在这里有点不同,比如我在部署文件中为2000 Mi和1个副本请求了内存,并且HPA配置了80%的使用率,所以第一次应用程序启动时,显示HPA 46%的使用率,其中1个副本作为部署文件中的配置,突然,当内存尖峰发生时,HPA放大工作正常,它会启动其他POD,所以我的负载会缓慢减少,内存会变为45%,理想情况下应该是1,因为没有负载,但我的副本仍然是2。我希望HPA把它降到1。任何建议@LakshmiReddy能否发布部署和hpa yaml?感谢您的详细解释。我的情况在这里有点不同,比如我在部署文件中为2000 Mi和1个副本请求了内存,并且HPA配置了80%的使用率,所以第一次应用程序启动时,显示HPA 46%的使用率,其中1个副本作为部署文件中的配置,突然,当内存尖峰发生时,HPA放大工作正常,它会启动其他POD,所以我的负载会缓慢减少,内存会变为45%,理想情况下应该是1,因为没有负载,但我的副本仍然是2。我希望HPA把它降到1。任何建议@LakshmiReddy你能发布部署和hpa yaml吗?