K8s部署多模型AI中转服务教程:零基础搭建统一API网关
K8s部署多模型AI中转服务完整教程:零基础搭建统一API网关
如果你手上有多个AI模型(比如OpenAI、Claude、Gemini)的API Key,每次切换都要改代码很麻烦。
本文介绍如何在Kubernetes集群里部署一个多模型AI中转服务,把所有模型统一成一个API入口,方便管理和调用。
本文适合有K8s基础但没接触过中转服务的同学,操作步骤全部基于命令行和YAML,跟着做就能跑起来。
准备环境:K8s集群与必装工具
开始之前确认以下条件已满足:
- 一个可用的Kubernetes集群(版本1.22+),可以是云服务商托管集群或本地Minikube。
- 集群中已安装
kubectl命令行工具,并能连接集群。 - 推荐安装Helm(版本3+),后面用来快速部署中转服务。
- 确保集群有足够的计算资源(至少2核4GB内存,用于运行Pod)。
另外准备好一个域名(可选),或直接使用NodePort/负载均衡IP访问。
核心部署:使用Helm安装开源AI中转服务(以one-api为例)
我们选择成熟的开源项目one-api作为中转服务,它支持OpenAI、Anthropic、Google等多个模型,并提供Web界面管理Key和路由。
第一步:添加Helm仓库
helm repo add one-api https://justwink.github.io/one-api-chart
helm repo update
第二步:创建命名空间
kubectl create namespace ai-transit
第三步:使用Helm安装
helm install one-api one-api/one-api -n ai-transit \
--set service.type=NodePort \
--set persistence.enabled=true
参数说明:service.type=NodePort让服务暴露在集群任意节点的随机端口,方便测试;persistence.enabled=true持久化配置数据(包括添加的模型和Key),避免Pod重启丢失。
安装完成后检查Pod是否运行:
kubectl get pod -n ai-transit
看到STATUS为Running即可。
配置多模型接入:添加渠道与令牌
第一步:访问Web管理界面
获取服务端口:
kubectl get svc -n ai-transit | grep one-api
如果输出示例:one-api NodePort 10.96.0.1 ,则通过任意节点IP:32456打开浏览器。
登录默认账号root密码123456(首次登录后请立即修改)。
第二步:添加模型渠道
进入“渠道”页面,点击“添加渠道”,分别配置:
- OpenAI渠道:类型选
OpenAI,填入你的API Key,地址默认https://api.openai.com。 - Claude渠道:类型选
Anthropic,填入API Key,地址https://api.anthropic.com。 - Google Gemini渠道:类型选
Google,填入API Key和项目ID。
其他模型同理,添加后保存。
第三步:创建访问令牌
进入“令牌”页面,点击“添加令牌”,选择你刚才添加的渠道,设置过期时间。
生成一个令牌,这个就是你统一调用的API Key。
避坑指南:常见问题与资源限制
问题1:Pod无法启动,提示OOMKilled
默认内存限制较小,建议在安装时调整资源:
helm upgrade one-api one-api/one-api -n ai-transit \
--set resources.requests.memory=256Mi \
--set resources.limits.memory=512Mi
问题2:添加渠道后测试失败
- 检查网络:确保集群可以访问外网(如果依赖公网模型API)。
- 检查API Key是否填写正确,注意格式(比如OpenAI Key以
sk-开头)。 - 如果使用私有部署的大模型(如本地Llama),需填写正确的内网地址。
问题3:服务被外部访问超时
检查NodePort的安全组是否开放该端口;
生产环境建议使用Ingress暴露,配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: one-api-ingress
namespace: ai-transit
spec:
rules:
- host: api.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: one-api
port:
number: 3000
效果验证:用curl测试统一API
假设你获得的统一访问令牌是sk-your-token,服务地址为http://节点IP:32456,使用curl请求GPT模型:
curl http://节点IP:32456/v1/chat/completions \
-H "Authorization: Bearer sk-your-token" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Hello"}]}'
返回JSON中的choices即代表成功。
同理,将model改为claude-2或gemini-pro即可调用对应模型。
高频问题FAQ
Q:如何添加自定义模型(如本地微调模型)?
A:在渠道中添加“自定义”类型,填写模型名和API地址即可。
Q:中转服务能否做负载均衡?
A:one-api支持渠道组和权重轮询,可在渠道内设置权重实现多Key轮询。
Q:迁移到生产环境需要注意什么?
A:务必设置强密码、启用HTTPS、配置Ingress并绑定域名,同时定期备份数据库(one-api默认使用SQLite,持久化Pvc丢失后需恢复)。
如果你按照本文完成了K8s部署多模型AI中转服务,后续可以根据实际流量调整副本数、启用监控。
遇到其他报错时,优先查看Pod日志(kubectl logs -n ai-transit ),或去one-api的GitHub Issues搜索。