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

时间:2020-08-19 22:40:03

标签: kubernetes hpa keda

在最近的实验中,我尝试使用两种机制来自动缩放K8s集群:KEDA和HPA(请参见下文)。我想使用HPA OOB资源指标来基于Pod资源利用率(内存和CPU)来扩展群集,而KEDA则要基于自定义指标来自动扩展。

即使我的部署成功并且集群运行正常且正常运行。当自动扩展开始时,集群就乱成一团!不断调配Pod,然后取消调配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 }}

1 个答案:

答案 0 :(得分:3)

KEDA没有direct cluster autoscaler support yet,因此您会有一些不可预测的情况。从本质上讲,您拥有两条信息,它们与KEDA的信息和集群自动缩放器的信息是不共享的,其中某些信息可能在特定时间不一致。

我认为最好是减慢所有组件的自动缩放速度,以使所有自动缩放器都能赶上任何差异。例如,您可以在自动缩放组中使用诸如cooldown之类的东西,以避免资源短缺。

✌️<​​/ p>