1

我正在为 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 会导致为触发内存 HPA 限制而启动的任何新 pod 立即被 CPU HPA 终止。它总是终止最新启动的 pod,这会保留旧的 pod 并再次触发内存 HPA,从而导致无限循环。有没有办法指示 CPU HPA 每次都终止使用率较高的 pod 而不是新生的 pod?

4

1 回答 1

1

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

于 2021-03-26T09:42:17.920 回答