【问题标题】:How to make k8s cpu and memory HPA work together?如何让k8s cpu和内存HPA协同工作?
【发布时间】:2021-06-23 02:09:41
【问题描述】:

我正在为 CPU 和内存使用 k8s HPA 模板,如下所示:

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: {{.Chart.Name}}-cpu
  labels:
    app: {{.Chart.Name}}
    chart: {{.Chart.Name}}
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {{.Chart.Name}}
  minReplicas: {{.Values.hpa.min}}
  maxReplicas: {{.Values.hpa.max}}
  targetCPUUtilizationPercentage: {{.Values.hpa.cpu}}
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: {{.Chart.Name}}-mem
  labels:
    app: {{.Chart.Name}}
    chart: {{.Chart.Name}}
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {{.Chart.Name}}
  minReplicas: {{.Values.hpa.min}}
  maxReplicas: {{.Values.hpa.max}}
  metrics:
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageValue: {{.Values.hpa.mem}}

由于 pod 的 CPU 使用率低于 CPU 的缩减触发器,因此拥有两个不同的 HPA 会导致任何新的 pod 启动以触发内存 HPA 限制,从而立即被 CPU HPA 终止。 它总是会终止最新启动的 pod,这会保留旧的 pod 并再次触发内存 HPA,从而导致无限循环。 有没有办法指示 CPU HPA 每次都终止使用率较高的 pod 而不是新生的 pod?

【问题讨论】:

  • 我看到您的两个 HPA 都在进行相同的部署。为什么不使用单个 HPA 来衡量 CPU 和内存?
  • 内存和 CPU 自动缩放 HPA 有不同的 apiVersions @rock'nrolla
  • @rock'nrolla 感谢您的建议,我之前没有想到也将自动缩放 apiVersion v2beta2 用于 cpu。它解决了我的问题。

标签: kubernetes hpa horizontal-pod-autoscaling


【解决方案1】:

根据 cmets 中的建议,使用单个 HPA 解决了我的问题。我只需要将 CPU HPA 移动到与内存 HPA 相同的 apiVersion。

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2017-11-15
    • 2020-01-13
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多