Spring boot 库伯纳斯自动缩放存储器

Spring boot 库伯纳斯自动缩放存储器,spring-boot,docker,kubernetes,hpa,Spring Boot,Docker,Kubernetes,Hpa,我有一个java应用程序在K8s上运行,在一个部署中有最少2个和最多6个pod。 堆最小值:256Mb,堆最大值:512Mb。请求和限制内存为1Gi 以下是hpa规范: spec: scaleTargetRef: apiVersion:extensions/v1beta1 种类:部署 名称:我的应用程序 2005年:2 最大副本数:6 韵律学: -类型:资源 资源: 名称:中央处理器 目标平均利用率:60 -类型:资源 资源: 名称:内存 目标平均利用率:60 在性能测试期间,我注意到部署正试

我有一个java应用程序在K8s上运行,在一个部署中有最少2个和最多6个pod。 堆最小值:256Mb,堆最大值:512Mb。请求和限制内存为1Gi 以下是hpa规范:

spec:
scaleTargetRef:
apiVersion:extensions/v1beta1
种类:部署
名称:我的应用程序
2005年:2
最大副本数:6
韵律学:
-类型:资源
资源:
名称:中央处理器
目标平均利用率:60
-类型:资源
资源:
名称:内存
目标平均利用率:60
在性能测试期间,我注意到部署正试图非常积极地扩展

当没有负载时,内存利用率约为33%,根据此链接 大致了解所需POD的公式是
desiredReplicas=ceil[currentReplicas*(currentMetricValue/desiredMetricValue)]

从K8s监控中,我注意到当内存利用率增加到40%左右时,它会尝试放大。如果我正确理解了上述公式的工作原理,
desiredReplicas=ceil[2*(0.4/0.6)]=2
,那么它不应该放大


我理解正确吗?

看起来正确,但我猜测了一会儿,因为您没有共享
kubectl top pods的输出。您的部署可能不是因为内存利用率而扩展的,而是首先因为CPU利用率

如果看到第一个达到目标的指标,则启动自动缩放过程:

Kubernetes 1.6增加了对基于多个度量的扩展的支持。您可以使用autoscaling/v2beta2 API版本为水平吊舱自动缩放器指定多个要缩放的指标。然后,水平吊舱自动缩放控制器将评估每个指标,并基于该指标提出一个新的标尺。拟议比额表中的最大比额表将用作新比额表

您还可以尝试内存目标的值度量来进行故障排除:

指标:
-类型:资源
资源:
名称:中央处理器
目标平均利用率:60
-类型:资源
资源:
名称:内存
目标平均值:700米
查看当前指标的一个好方法是仅获取HPA上完整输出的状态:

$kubectl获得hpa-o=yaml

您的工作流程是否正常运行?或者,如果在某些操作期间正在执行的事务有所减少,请在看到HPA的这种行为的同时,尝试检查应用程序日志。这也发生在我身上,场景就像在API和API调用之后生成一个庞大的报告,但PDF的大小达到阈值时,调用正在下降,新的POD开始生成,我增加了内存和cpu,然后它被分类。这是我感觉到的一个实际案例,在使用Azure kubernetes群集服务时,我一直无法正确理解扩展,很多时候扩展都发生了,甚至当负载减少时,从那时起大约需要10分钟才能恢复到所需的原始副本状态。您也可以查看此观察结果,以获取您的评论。我的应用程序的CPU占用率非常低,我已经检查过CPU利用率保持在2%左右。我们的集群正在使用v2Beta1,我不确定我是否能够使用多指标,我可能会尝试设置该值,看看我是否能够解决这个问题