使用 KEDA 进行自动扩缩容#
本教程将向您展示如何使用 KEDA 和基于 Prometheus 的指标自动扩缩容 vLLM 部署。您将配置 KEDA 来监控队列长度并根据负载动态调整副本数量。
目录#
先决条件#
在 Kubernetes 上运行的 vLLM 部署(请参阅 快速入门)
可以访问至少具有 2 个 GPU 的 Kubernetes 集群
kubectl和helm已安装对 Kubernetes 和 Prometheus 指标有基本了解
步骤#
1. 安装 vLLM 生产堆栈#
按照 Helm Chart 部署 中的说明,使用单个 Pod 安装生产堆栈。
2. 部署可观察性堆栈#
此堆栈包括 Prometheus、Grafana 和必要的导出器。
cd observability
bash install.sh
3. 安装 KEDA#
kubectl create namespace keda
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda
4. 验证指标导出#
检查 Prometheus 是否正在抓取队列长度指标 vllm:num_requests_waiting。
kubectl port-forward svc/prometheus-operated -n monitoring 9090:9090
在单独的终端中
curl -G 'https://:9090/api/v1/query' --data-urlencode 'query=vllm:num_requests_waiting'
示例输出
{
"status": "success",
"data": {
"result": [
{
"metric": {
"__name__": "vllm:num_requests_waiting",
"pod": "vllm-llama3-deployment-vllm-xxxxx"
},
"value": [ 1749077215.034, "0" ]
}
]
}
}
这意味着在给定的时间戳,队列中有 0 个待处理请求。
5. 配置 ScaledObject#
以下 ScaledObject 配置在 tutorials/assets/values-19-keda.yaml 中提供。请查看其内容
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: vllm-scaledobject
namespace: default
spec:
scaleTargetRef:
name: vllm-llama3-deployment-vllm
minReplicaCount: 1
maxReplicaCount: 2
pollingInterval: 15
cooldownPeriod: 30
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus-operated.monitoring.svc:9090
metricName: vllm:num_requests_waiting
query: vllm:num_requests_waiting
threshold: '5'
应用 ScaledObject
cd ../tutorials
kubectl apply -f assets/values-19-keda.yaml
这告诉 KEDA:
监控
vllm:num_requests_waiting在 1 到 2 个副本之间进行扩缩容
当队列超过 5 个请求时向上扩容
6. 测试自动扩缩容#
观看部署
kubectl get hpa -n default -w
您最初应该看到
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS
keda-hpa-vllm-scaledobject Deployment/vllm-llama3-deployment-vllm 0/5 (avg) 1 2 1
TARGETS 显示当前指标值与目标阈值。 0/5 (avg) 表示 vllm:num_requests_waiting 的当前值为 0,阈值为 5。
生成负载
kubectl port-forward svc/vllm-router-service 30080:80
在单独的终端中
python3 assets/example-10-load-generator.py --num-requests 100 --prompt-len 3000
几分钟后,REPLICAS 值应增加到 2。
7. 清理#
要删除 KEDA 配置和可观察性组件
kubectl delete -f assets/values-19-keda.yaml
helm uninstall keda -n keda
kubectl delete namespace keda
cd ../observability
bash uninstall.sh