在最近的实验中,我尝试使用两种机制来自动缩放K8s集群:KEDA和HPA(请参见下文)。我想使用HPA OOB资源指标来基于Pod资源利用率(内存和CPU)来扩展群集,而KEDA则要基于自定义指标来自动扩展。
即使我的部署成功并且集群运行正常且正常运行。当自动扩展开始时,集群就乱成一团!不断调配Pod,然后取消调配Pod,即使在我停止针对集群的流量之后,这种状态仍持续。我不得不等待冷静期之后,它才能再次变得理智。
我没有找到有关此主题的任何官方文档,因此,请在这里询问。
我的问题:
这是在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 }}
答案 0 :(得分:3)
KEDA没有direct cluster autoscaler support yet,因此您会有一些不可预测的情况。从本质上讲,您拥有两条信息,它们与KEDA的信息和集群自动缩放器的信息是不共享的,其中某些信息可能在特定时间不一致。
我认为最好是减慢所有组件的自动缩放速度,以使所有自动缩放器都能赶上任何差异。例如,您可以在自动缩放组中使用诸如cooldown之类的东西,以避免资源短缺。
✌️</ p>