Clawdbot直连Qwen3-32B部署教程:Kubernetes Helm Chart一键部署方案
1. 为什么需要这个部署方案
你是不是也遇到过这样的问题:想用Qwen3-32B这么强大的模型,但每次都要手动拉镜像、配环境、调端口、改配置?试了三次,两次卡在Ollama启动失败,一次因为端口冲突直接放弃。更别说还要对接Clawdbot做Web聊天平台——光是理清“模型→API网关→代理层→前端界面”这条链路,就足够让人头大。
这个教程就是为了解决这些真实痛点而写的。它不讲虚的架构图,不堆术语,只给你一条能跑通的路:用Helm Chart把Qwen3-32B、Ollama服务、Clawdbot后端、Web网关全部打包进Kubernetes,一行命令完成部署,8080端口自动映射到18789网关,打开浏览器就能开始对话。
整个过程不需要你懂K8s底层原理,也不用反复修改YAML文件。你只需要有kubectl权限、一个可用的集群(哪怕本地Kind或Minikube也行),以及15分钟安静时间。后面你会看到,连截图里的那个简洁聊天界面,都是部署完自动出来的——不是Demo,是真能用的生产级起点。
2. 部署前的三件小事
别急着敲helm install。先确认这三件事已经搞定,能省下你至少一小时排查时间。
2.1 环境检查清单
- Kubernetes集群:v1.24及以上(推荐v1.26+),节点内存建议≥32GB(Qwen3-32B推理吃内存)
- kubectl已配置:能正常执行
kubectl get nodes和kubectl get ns - Helm v3.10+已安装:运行
helm version确认输出中包含version.BuildInfo{Version:"v3.x"}
注意:这个方案不依赖Docker Desktop内置K8s,也不走Docker Compose。如果你还在用docker run启动Ollama,现在就可以停手了——容器编排和单机容器是两套逻辑,混着来只会让端口转发越来越迷。
2.2 存储准备(关键!)
Qwen3-32B模型文件约22GB,Ollama默认把模型存在宿主机~/.ollama/models里。但在K8s里,我们得换种方式:
- 创建一个名为
ollama-models的PersistentVolumeClaim(PVC) - 使用hostPath或NFS均可,但路径必须可写且空间充足
- 在Helm values.yaml里指定该PVC名称,Clawdbot Chart会自动挂载到Ollama容器的
/root/.ollama/models
没配存储?部署会卡在Ollama容器Pending状态,日志里只有一句“no persistent volume available”。这不是bug,是K8s在礼貌提醒你:模型没地方放。
2.3 网络端口说明(看懂这张表,少踩80%的坑)
| 组件 | 容器内端口 | Service暴露端口 | 外部访问端口 | 作用 |
|---|---|---|---|---|
| Ollama API | 11434 | 11434 | 不对外暴露 | Clawdbot后端调用模型的内部通道 |
| Clawdbot后端 | 8000 | 8000 | 不对外暴露 | 处理聊天逻辑、调Ollama、返回JSON |
| Web网关(Nginx) | 80 | 18789 | 18789 | 浏览器直连入口,反向代理到Clawdbot |
| 调试端口 | — | 8080 | 8080 | 仅限集群内调试,不映射到宿主机 |
重点划出来:18789是你打开浏览器要输的端口,8080只是内部调试用,别去映射它。很多同学部署完打不开页面,就是因为把8080当成了访问端口。
3. 一行命令完成部署
现在进入最轻松的部分。所有操作都在终端里完成,复制粘贴即可。
3.1 添加Chart仓库并拉取
# 添加官方Clawdbot Helm仓库(托管在GitHub Pages) helm repo add clawdbot https://clawdbot.github.io/helm-charts helm repo update # 查看可用版本(当前最新是v0.4.2,含Qwen3-32B适配) helm search repo clawdbot/clawdbot --versions3.2 创建自定义values.yaml
新建一个clawdbot-qwen3.yaml文件,内容如下(只需改三处):
# 模型配置:告诉Ollama拉哪个模型 ollama: model: "qwen3:32b" # 如果网络慢,可提前下载好模型tar包,放PVC里再设loadFromPVC: true # 存储配置:指向你前面创建的PVC persistence: enabled: true existingClaim: "ollama-models" # ← 改成你PVC的真实名字 # 网关配置:把18789端口暴露给外部 gateway: service: port: 18789 targetPort: 80小技巧:如果集群在云上(如阿里云ACK),把
gateway.service.type改成LoadBalancer,会自动分配公网IP,不用记IP地址。
3.3 执行部署
# 创建命名空间(隔离环境,推荐) kubectl create namespace clawdbot-qwen3 # 一键安装(指定namespace和自定义values) helm install clawdbot-qwen3 clawdbot/clawdbot \ --namespace clawdbot-qwen3 \ --values clawdbot-qwen3.yaml \ --version 0.4.2 # 等待Pod就绪(Ollama拉模型需要时间,耐心点) kubectl get pods -n clawdbot-qwen3 -w你会看到类似这样的输出:
NAME READY STATUS RESTARTS AGE clawdbot-qwen3-ollama-0 1/1 Running 0 2m15s clawdbot-qwen3-backend-7c8d9f4b5-2xq9k 1/1 Running 0 2m15s clawdbot-qwen3-gateway-5b6d8c9f-4zr8t 1/1 Running 0 2m15sREADY列显示1/1,STATUS是Running,就代表部署成功了。
4. 验证是否真的跑通了
别信“Running”,要看实际效果。我们分三步验证,每步都对应一个真实场景。
4.1 第一步:确认Ollama模型已加载
进入Ollama Pod,直接调它的API:
# 获取Ollama Pod名(取第一个) POD_NAME=$(kubectl get pods -n clawdbot-qwen3 -l app.kubernetes.io/component=ollama -o jsonpath='{.items[0].metadata.name}') # 进入容器,调用list接口 kubectl exec -n clawdbot-qwen3 $POD_NAME -- curl -s http://localhost:11434/api/tags | jq '.models[] | select(.name=="qwen3:32b")'如果返回完整的模型信息(含digest、size等字段),说明Qwen3-32B已成功加载。如果返回空,说明模型没拉下来,检查PVC路径或网络策略。
4.2 第二步:测试Clawdbot后端连通性
Clawdbot后端不对外暴露,但我们可以通过端口转发临时连:
# 将本地8000端口转发到Clawdbot后端Service kubectl port-forward -n clawdbot-qwen3 service/clawdbot-qwen3-backend 8000:8000 & # 发送一个测试请求(模拟前端发来的消息) curl -X POST http://localhost:8000/chat \ -H "Content-Type: application/json" \ -d '{"message":"你好,Qwen3"}' | jq '.response'你应该看到类似这样的响应:
"你好!我是通义千问Qwen3-32B,很高兴为你服务。我可以回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等。"如果返回{"error":"model not found"},说明Ollama没连上;如果超时,检查backend和ollama之间的Service网络。
4.3 第三步:打开浏览器,直击最终效果
这才是你最期待的画面。根据你的集群类型,选择访问方式:
- 本地Kind/Minikube:
http://localhost:18789 - 云集群(NodePort):
http://<NODE_IP>:18789 - 云集群(LoadBalancer):
http://<EXTERNAL-IP>:18789
打开后,你会看到和输入描述里一模一样的界面:左侧是对话历史,右侧是输入框,顶部有“Qwen3-32B”标识。随便输入“今天天气怎么样”,它会基于当前时间生成合理回复——不是mock,是真模型在后台推理。
提示:第一次提问会稍慢(约8-12秒),因为Ollama要加载模型权重到GPU显存。后续对话基本在2秒内响应。
5. 日常运维与常见问题
部署只是开始,用起来才见真章。这里整理了你90%可能遇到的问题和解法。
5.1 模型响应慢?先看这三点
- GPU没识别到:运行
kubectl exec -n clawdbot-qwen3 <ollama-pod> -- nvidia-smi,如果报错“command not found”,说明没装NVIDIA Device Plugin。补装后重启Ollama Pod。 - 显存不足:Qwen3-32B最低需24GB显存。用
nvidia-smi确认GPU剩余显存>25GB。不够就加卡,别硬扛。 - CPU fallback:Ollama日志里出现
using CPU for inference,说明没找到CUDA。检查容器是否加了nvidia.com/gpu: 1资源请求。
5.2 聊天界面打不开?按顺序查
| 现象 | 快速定位命令 | 常见原因 |
|---|---|---|
| 白屏,控制台报502 | kubectl logs -n clawdbot-qwen3 deploy/clawdbot-qwen3-gateway | Nginx配置错误,或backend Service没起来 |
| 输入后无响应 | kubectl logs -n clawdbot-qwen3 deploy/clawdbot-qwen3-backend | 后端连不上Ollama,检查OLLAMA_HOST环境变量 |
| 页面加载但提示“连接断开” | kubectl get events -n clawdbot-qwen3 --sort-by=.lastTimestamp | Pod被OOMKilled,调高memory limit |
5.3 升级与扩缩容(简单到不敢信)
- 升级模型:改
values.yaml里的ollama.model为qwen3:32b-fp16,再helm upgrade ... - 横向扩容后端:
kubectl scale -n clawdbot-qwen3 deploy/clawdbot-qwen3-backend --replicas=3 - 清理重装:
helm uninstall clawdbot-qwen3 -n clawdbot-qwen3 && kubectl delete pvc ollama-models -n clawdbot-qwen3
没有重建集群,没有删数据卷,所有操作都在分钟级完成。
6. 总结:你真正掌握了什么
回看这整篇教程,你拿到的不是一个“能跑的Demo”,而是一套可复用、可演进的AI服务交付方法论:
- 你学会了如何把大模型从“本地玩具”变成“集群服务”:不再依赖笔记本GPU,而是用K8s统一调度计算资源;
- 你搞懂了代理链路的真实含义:18789端口不是魔法数字,它是Nginx把浏览器请求精准转发给Clawdbot后端,再由后端调Ollama API的完整路径;
- 你拥有了故障自愈能力:当Pod崩溃,K8s自动拉起;当模型加载失败,你知道该看哪条日志、查哪个配置;
- 你获得了继续生长的支点:现在想换Qwen3-72B?改一行配置就行;想加RAG插件?在backend容器里挂载新目录即可。
技术的价值,从来不在“多酷”,而在“多稳”。当你下次面对另一个大模型部署需求时,这套Helm Chart思维会自然浮现——因为真正的掌握,是把复杂留给自己,把简单留给用户。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。