【问题标题】:Kubernetes autoscaling policies not workingKubernetes 自动缩放策略不起作用
【发布时间】:2020-07-21 04:22:09
【问题描述】:

我已向我的 Horizo​​ntalPodAutoscaler 添加了一些缩放策略,但它们没有被应用。 scaleUp 和 scaleDown 行为被忽略。我需要一种方法来阻止 Pod 每隔几分钟就扩大和缩小一次以响应小的 CPU 峰值。理想情况下,HPA 会快速扩展以响应更多流量,但在流量减少约 30 分钟后缓慢缩减。

我在 AWS EKS 集群上运行它,我已经根据 https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior 设置了策略。

这可能是 EKS 或我的 K8s 版本 1.14 的限制。我已经运行 kubectl api-versions 并且我的集群确实支持 autoscaling/v2beta2。

我的 Helm 规格是:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: {{ template "app.fullname" . }}
  labels:
    app: {{ template "app.name" . }}
    chart: {{ template "app.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta2
    kind: Deployment
    name: "{{ template "app.fullname" . }}-server"
  minReplicas: {{ .Values.hpa.minReplicas }}
  maxReplicas: {{ .Values.hpa.maxReplicas }}
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: AverageValue
        averageValue: 200m
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 300
      policies:
      - type: Pods
        value: 1
        periodSeconds: 300
    scaleDown:
      stabilizationWindowSeconds: 1200
      policies:
      - type: Pods
        value: 1
        periodSeconds: 300

【问题讨论】:

  • 您能否使用以下信息编辑您的问题: 1. 您想要实现的预期行为是什么? 2.现在是什么?
  • 你能确定你已经安装了度量服务器吗?如果您没有安装它,请告诉我,我会发布如何正确执行此操作的答案aws.amazon.com/premiumsupport/knowledge-center/…
  • 我确实安装了度量服务器
  • autoscaling/v2beta2 API 在不同的 Kubernetes 版本上是否有所不同?在文档中它说“从 v1.18 开始,v2beta2 API 允许通过 HPA 行为字段配置缩放行为。”
  • @MikhailJanowski 如前所述:从 v1.18 开始。您当前的 K8s 版本是 1.14。即使您启用了自动缩放/v2beta2,这也不起作用。最简单的方法是升级到 1.18。

标签: kubernetes kubernetes-helm autoscaling policies kubernetes-hpa


【解决方案1】:

正如在 cmets 中已经讨论的那样,即使启用了autoscaling/v2beta2,此功能也无法在 1.14 版本上运行。

从 v1.18 开始,v2beta2 API 允许缩放行为 通过 HPA 行为字段配置。

最简单的方法是升级到 1.18。

【讨论】:

    【解决方案2】:

    我想基于 targetAverageValue 实现 HPA,这对我有用

    虽然 GKE 版本在 1.12 to 1.14 附近,但您将无法应用 autoscaling/v2beta2 的清单,但是您可以应用类似的东西

    apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    metadata:
      name: core-deployment
      namespace: default
    spec:
      maxReplicas: 9
      minReplicas: 5
      scaleTargetRef:
        apiVersion: extensions/v1beta1
        kind: Deployment
        name: core-deployment
      metrics:
      - type: Resource
        resource:
          name: cpu
          targetAverageValue: 500m
    

    【讨论】:

      【解决方案3】:

      它对我有用,

      客户端版本:v1.20.2 服务器版本:v1.18.9-eks-d1db3c

      kubectl api-versions 和我的集群也支持 autoscaling/v2beta2

      apiVersion: autoscaling/v2beta2
      kind: HorizontalPodAutoscaler
      metadata:
        name: {{ template "ks.fullname" . }}-keycloak
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: {{ template "ks.fullname" . }}-keycloak
        minReplicas: {{ .Values.keycloak.hpa.minpods }}
        maxReplicas: {{ .Values.keycloak.hpa.maxpods }}
        metrics:
        - type: Resource
          resource:
            name: memory
            target:
              type: Utilization
              averageUtilization: {{ .Values.keycloak.hpa.memory.averageUtilization }}
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: {{ .Values.keycloak.hpa.cpu.averageUtilization }}
        behavior:
          scaleDown:
            stabilizationWindowSeconds: {{ .Values.keycloak.hpa.stabilizationWindowSeconds }}
            policies:
              - type: Pods
                value: 1
                periodSeconds: {{ .Values.keycloak.hpa.periodSeconds }}
      {{- end }}
      

      【讨论】:

        猜你喜欢
        • 2020-03-03
        • 1970-01-01
        • 1970-01-01
        • 2019-08-26
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        相关资源
        最近更新 更多