在最近的一个实验中,我尝试使用两种机制自动扩展我的 K8s 集群:KEDA 和 HPA(见下文)。我想使用 HPA OOB 资源指标根据 pod 资源利用率(内存和 CPU)扩展我的集群,并使用 KEDA 根据自定义指标自动扩展。
即使我的部署成功并且集群运行良好且正常运行。当自动缩放启动时,集群变得困惑! 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 }}
最佳答案
KEDA没有 direct cluster autoscaler support yet所以你会有一些不可预测性。从本质上讲,您有两条信息没有被 KEDA 和集群自动缩放器共享,其中一些可能在特定时间不一致。
在我看来,最好是减慢所有自动缩放的速度,以便所有自动缩放器都能 catch 任何差异。例如,您可以使用 cooldown 之类的东西。在自动缩放组中以避免某些资源匮乏。
✌️
关于kubernetes - 使用多种自动伸缩机制来自动伸缩 K8s 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63495899/