kubernetes - 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
我预期会发生什么:当我们加载一些负载时,Pod 扩展到 3 个,并且平均内存超过了预期的 400。现在平均内存已经回落到大约 300 并且 Pod 仍然没有缩小,即使它们已经低于目标几个小时了。
一天后:
我预计当内存低于 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", Minor:"13", GitVersion:"v1.13.10", GitCommit:"37d169313237cb4ceb2cc4bef300f2ae3053c1a2", GitTreeState:"clean", BuildDate:"2019-08-19T10:44:49Z", GoVersion:"go1.11.13", Compiler:"gc", 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 如何决定运行多少个 pod 的公式在Horizontal Pod Autoscaler 文档中:
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 的平均内存利用率)或增加目标内存利用率以进一步缩减。
(简单地低于目标不会自行触发缩减,您必须低于目标足以让此公式产生较低的数字。如果负载正好在触发缩减的阈值附近,这有助于避免颠簸一个方向或另一个方向。)
推荐阅读
- asp.net - MVC 核心 - 返回上一页
- apache-spark - 如何将路径列表传递给 spark.read.textFile?
- angular - 部署一个没有 Angular CLI 的 Angular 6 项目
- java - 代码改进:视图列表
- git - 确定传入 HTTP 请求的 VCS
- routes - 在没有 authGuard 的情况下保护路由
- html - 选择时如何删除标签HTML上的突出显示
- python-3.x - 插入多个表 - 使用字符串值作为变量
- movilizer - 如何在 MEL 脚本中调试全局变量
- javascript - 为什么 $mail->body =$message 的值为空?