K8s部署LLM保姆级教程:从零搭建推理环境

为什么要用K8s部署LLM?

大语言模型(LLM)推理服务对GPU资源需求高,传统单机部署扩容困难。
通过K8s部署LLM,你可以利用容器编排轻松管理GPU节点,实现弹性伸缩、故障自愈和资源隔离。
本文面向零基础用户,用最简洁的步骤在K8s集群中跑通一个LLM推理服务,无需理解底层复杂原理,跟着做就能用。

迈出第一步:你需要准备什么

在开始K8s部署LLM之前,请确保满足以下条件:

  • K8s集群:已有可用的K8s集群(版本1.21+),可以用Minikube测试,但生产环境建议使用云厂商托管集群(如ACK、EKS、GKE)或自建集群。
  • GPU节点:至少一台装有NVIDIA GPU的节点(如V100、A100、A10等),并安装了NVIDIA驱动(建议>=470)以及nvidia-docker运行时。
  • Kubectl:已安装并配置好kubectl连接你的集群。
  • Helm(可选但推荐):用于快速安装LLM推理框架。

如果你没有K8s集群,可以参考官方文档先搭建一个单节点集群(例如使用kubeadmminikube)。
下面我们将聚焦在已有集群的基础上,聚焦核心部署步骤。

动手部署:用Helm快速拉起LLM服务

推荐使用Helm Chart来部署当前主流的LLM推理框架,比如vLLM或Ollama。
这里以vLLM为例,因为它适配HuggingFace模型,支持PagedAttention优化显存。

1. 添加Helm仓库并部署vLLM

helm repo add vllm https://vllm.github.io/helm-charts
helm repo update
helm install my-llm vllm/vllm \
  --set modelName=Qwen/Qwen2.5-7B-Instruct \
  --set resources.requests.gpu=1 \
  --set resources.limits.gpu=1
  • modelName:指定要加载的模型(从HuggingFace拉取),此处以Qwen2.5-7B为例,可根据自己GPU显存调整(7B模型需要约16GB显存)。
  • GPU资源请求与限制均设为1,确保Pod绑定一张GPU卡。

2. 暴露服务以便外部访问

默认Helm Chart会创建一个ClusterIP服务,你可以通过kubectl port-forward本地测试,或用Ingress/NodePort暴露。
下面是NodePort方式:

kubectl expose deployment my-llm-vllm --type=NodePort --port=8000 --name=llm-service
kubectl get svc | grep llm-service  # 查看NodePort映射的端口(如3xxxx)

3. 测试推理API

vLLM启动后提供兼容OpenAI的API,用curl简单测试:

curl http://:/v1/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "Qwen/Qwen2.5-7B-Instruct", "prompt": "Hello, who are you?", "max_tokens": 50}'

如果返回包含choices的JSON,说明K8s部署LLM成功!

踩坑经验:GPU资源调度常见问题

模型加载OOM(显存不足)

  • 表现:Pod启动后一直CrashLoopBackOff,查看日志提示CUDA out of memory
  • 解决:显式指定更小的模型或设置--gpu-memory-utilization(vLLM参数),例如在Helm安装时添加--set extraArgs='--gpu-memory-utilization=0.8'。同时确认Pod绑定的GPU卡实际显存足够(7B模型建议>=16GB)。

GPU节点标签未设置

  • 问题:Pod调度到无GPU的节点,报nvidia.com/gpu资源不可用。
  • 检查:运行kubectl describe nodes | grep nvidia查看GPU节点是否有nvidia.com/gpu标签。如果没有,手动打标签:
kubectl label nodes  nvidia.com/gpu=present

镜像拉取超时或失败

  • 如果部署在中国区,建议添加镜像加速器或拉取国内镜像。vLLM官方镜像较大(约8GB),耐心等待或提前在节点上docker pull

跑一轮验证:确认推理服务正常

除了上面的curl测试,还要检查Pod资源使用情况和日志:

kubectl logs -f deployment/my-llm-vllm  # 观察模型加载进度
kubectl top pod -l app=my-llm-vllm      # 查看GPU显存占用(需要metrics-server)

如果看到类似Starting vLLM server on 0.0.0.0:8000的日志,且每秒响应用户请求,说明K8s部署LLM已稳定运行。

如果你正在处理K8s部署LLM,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分,多数GPU相关报错都能在标签或资源限制里找到原因。
Enjoy your LLM on K8s!

分享到:
上一篇
K3s轻量集群搭建实战:零基础也能上手
下一篇
K8s AI集群运维实战指南:从零搭建GPU推理服务
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意