你是不是也遇到过这样的问题:
- 想用Qwen3-32B这种大模型做在线聊天服务,但单机部署扛不住突发流量?
- 手动启停模型实例太麻烦,高峰期卡顿、低峰期资源闲置?
- 网关和模型服务耦合太紧,改个配置就要重启整个链路?
Clawdbot Web网关就是为解决这些问题而生的。它不直接运行模型,而是作为智能流量调度中枢——把用户请求动态分发到后端Qwen3-32B服务集群,并在Kubernetes上实现毫秒级自动扩缩容。整个过程对前端完全透明,你看到的只是一个稳定、响应快、永远在线的Chat平台。
这不是“又一个API代理”,而是一套面向生产环境设计的轻量级AI服务编排方案:Ollama提供模型推理能力,Clawdbot负责协议转换与路由,K8s兜底弹性伸缩。三者各司其职,组合起来却比很多重型框架更可靠、更易维护。
下面我们就从零开始,一步步搭起这套系统。全程不碰复杂YAML、不写Operator、不折腾证书,所有操作都控制在10分钟内可完成验证。
2.1 硬件与系统要求
Clawdbot本身很轻量,真正吃资源的是Qwen3-32B。我们按生产可用的最低标准来配置:
注意:Qwen3-32B在Ollama中默认以
qwen3:32b标签加载。如果你用的是自定义量化版本(如qwen3:32b-q4_k_m),请同步修改后续所有镜像和配置中的模型名。
2.2 必备工具清单
确保以下命令已在所有节点可用:
# 验证K8s环境 kubectl version –short helm version –short
安装Ollama(仅需在推理节点安装)
curl -fsSL https://ollama.com/install.sh | sh
安装Clawdbot CLI(可选,用于快速调试)
curl -L https://github.com/clawdbot/cli/releases/download/v0.4.2/clawdbot-linux-amd64 -o /usr/local/bin/clawdbot chmod +x /usr/local/bin/clawdbot
不需要Docker Desktop、不需要Kind、不需要k3s——标准K8s集群即可。如果你还在用Docker Compose跑模型,现在就是切换到K8s的**时机。
3.1 在K8s中部署Ollama服务
Ollama官方不提供K8s原生部署包,但我们用最简方式封装:一个StatefulSet + 一个Service。不依赖Helm Chart,纯YAML开箱即用。
创建 ollama-deployment.yaml:
apiVersion: apps/v1 kind: StatefulSet metadata: name: ollama namespace: ai-inference spec: serviceName: ollama replicas: 1 selector:
matchLabels: app: ollama
template:
metadata: labels: app: ollama spec: containers: - name: ollama image: ollama/ollama:latest ports: - containerPort: 11434 name: http volumeMounts: - name: models mountPath: /root/.ollama/models resources: limits: memory: "64Gi" nvidia.com/gpu: "1" requests: memory: "32Gi" nvidia.com/gpu: "1" volumes: - name: models persistentVolumeClaim: claimName: ollama-models-pvc
apiVersion: v1 kind: Service metadata: name: ollama namespace: ai-inference spec: selector:
app: ollama
ports:
- port: 11434 targetPort: 11434
执行部署:
kubectl create namespace ai-inference kubectl apply -f ollama-deployment.yaml等待Pod就绪后,手动加载Qwen3-32B(首次加载约需8分钟):
kubectl exec -it deploy/ollama -n ai-inference – ollama run qwen3:32b验证是否成功:
kubectl port-forward svc/ollama 11434:11434 -n ai-inference,然后访问http://localhost:11434/api/tags,应看到qwen3:32b在列表中。3.2 配置自动扩缩容策略
Qwen3-32B是计算密集型任务,不能靠CPU使用率扩缩——等CPU飙高时请求早已超时。我们改用并发请求数作为指标,这是AI服务最真实的负载信号。
创建
hpa-qwen3.yaml:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: ollama-hpa namespace: ai-inference spec: scaleTargetRef: apiVersion: apps/v1 kind: StatefulSet name: ollama minReplicas: 1 maxReplicas: 5 metrics: - type: External external: metric:
name: http_requests_total selector: matchLabels: service: clawdbot-gatewaytarget:
type: AverageValue averageValue: 10注意:这需要提前部署Prometheus + kube-metrics-adapter,并配置好
http_requests_total指标采集规则(Clawdbot网关默认暴露该指标)。如果你暂未接入监控体系,可先用简易版——基于内存使用率的保守扩缩:kubectl autoscale statefulset ollama–namespace=ai-inference –min=1 –max=3 –cpu-percent=70
4.1 安装Clawdbot网关服务
Clawdbot采用Operator模式管理,但安装极其简单:
# 添加仓库并安装 helm repo add clawdbot https://charts.clawdbot.dev helm repo update helm install clawdbot clawdbot/gateway –namespace ai-gateway –create-namespace –set model.endpoint=http://ollama.ai-inference.svc.cluster.local:11434 –set model.name=qwen3:32b –set service.type=LoadBalancer安装完成后,获取网关地址:
kubectl get svc clawdbot -n ai-gateway输出类似:clawdbot LoadBalancer 10.96.123.45 EXTERNAL-IP 80:31234/TCP
4.2 配置Web代理与端口映射
Clawdbot默认监听80端口,但你的Qwen3-32B服务运行在11434端口,中间需要一层协议适配。Clawdbot内置了OpenAPI兼容层,无需Nginx反向代理。
关键配置项说明:
model.endpointhttp://ollama.ai-inference.svc.cluster.local:11434model.nameqwen3:32bgateway.port8080upstream.timeout120s查看实际生效配置:
kubectl get cm clawdbot-config -n ai-gateway -o yaml4.3 验证端到端连通性
不用写代码,用
curl直连测试:# 发送一个简单请求(模拟前端调用)curl -X POST http://
/v1/chat/completions -H “Content-Type: application/json” -d ‘{ “model”: “qwen3:32b”, “messages”: [{“role”: “user”, “content”: “你好,请用一句话介绍你自己”}], “stream”: false }’ 预期返回包含
“content”:“我是通义千问Qwen3-32B…”的JSON。如果返回503 Service Unavailable,检查Ollama Pod日志:kubectl logs deploy/ollama -n ai-inference。5.1 访问Chat平台界面
你提供的截图显示了一个简洁的Web聊天界面。它本质是一个静态HTML+JS应用,通过
fetch直连Clawdbot网关。部署方式有两种:- 方式一(推荐):用Nginx托管前端,指向Clawdbot网关地址
- 方式二:将前端打包进Clawdbot镜像,启用内置Web UI(需在Helm安装时加
–set ui.enabled=true)
无论哪种方式,最终用户访问的URL结构都是:
https://your-domain.com/ → 反向代理到 http://:80 打开页面后,输入问题发送,观察浏览器开发者工具Network面板——请求目标是
/v1/chat/completions,状态码200,响应时间在3~8秒(Qwen3-32B首次响应典型值)。5.2 制造流量压力,观察扩缩容行为
用
hey工具模拟10个并发用户持续请求:hey -z 2m -c 10 -m POST -H “Content-Type: application/json” -d ‘{“model”:“qwen3:32b”,“messages”:[{“role”:“user”,“content”:“今天天气怎么样”}]}’ http:///v1/chat/completions 同时监控扩缩容动作:
# 实时查看Pod数量变化 watch ‘kubectl get pods -n ai-inference | grep ollama’
查看HPA决策日志
kubectl describe hpa ollama-hpa -n ai-inference
你会看到:
- 起始1个Ollama Pod → 30秒后变为2个 → 1分钟后变为3个
- 流量停止后,2分钟内逐步缩回1个Pod
- 整个过程无请求失败,Clawdbot自动将新请求路由到新增Pod
这就是真正的“无感弹性”——用户只管提问,系统默默扩容。
6.1 端口映射逻辑拆解(回应你的截图说明)
你提到“内部代理进行8080端口转发到18789网关”,这其实是Clawdbot的两层端口设计:
- 外部入口:
8080—— 用户或前端调用的端口(可配置为80/443) - 内部网关:
18789—— Clawdbot进程监听的gRPC管理端口(不可被外部访问) - 模型通信:
11434—— Ollama API端口(仅限K8s集群内访问)
18789端口只用于Clawdbot Operator与自身Agent通信,普通用户完全感知不到。
6.2 常见问题速查
请求返回404 Not Found
model.name配置错误,或Ollama未加载该模型
kubectl exec ollama-pod – ollama list确认模型存在
请求超时504 Gateway Timeout
upstream.timeout设置过短,或GPU显存不足OOM
将timeout调至120s,检查nvidia-smi显存占用
部署prometheus-adapter,确认kubectl get –raw /apis/custom.metrics.k8s.io/v1beta1可访问
Ollama模型加载时未指定–gpu-layers,导致部分计算回退CPU
重新运行ollama run qwen3:32b –gpu-layers 40
提示:Qwen3-32B在A10上建议
–gpu-layers 35~45,A100上可设为50+。层数越高,GPU利用率越高,首token延迟越低。
读完这篇教程,你拿到的不是一个“能跑起来”的Demo,而是一套可立即用于中小团队AI服务交付的标准化方案:
- 架构清晰:Clawdbot做协议网关,Ollama专注推理,K8s负责弹性——职责分离,故障隔离
- 运维友好:所有配置通过Helm参数注入,升级只需
helm upgrade,无需手动改YAML - 成本可控:自动缩容让空闲时段资源归零,GPU卡不再24小时烧钱
- 平滑演进:未来想换Qwen3-72B?只需改
model.name和资源限制,其他不动
更重要的是,你理解了AI服务部署的核心矛盾:大模型的重与Web服务的轻如何共存。Clawdbot的价值,正在于它用最朴素的HTTP+K8s原语,给出了一个足够优雅的答案。
技术没有银弹,但有经过验证的路径。你现在,已经站在了这条路上。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/269215.html