kubernetes - 如何让k8s cpu和内存HPA协同工作?

标签 kubernetes hpa horizontal-pod-autoscaling

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

最佳答案

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

关于kubernetes - 如何让k8s cpu和内存HPA协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66813681/

相关文章:

kubernetes - Google调试:如何调试可执行jar中的库-错误:在可执行文件中找不到文件

MySQL - Galera 还是 Kubernetes 复制 Controller ?

kubernetes - 如何根据 EKS 中的平均内存使用量自动缩放 Kubernetes Pod?

kubernetes - 使用多种自动伸缩机制来自动伸缩 K8s 集群

amazon-ec2 - Kubernetes中断, pod 刚刚消失,拒绝启动

kubernetes - 如何修复 kubernetes nfs 挂载错误没有这样的文件或目录

kubernetes - K8S 入口 : How to limit requests in flight per pod

Kubernetes:如何在 Google Kubernetes Engine (gke) 中为 kube-controller-manager 添加标志

kubernetes - 在Kubernetes中,如何在闲置时将Deployment缩放为零