在最近的一次实验中,我尝试使用两种机制自动缩放K8s集群:KEDA和HPA(见下文(。我想使用HPAOOB资源度量来基于pod资源利用率(内存和CPU(扩展集群,并使用KEDA来基于自定义度量自动扩展集群。
尽管我的部署成功了,而且集群运行良好。当自动缩放开始时,集群失控了!播客不断地被配置,然后又被取消配置,即使在我停止了针对集群的流量之后,这种状态仍在继续。我不得不等待冷静期,然后它又恢复了理智。
我没有找到任何关于这个主题的官方文件,所以在这里询问。
我的问题:
- 是否可以将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还没有直接的集群自动缩放支持,所以您会有一些不可预测性。本质上,您有两条信息没有共享——KEDA的信息和集群自动缩放器的信息,其中一些信息可能在特定时间不一致。
在我看来,最好放慢所有东西的自动缩放速度,这样所有的自动缩放器都能赶上任何差异。例如,你可以利用自动缩放组中的冷却时间来避免资源匮乏。
✌️