
随着生成式AI(GenAI)在各行业的广泛应用,Kubernetes已成为部署AI工作负载的首选平台。本文将为您介绍在Kubernetes上成功部署AI应用的10个关键要点,帮助您应对高并发、资源密集和行为不透明等挑战。
传统做法 vs 事件驱动 |
|---|
① 常驻 Pod → 24h 占用 GPU |
② 请求到达 → Knative 0→1 冷启 <3s |
③ 空闲 30s → 自动缩容到 0,电费 ↓ 90% |
# 安装 Knative + KEDA
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-crds.yaml
helm install keda kedacore/keda --namespace keda --create-namespace
# 部署 LLM 服务(Qwen-7B 示例)
kubectl apply -f https://raw.githubusercontent.com/yourrepo/knative-llm/main/qwen7b-kservice.yaml
# 发送事件触发扩容
hey -z 30s -c50 http://qwen7b.default.127.0.0.1.sslip.com观察:kubectl get pods -w 将看到 Pod 数量随 RPS 实时变化。
自动器 | 触发维度 | 典型阈值 |
|---|---|---|
KEDA | 队列长度 / Token 数 | kafka lag > 1000 |
Knative QP | 并发请求 | 30→60 |
VPA | CPU/内存历史 | +20% 推荐 |
KServe | 推理 QPS | >500 req/s |
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: llm-keda
spec:
scaleTargetRef:
name: llm-deployment
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus:9090
metricName: llm_queue_length
threshold: '1000'helm install loki grafana/loki-stack --create-namespace--namespace loki
kubectl apply -f https://raw.githubusercontent.com/yourrepo/llm-observability/main/otel-collector.yaml场景 | 工具 | 效果 |
|---|---|---|
节点弹性 | Karpenter | 30s 弹出 A100 节点 |
队列优先级 | Kueue | 训练作业优先,推理作业兜底 |
GPU 碎片整理 | NVIDIA GPU Operator | 显存 40GB→利用率 95% |
Git 目录结构示例:
prompts/
├── qwen7b/
│ ├── v1.0.yaml
│ ├── v1.1.yaml
└── kustomization.yamlArgo CD 自动同步 → KServe 生成新版本路由 → 影子流量 5% A/B 测试。
Istio VirtualService 片段:
http:
- match:
- headers:
shadow:
exact: "true"
route:
- destination:
host: llm-v2
weight: 100
- route:
- destination:
host: llm-v1
weight: 95
- destination:
host: llm-v2
weight: 0
mirror: true # 镜像流量,不影响用户MLOps 管道一览:
Raw Prompts → Kubeflow Pipeline → 离线评估(BLEU、BERTScore)
↓
人工标注平台 → 回流数据 → 再训练
↓
MLflow / W&B 指标看板Jenkinsfile 片段:
stage('Eval') {
sh'kubectl create -f eval-job.yaml --wait'
sh'python scripts/push_metric.py'
}Evidently AI 配置:
fromevidentlyimportColumnMapping
fromevidently.reportimportReport
fromevidently.metric_presetimportTextEvalPreset
column_mapping = ColumnMapping(text_features=["prompt", "answer"])
report = Report(metrics=[
TextEvalPreset(),
])
report.run(reference_data=ref, current_data=cur)
report.save_html("drift_report.html")Grafana 侧通过 Webhook 接收「漂移分数 > 0.3」立即告警。
策略 | 实现方式 | 收益 |
|---|---|---|
GPU 共享(时间片) | NVIDIA MIG + K8s device-plugin | 1 张 A100 → 7 实例 |
抢占式队列 | Kueue + PriorityClass | 低优任务被抢占,高优 10s 内启动 |
节点亲和 | nodeSelector: gpu-type=a100 | 避免跨 NUMA 性能抖动 |
全景图:
关键 Git 钩子:
pre-commit:
- id: yaml-lint # 检查 Prompt 模板
- id: kubescape-scan # 安全策略扫描
- id: conftest # OPA 策略验证# ① 创建本地 Kind 集群(带 GPU 支持)
kind create cluster --config kind-gpu.yaml
# ② 安装核心组件
helmfile apply -f helmfile.yaml # 包含 Knative/KEDA/Prometheus/Loki/Jaeger
# ③ 发布第一个 LLM 服务
kubectl apply -f qwen7b-kservice.yaml
kubectl ksvc listHelmfile 片段已上传至 https://github.com/yourrepo/ai-stack-helmfile,复制即可用。
云原生 + AI = Everything as Code 从事件驱动到影子部署,从 GPU 调度到 Prompt 版本化,Kubernetes 让生成式 AI 真正拥有生产级的弹性、可观测与自动化。 在Kubernetes上运行AI工作负载不仅可行,而且非常强大。通过采用合适的工具和实践,可以将提示词、模型和GenAI服务当作任何生产级软件组件来管理。拥抱云原生生态,让AI工作流与基础设施共同进化,将帮助您在AI应用部署中取得成功。
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!