Kubernates自动缩放内存



我有一个在 K8s 上运行的 Java 应用程序,在部署中具有最小:2 和最大: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/大致了解所需豆荚的公式是desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

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

我理解正确吗?

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

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

Kubernetes 1.6 增加了对基于多个指标的扩展的支持。可以使用自动缩放/v2beta2 API 版本为水平容器自动缩放程序指定多个指标以进行缩放。然后,水平窗格自动缩放器控制器将评估每个指标,并根据该指标提出新的规模。拟议比例表中最大的一个将用作新比例

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

metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 60
- type: Resource
resource:
name: memory
targetAverageValue: 700M

查看当前指标的一个好方法是获取 HPA 上完整输出的状态:

$ kubectl get hpa <hpa-name> -o=yaml

相关内容

  • 没有找到相关文章

最新更新