集群: 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
| kubectl create namespace yapi-x
kubectl apply -f /root/projects/yapi-x/k3s-deploy/
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,重新创建
六、访问信息
注意: 需确保 DNS 解析或本地 hosts 配置 192.168.2.40 yapi.forgus.local
七、文件位置
- 配置文件:
/root/projects/yapi-x/k3s-deploy/