yapi部署k3s教程

Posted by Forgus on 2026-03-20

集群: K3s v1.34.5+k3s1 (6 节点混合架构)


一、部署概述

项目
应用 yapi-x (接口管理平台)
命名空间 yapi-x
存储 Longhorn (10Gi)
访问方式 Ingress (yapi.forgus.local)
初始账号 admin@docker.yapi / adm1n

二、部署拓扑

1
2
3
4
5
6
7
8
9
10
11
12
13
┌─────────────────────────────────────────────┐
│ K3s 集群 (6 节点) │
├─────────────────────────────────────────────┤
│ k3s-master (amd64) │
│ ├── yapi-web (Deployment) │
│ └── yapi-mongo (Deployment) │
│ └── Longhorn PVC (10Gi) │
│ │
│ k3s-worker-01~05 (arm64/树莓派) │
└─────────────────────────────────────────────┘

▼ Ingress
http://yapi.forgus.local

三、配置文件

3.1 mongo-pvc.yaml

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yapi-mongo-pvc
namespace: yapi-x
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: longhorn

3.2 mongo-deployment.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
apiVersion: apps/v1
kind: Deployment
metadata:
name: yapi-mongo
namespace: yapi-x
spec:
replicas: 1
selector:
matchLabels:
app: yapi-mongo
template:
metadata:
labels:
app: yapi-mongo
spec:
containers:
- name: mongo
image: mongo:4.0
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-data
mountPath: /data/db
volumes:
- name: mongo-data
persistentVolumeClaim:
claimName: yapi-mongo-pvc

3.3 mongo-service.yaml

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: yapi-mongo
namespace: yapi-x
spec:
selector:
app: yapi-mongo
ports:
- port: 27017
targetPort: 27017
clusterIP: None

3.4 yapi-deployment.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
apiVersion: apps/v1
kind: Deployment
metadata:
name: yapi-web
namespace: yapi-x
spec:
replicas: 1
selector:
matchLabels:
app: yapi-web
template:
metadata:
labels:
app: yapi-web
spec:
containers:
- name: yapi-web
image: jayfong/yapi:latest
ports:
- containerPort: 3000
env:
- name: YAPI_ADMIN_ACCOUNT
value: "admin@docker.yapi"
- name: YAPI_ADMIN_PASSWORD
value: "adm1n"
- name: YAPI_CLOSE_REGISTER
value: "false"
- name: YAPI_DB_SERVERNAME
value: "yapi-mongo"
- name: YAPI_DB_PORT
value: "27017"
- name: YAPI_DB_DATABASE
value: "yapi"

3.5 yapi-service.yaml

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: yapi-web
namespace: yapi-x
spec:
selector:
app: yapi-web
ports:
- port: 3000
targetPort: 3000
type: ClusterIP

3.6 ingress.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: yapi-web-ingress
namespace: yapi-x
spec:
rules:
- host: yapi.forgus.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: yapi-web
port:
number: 3000

四、部署命令

1
2
3
4
5
6
7
8
# 1. 创建命名空间
kubectl create namespace yapi-x

# 2. 部署所有资源
kubectl apply -f /root/projects/yapi-x/k3s-deploy/

# 3. 查看状态
kubectl get all,ingress,pvc -n yapi-x

五、问题排查记录

5.1 镜像架构问题

问题: jayfong/yapi-x:latest 仅支持 amd64,不支持 arm64

解决: 改用 jayfong/yapi:latest(支持多架构)

5.2 MongoDB 版本问题

问题: MongoDB 5.0+ 需要 CPU AVX 支持,master 节点不满足

解决: 降级到 mongo:4.0

5.3 Longhorn 卷绑定问题

问题: 多 Pod 争用同一 PVC 导致 attach 冲突

解决: 清理旧 PVC 和 Pod,重新创建


六、访问信息

项目
URL http://yapi.forgus.local
初始账号 admin@docker.yapi
初始密码 adm1n

注意: 需确保 DNS 解析或本地 hosts 配置 192.168.2.40 yapi.forgus.local


七、文件位置

  • 配置文件: /root/projects/yapi-x/k3s-deploy/