K3s轻量集群住宅机器部署AI中转网关
用K3s在家庭服务器上搭建轻量集群并部署AI中转网关
如果你有一台闲置的住宅机器(比如旧台式机或NUC),想用它运行AI中转网关(负责统一管理OpenAI兼容接口的密钥、分流和计费),K3s是理想的选择。
K3s是Rancher推出的轻量级Kubernetes发行版,安装包不到100MB,启动仅需512MB内存,非常适合家庭服务器的资源限制。
本文从零开始,带你在Ubuntu/Debian上部署K3s集群,并用Helm安装一个开源AI中转网关(以new-api为例)。
全程只需几条命令,耐心看完都能成功。
为什么要用K3s部署AI中转网关
传统的AI中转网关(如One API、New API)通常用Docker Compose单机运行,但一旦需要多节点高可用、动态扩缩容或与其他微服务协同,K3s的集群管理优势就体现出来了。
K3s简化了Kubernetes的证书和网络组件,无需etcd(默认使用SQLite),非常适合单机或少量节点的场景。
在住宅机器上,用K3s部署AI中转网关可以让你:
- 直接使用kubectl管理所有服务
- 轻松升级、备份和迁移
- 结合Ingress暴露服务,无需手动绑定端口
准备工作清单
- 一台可以联网的住宅机器(本文假设IP为
192.168.1.100,系统为Ubuntu 22.04) - 用户有sudo权限,且内核版本不低于4.x
- 确保已禁用swap(
sudo swapoff -a并在/etc/fstab注释swap行) - 建议安装
curl、wget、git等基础工具(sudo apt update && sudo apt install -y curl wget git) - 如果需要外网访问,需在路由器上做端口转发或使用内网穿透(如frp),本文不展开。
四步搭建K3s集群(单节点为例)
第一步:安装K3s
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -
加上--disable traefik是避免默认安装的Traefik与后面AI网关的Ingress冲突。
如果不需要也不影响。
安装成功后,K3s会自动启动,并设置kubectl配置文件。
第二步:检查集群状态
sudo k3s kubectl get node
看到状态为Ready即表示正常。
为后续操作方便,可将kubeconfig复制到当前用户:
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
export KUBECONFIG=~/.kube/config
第三步:安装Helm(管理Kubernetes包)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
第四步:安装Nginx Ingress Controller(用于外部访问)
我们不用K3s自带的Traefik,安装社区标准的nginx-ingress:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
kubectl create namespace ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.hostNetwork=true
hostNetwork=true直接使用宿主机网络,方便家庭网络环境。
稍后等待Pod运行:
kubectl -n ingress-nginx wait --for=condition=ready pod --all --timeout=120s
用Helm部署AI中转网关(以new-api为例)
这里采用new-api开源项目,它支持多API密钥池、中继和统计。
我们通过Helm简化部署。
第一步:添加Helm仓库(假设new-api已有官方Helm chart,若无可用values直接创建Deployment) 为通用起见,我们手动创建Deployment文件。
创建一个目录new-api,编写如下内容:
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: new-api
spec:
replicas: 1
selector:
matchLabels:
app: new-api
template:
metadata:
labels:
app: new-api
spec:
containers:
- name: new-api
image: calciumion/new-api:latest
ports:
- containerPort: 3000
env:
- name: SQLITE_PATH
value: /data/new-api.db
volumeMounts:
- mountPath: /data
name: data
volumes:
- name: data
hostPath:
path: /var/lib/new-api
type: DirectoryOrCreate
service.yaml
apiVersion: v1
kind: Service
metadata:
name: new-api-svc
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 3000
selector:
app: new-api
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: new-api-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: "" # 留空则会匹配所有Host,也可填写域名如ai.yourhome.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: new-api-svc
port:
number: 3000
第二步:应用资源
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml
第三步:等待Pod运行并暴露端口
kubectl get pod -w
服务运行后,Ingress已将3000端口映射到宿主机80端口(因为nginx-ingress的hostNetwork)。
现在你可以通过http://192.168.1.100访问AI中转网关的Web界面。
常见部署问题与避坑
- 端口冲突:宿主机80端口可能被其他服务占用。解决方法:修改Ingress中nginx-ingress的controller端口,使用大于1024的端口,例如:
--set controller.service.nodePorts.http=30080。 - K3s权限问题:如果kubectl报错“Forbidden”,重新复制kubeconfig或直接使用
sudo k3s kubectl。 - AI中转网关数据库持久化:上面使用hostPath存储SQLite,容易丢失。建议挂载PVC或外挂NAS目录。
- 内网穿透:如需公网访问,参考frp或Cloudflare Tunnel,注意修改Ingress的域名。
验证服务是否正常
通过浏览器访问http://192.168.1.100,看到new-api登录页面即成功。
登录后添加一个AI API密钥(如OpenAI key),然后调用测试:
curl http://192.168.1.100/v1/chat/completions \
-H "Authorization: Bearer 你的new-api密钥" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "hello"}]}'
返回正常JSON说明网关转发成功。
常见问题解答
Q1:K3s推荐配置多低?
A:单节点可运行在1核1GB的云服务器或家庭设备上,建议最低2核2GB以获得稳定性能。
Q2:AI中转网关有哪些推荐?
A:除new-api外,One API、GoProxy等也支持Kubernetes部署,可根据功能选择。
Q3:如何升级AI中转网关版本?
A:修改deployment.yaml中的镜像tag,执行kubectl apply -f deployment.yaml,K3s会自动滚动更新。
Q4:住宅机器电费和网络稳定性怎么办?
A:建议使用低功耗设备(如树莓派4B或J4125软路由),并配置UPS和定时重启脚本。若服务重要,可租用泽御云等正规IDC提供的云服务器(持有增值电信业务经营许可证,B1-20261342)作为生产环境。