如何让k8scpu和内存HPA协同工作?

How to make k8s cpu and memory HPA work together?

我正在为 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}}

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

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