1

在最近的一个实验中,我尝试使用两种机制自动扩展我的 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 }}

4

1 回答 1

3

KEDA还没有直接的集群自动缩放器支持,所以你会有一些不可预测性。从本质上讲,您有两条信息没有被 KEDA 和集群自动缩放器共享,其中一些可能在特定时间不一致。

在我看来,最好是减慢所有自动缩放的速度,以便所有自动缩放器都能赶上任何差异。例如,您可以在自动缩放组中使用诸如冷却时间之类的东西来避免某些资源匮乏。

✌️

于 2020-08-19T23:26:01.263 回答