KEDA — 事件驱动弹性伸缩
什么是 KEDA
KEDA(Kubernetes Event-Driven Autoscaling)扩展了 HPA,支持基于外部事件源(消息队列、数据库、HTTP 请求等)进行伸缩,最重要的是支持缩容到 0。
安装
bash
helm repo add kedacore https://kedacore.github.io/charts
helm install keda kedacore/keda --namespace keda --create-namespaceScaledObject 示例
Kafka 消息队列
yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: kafka-consumer-scaler
spec:
scaleTargetRef:
name: kafka-consumer
minReplicaCount: 0 # 无消息时缩容到 0
maxReplicaCount: 50
pollingInterval: 15
cooldownPeriod: 300
triggers:
- type: kafka
metadata:
bootstrapServers: kafka-broker:9092
consumerGroup: my-consumer-group
topic: orders
lagThreshold: "100" # 每个副本处理 100 条消息积压
offsetResetPolicy: latestRedis 列表
yaml
triggers:
- type: redis
metadata:
address: redis:6379
listName: task-queue
listLength: "10"
authenticationRef:
name: redis-authPrometheus 指标
yaml
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
metricName: http_requests_pending
query: sum(http_requests_pending{service="my-app"})
threshold: "100"
activationThreshold: "10" # 从 0 扩容的阈值HTTP 请求(需要 KEDA HTTP Add-on)
yaml
apiVersion: http.keda.sh/v1alpha1
kind: HTTPScaledObject
metadata:
name: my-app-http-scaler
spec:
hosts:
- my-app.example.com
targetPendingRequests: 100
scaleTargetRef:
deployment: my-app
service: my-app
port: 80
replicas:
min: 0
max: 30TriggerAuthentication(认证配置)
yaml
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: kafka-auth
spec:
secretTargetRef:
- parameter: sasl
name: kafka-secret
key: sasl-mechanism
- parameter: username
name: kafka-secret
key: username
- parameter: password
name: kafka-secret
key: password
- parameter: tls
name: kafka-secret
key: tls常用操作
bash
# 查看 ScaledObject 状态
kubectl get scaledobject
kubectl describe scaledobject kafka-consumer-scaler
# 查看 HPA(KEDA 底层创建)
kubectl get hpa
# 查看伸缩事件
kubectl get events --field-selector reason=KEDAScaleTargetActivated