微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kubernetes HPA并未按预期降级

如何解决Kubernetes HPA并未按预期降级

发生了什么: 我已经使用以下详细信息配置了hpa:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
Metadata:
  name: api-horizontalautoscaler
  namespace: develop
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: api-deployment
  minReplicas: 1
  maxReplicas: 4
  metrics:
  - type: Resource
    resource:

      name: memory
      targetAverageValue: 400Mib

我期望发生的事情: 当我们施加一些负载并且平均内存超过了预期的400时,pod会扩展到3个。现在,平均内存已回落到大约300,即使荚已经低于目标几个小时,荚也没有缩小。

image

一天后:

image

我希望当内存低于400时,pod会缩小

环境

  • Kubernetes版本(使用kubectl version):
Client Version: version.Info{Major:"1",Minor:"13",GitVersion:"v1.13.9",GitCommit:"3e4f6a92de5f259ef313ad876bb008897f6a98f0",GitTreeState:"clean",BuildDate:"2019-08-05T09:22:00Z",GoVersion:"go1.11.5",Compiler:"gc",Platform:"linux/amd64"}
Server Version: version.Info{Major:"1",GitVersion:"v1.13.10",GitCommit:"37d169313237cb4ceb2cc4bef300f2ae3053c1a2",BuildDate:"2019-08-19T10:44:49Z",GoVersion:"go1.11.13",Platform:"linux/amd64"}re configuration:
  • 操作系统(例如:cat /etc/os-release):
> cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
  • 内核(例如uname -a): x86_64 x86_64 x86_64 GNU / Linux

我真的很想知道为什么会这样。我很乐意提供所需的任何信息。

谢谢!

解决方法

HPA如何确定要运行的吊舱数量的公式位于Horizontal Pod Autoscaler documentation中:

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

根据您提供的数字,currentReplicas为3,currentMetricValue为300 MiB,而desiredMetricValue为400 MiB,因此这减少为

desiredReplicas = ceil[3 * (300 / 400)]
desiredReplicas = ceil[3 * 0.75]
desiredReplicas = ceil[2.25]
desiredReplicas = 3

您需要进一步降低负载(平均内存使用率低于266 MiB),或者增加目标内存使用率,以进一步缩小负载。

(仅低于目标值本身不会触发缩小,因此您必须足够低于目标值,此公式才能产生较小的数字。这有助于避免在负载正好位于阈值附近时发生抖动触发一个方向或另一个方向的缩放。)

,

有两件事要看:

测试版,其中包括扩展内存和 自定义指标,可以在autoscaling/v2beta2中找到。新领域 autoscaling/v2beta2中引入的注释在以下情况下保留为注释 与autoscaling/v1合作。

autoscaling/v2beta2是在K8s 1.12中引入的,因此尽管您使用的是1.13(现在是6个主要版本),它也可以正常工作(但是,建议升级到新版本)。尝试将apiVersion:更改为autoscaling/v2beta2

--horizontal-pod-autoscaler-downscale-stabilization:的值 此选项的持续时间指定自动定标器的持续时间 等待,然后再执行另一次降级操作 目前已经完成。默认值为5分钟(5m0s)。

更改上面建议的API后,检查此特定标志的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。