Skip to content

目标:标准化镜像、健康检查、扩缩容与发布流程。

🎯 文章目标

  • 提供推理服务容器化与 K8s 编排的最小实践
  • 健康检查、资源与调度、扩缩容策略

📚 背景/前置

  • 镜像:基础镜像 + 模型/权重;分层缓存
  • 编排:Deployment/StatefulSet + Service + HPA

🔧 核心内容

1) 镜像建议

  • 固定依赖与模型版本;减小镜像体积
  • 入口脚本:拉起引擎、探活接口

2) K8s 健康检查

yaml
livenessProbe:
  httpGet: { path: /v1/models, port: 8000 }
readinessProbe:
  httpGet: { path: /healthz, port: 8000 }

3) 资源与调度

  • requests/limits:CPU/GPU 显存
  • nodeSelector/affinity:绑卡/绑机

4) 扩缩容与发布

  • HPA:按 QPS/延迟/显存使用率
  • 发布:蓝绿/金丝雀;回滚策略

💡 实战示例:容器入口脚本

bash
#!/usr/bin/env bash
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-7B-Instruct --port 8000 &
while ! curl -fsSL http://localhost:8000/healthz; do sleep 1; done
exec nginx -g 'daemon off;'

📊 对比/取舍(速查)

  • 有状态 vs 无状态:模型加载使其趋向有状态;发布需更谨慎

🧪 踩坑与经验

  • 健康检查缺失导致流量打到“未就绪实例”
  • 镜像肥大导致发布慢与回滚困难

📎 参考与延伸

  • K8s 探针、HPA、Affinity 文档
  • 镜像优化与层缓存

💭 总结

  • 以“标准镜像 + 探针 + 资源/调度 + HPA + 灰度”稳定生产编排