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

标签 kubernetes hpa

在最近的一个实验中,我尝试使用两种机制自动扩展我的 K8s 集群:KEDA 和 HPA(见下文)。我想使用 HPA OOB 资源指标根据 pod 资源利用率(内存和 CPU)扩展我的集群,并使用 KEDA 根据自定义指标自动扩展。
即使我的部署成功并且集群运行良好且正常运行。当自动缩放启动时,集群变得困惑! Pod 不断地被配置然后取消配置,即使在我停止了针对集群的流量之后,这种状态仍然存在。我必须等待冷静期才能再次恢复理智。
我没有找到有关此主题的任何官方文档,因此在这里询问。
我的问题:

  • 可以将 k8s 集群配置为使用多种机制自动扩展吗?
  • 如果是这样,我做错了什么?

  • 这是在 K8s 版本 1.15.11 和 KEDA 1.4.1 上
    apiVersion: keda.k8s.io/v1alpha1
    kind: ScaledObject
    metadata:
      name: {{ $fullName }}
      labels:
        deploymentName: {{ $fullName }}
        {{- include "deployment.labels" . | nindent 4 }}
    spec:
      scaleTargetRef:
        deploymentName: {{ $fullName }}
      pollingInterval: {{ .Values.scaleobject.pollingInterval }}
      cooldownPeriod:  {{ .Values.scaleobject.cooldownPeriod }}
      minReplicaCount: {{ .Values.scaleobject.minReplicaCount }}
      maxReplicaCount: {{ .Values.scaleobject.maxReplicaCount }}   
      triggers:
      - type: prometheus
        metadata:
          serverAddress: {{ tpl .Values.scaleobject.serverAddress . | quote }}  
          metricName: access_frequency
          threshold: "{{ .Values.scaleobject.threshold }}"
          query: {{ tpl .Values.scaleobject.query . | quote  }}
    ---
    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: resource-utilization-scaling
      namespace: default
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: {{ $fullName }}
      minReplicas: {{ .Values.scaleobject.minReplicaCount }}
      maxReplicas: {{ .Values.scaleobject.maxReplicaCount }}
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: {{ .Values.scaleobject.cpuUtilization }}
      - type: Resource
        resource:
          name: memory
          target:
            type: Utilization
            averageUtilization: {{ .Values.scaleobject.memUtilization }}
    
    

    最佳答案

    KEDA没有 direct cluster autoscaler support yet所以你会有一些不可预测性。从本质上讲,您有两条信息没有被 KEDA 和集群自动缩放器共享,其中一些可能在特定时间不一致。
    在我看来,最好是减慢所有自动缩放的速度,以便所有自动缩放器都能 catch 任何差异。例如,您可以使用 cooldown 之类的东西。在自动缩放组中以避免某些资源匮乏。
    ✌️

    关于kubernetes - 使用多种自动伸缩机制来自动伸缩 K8s 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63495899/

    相关文章:

    kubernetes - Kubernetes HPA 如何评估内存指标

    Kubernetes 服务未在 Pod 之间均匀分配流量

    docker - 如何根据 Kubernetes 插件上的构建队列扩展 Jenkins 从站

    kubernetes - Google Cloud Loadbalancer 是否支持 grpc 的 http2?

    neo4j - Kubernetes集群中的内部和外部集群通信

    kubernetes - 在K8s中安装订单

    kubernetes - 可以在生产中使用 Kubernetes autoscaling v2beta2 作为 apiVersion 吗?