使用多种自动缩放机制自动缩放 K8s 集群

Using multiple autoscaling mechanisms to autoscale a K8s cluster

在最近的实验中,我尝试使用两种机制自动缩放我的 K8s 集群:KEDA 和 HPA(见下文)。我想使用 HPA OOB 资源指标根据 pod 资源利用率(内存和 CPU)扩展我的集群,并使用 KEDA 根据自定义指标自动扩展。

尽管我的部署成功并且集群运行正常。当自动缩放开始时,集群变得混乱了! Pods 不断地进行配置,然后取消配置,即使在我停止了对集群的流量之后,这种状态仍在继续。我不得不等待冷却期才能再次恢复正常。

我没有找到关于这个主题的任何官方文档,因此,在这里提问。

我的问题:

这是在 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 doesn't have direct cluster autoscaler support yet 所以你会有一些不可预测性。本质上,您有两条信息未共享,即 KEDA 和集群自动缩放器的信息,其中一些信息在特定时间可能不一致。

我认为最好放慢所有内容的整体自动缩放速度,以便所有自动缩放程序都能赶上任何差异。例如,您可以在自动缩放组中使用 cooldown 之类的东西来避免资源匮乏。

✌️