【发布时间】:2020-10-20 05:58:48
【问题描述】:
我有一个 Java 应用程序在 K8s 上运行,部署中有 min:2 和 max:6 pod。 堆最小值:256Mb,堆最大值:512Mb。请求和限制内存为 1Gi 这是 hpa 规范:
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 6
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 60
- type: Resource
resource:
name: memory
targetAverageUtilization: 60
在性能测试期间,我注意到部署正试图非常积极地扩展。
没有负载的时候,内存利用率在33%左右,根据这个链接https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
大致了解所需 pod 的公式是 desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
从 K8s 监控中,我注意到它会在内存利用率增加到 40% 左右时尝试扩展。如果我正确理解上述公式的工作原理,desiredReplicas = ceil[2*(0.4/0.6)] = 2,那么它不应该扩大规模。
我理解正确吗?
【问题讨论】:
-
您的工作流程是否正常进行?或者,如果在某些操作期间正在执行的事务有任何下降,请尝试检查应用程序日志,同时当您看到 HPA 的这种行为时。它也发生在我身上,场景就像在 API 调用之后生成一个庞大的报告,但是当 PDF 的大小达到阈值时,调用正在下降并且新的 POD 开始产生,我增加了内存和 cpu,然后它得到了排序
-
这是我感受到的实际案例之一,在使用 Azure kubernetes 集群服务时,我一直无法正确理解扩容,很多时候扩容发生了,甚至在负载增加时减少了从那时起大约需要 10 分钟才能恢复到原始所需的副本状态。您也可以检查此观察结果
标签: spring-boot docker kubernetes hpa