需构建轻量化推理镜像、定义gpu感知deployment与service、配置基于qps/gpu利用率的hpa、启用ingress+tls安全暴露、实施模型热更新与灰度发布。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您希望将DeepSeek大语言模型集成到Kubernetes集群中,并实现按需扩缩容的AI推理服务部署,则需要解决模型加载、资源隔离、服务暴露与自动伸缩等关键问题。以下是实现该目标的具体步骤:
一、构建轻量化DeepSeek推理镜像
为适配K8s调度与快速启动,需将DeepSeek模型与推理框架封装为体积可控、启动迅速的容器镜像。推荐使用vLLM或llama.cpp作为后端运行时,以降低GPU显存占用并提升吞吐。
1、基于Ubuntu 22.04基础镜像,安装CUDA 12.1与PyTorch 2.3+cu121。
2、克隆DeepSeek官方Hugging Face仓库,使用transformers加载模型权重,或直接下载GGUF格式量化模型文件。
3、集成vLLM服务入口,配置--model参数指向本地模型路径,启用--tensor-parallel-size=1(单卡)或按GPU数量设置。
4、添加健康检查端点(如/health)与就绪探针支持,确保K8s能准确判断容器状态。
5、执行docker build -t deepseek-vllm:1.0 .,生成镜像并推送至私有Harbor或ECR registry。
二、定义GPU感知型Deployment与Service
Kubernetes默认不识别GPU资源,需通过Device Plugin注册NVIDIA GPU,并在Pod模板中显式声明gpu资源请求,确保调度器将Pod绑定至含GPU节点。
1、确认nvidia-device-plugin-daemonset已在集群中运行,且kubectl get nodes -o wide显示GPU容量(如nvidia.com/gpu: 1)。
2、编写deployment.yaml,spec.containers[].resources.limits中设置nvidia.com/gpu: 1,并添加securityContext.privileged: false与capabilities.drop: ["ALL"]提升安全性。
3、为容器挂载空目录volume用于缓存KV cache,避免重复加载模型权重造成延迟波动。
4、定义ClusterIP类型的Service,端口映射至容器8000端口(vLLM默认HTTP API端口),启用sessionAffinity: ClientIP保障长连接稳定性。
5、添加annotation:nvidia.com/gpu.product: "A10"(若集群混用GPU型号,需精确匹配)。
三、配置HPA基于QPS或GPU利用率触发扩缩容
传统CPU/Memory指标无法反映AI推理负载真实压力,需采集自定义指标(如每秒请求数QPS或GPU SM Utilization),驱动HorizontalPodAutoscaler动态调整副本数。
1、部署Prometheus + node-exporter + dcgm-exporter,后者提供DCGM_DCGM_FI_DEV_GPU_UTIL等GPU监控指标。
2、在Prometheus中配置rule:记录vLLM metrics_api_requests_total速率(rate(vllm_request_count_total[1m]))。
3、创建PrometheusAdapter,将上述指标暴露为custom.metrics.k8s.io/v1beta1 API供HPA调用。
4、编写hpa.yaml,targetAverageValue设为15 QPS,minReplicas: 1,maxReplicas: 8,scaleTargetRef指向前述Deployment。
5、验证kubectl get hpa输出TARGETS列是否显示实际QPS值,确认HPA已关联自定义指标。
四、启用Ingress与TLS终止实现外部安全访问
为使外部客户端(如Web前端或REST客户端)稳定调用推理API,需通过Ingress统一入口暴露服务,并强制HTTPS加密传输,防止模型请求被中间人窃取或篡改。
1、部署nginx-ingress-controller或ingress-nginx,确保其Pod运行于具备公网IP的节点或云LB后端。
2、申请Let’s Encrypt证书,使用cert-manager签发wildcard域名证书(如*.ai.example.com)。
3、编写ingress.yaml,host字段填写推理服务域名(e.g., infer.deepseek.example.com),path: /v1/completions匹配vLLM OpenAI兼容接口路径。
4、在ingress.spec.tls中引用上一步生成的Secret名称,启用TLS termination,backend.service.port.number设为80。
5、添加nginx.ingress.kubernetes.io/proxy-body-size: "50m"注解,允许上传较大prompt文本或base64编码图像输入。
五、实施模型热更新与灰度发布策略
避免全量重启导致服务中断,需支持新模型版本在不中断流量前提下逐步替换旧实例,同时保留回滚能力。
1、为每个模型版本打独立镜像Tag(如deepseek-vllm:1.0-r1、deepseek-vllm:1.0-r2),并在Deployment中通过image字段指定。
2、使用Kubernetes原生RollingUpdate策略,设置maxSurge: 25%与maxUnavailable: 0,确保升级期间始终有可用副本。
3、在Service前部署Istio VirtualService,按header(x-model-version: v1.0-r2)或权重(70%/30%)分流请求至不同Deployment。
4、编写preStop lifecycle hook,在容器终止前执行curl -X POST http://localhost:8000/v1/model/unload,主动卸载模型释放显存。
5、利用kubectl rollout history与kubectl rollout undo --to-revision=1实现秒级回滚至任一历史版本。











