YAPI K8S 构建
YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
部署流程
构建 Mongodb 镜像
本次使用helm
方式进行部署
- 配置 helm
# 下载 helm bitnami/mongodb 仓库
$ helm fetch bitnami/mongodb
$ tar xzf mongodbxxxx.tar.gz
# 配置values.yaml 文件
global:
imageRegistry: xxxxx # 填写自己的 Harbor 仓库地址
storageClass: nfs-storage # 填写自己的 k8s 存储地址
# 下载相应的 Mongodb docker 镜像并上传至 Harbor 仓库,对应版本同样在 values.yaml 文件中
$ docker pull bitnami/mongodb:4.4.4-debian-10-r41
$ docker tag bitnami/mongodb:4.4.4-debian-10-r41 xxxxx/mongodb:4.4.4-debian-10-r41
$ docker push xxxxx/mongodb:4.4.4-debian-10-r41
- 部署 Mongodb
# 部署前确保 k8s 命名空间存在
$ helm install mongodb --namespace mongodb ./mongodb
- 查看helm 部署信息
$ helm list -n mongodb
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mongodb mongodb 1 2021-03-31 18:30:57.841824 +0800 CST deployed mongodb-10.11.1 4.4.4
- 配置 k8s 镜像 Mongodb TCP 27017 端口内网可见-ingress
kind: ConfigMap
apiVersion: v1
metadata:
name: tcp-services
namespace: ingress-nginx
data:
27017: "mongodb/mongodb:27017" #空间名称/svc 名称/svc 端口
构建 yapi 镜像
- 新建 Dockerfile
yapi
:下载地址
FROM xxxx/library/node:12-alpine # 基础镜像直接下载即可
ADD yapi-1.9.2.tar.gz /tmp
RUN mkdir -p /yapi/vendors
WORKDIR /yapi/vendors
COPY entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
- entryponint.sh 脚本
启动 yapi 脚本
#!/bin/sh
# yapi初始化后会有一个init.lock文件
lockPath="/yapi/vendors/init.lock"
# 如果初始化文件文件存在,则直接运行,否则初始化
cd /yapi/vendors || exit
if [ ! -f "$lockPath" ]; then
cp -rf /tmp/yapi-1.9.2/* /yapi/vendors
npm install --production --registry https://registry.npm.taobao.org
# 启动Yapi初始化
npm run install-server
cp -rf /yapi/init.lock /yapi/vendors/init.lock
node server/app.js
else
# 运行yapi管理系统
node server/app.js
fi
- 构建镜像
$ docker build --no-cache --network host -t xxxx/library/yapi-1:1.9.2 .
配置 k8s yapi 存储及部署 yapi
- 创建 pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: yapi-pvc
namespace: kube-yapi
spec:
storageClassName: nfs-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi # 大小自己定义即可
- 创建 yapi 使用的 mongodb 数据库
# 进入刚才创建好的 mongodb 容器内创建
use yapi
db.createUser({user: "yapi", pwd: "yapi123", roles: [{ role: "dbOwner", db: "yapi" }]})
- 创建 yapi 启动所需的配置文件
{
"port": "3000", //服务启动端口
"adminAccount": "admin@admin.com", // 服务登陆用户名
"timeout": 120000,
"db": {
"servername": "xxxx", // 服务使用 mongodb 地址
"DATABASE": "yapi", // 服务使用 mongodb 数据库名称
"port": 27017, // mongodb 端口
"user": "yapi", // mongodb 用户
"pass": "yapi123", // mongodb 密码
"authSource": ""
}
}
- 创建 yapi 服务构建 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yapi
namespace: kube-yapi
labels:
app: yapi
release: yapi
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
app: yapi
release: yapi
template:
metadata:
labels:
app: yapi
release: yapi
spec:
containers:
- name: yapi
image: magic-harbor.magic.com/library/yapi-1:1.9.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: yapi
protocol: TCP
volumeMounts: // 此处要跟下列 volumes 进行对应
- name: config
mountPath: /yapi/config.json
subPath: config.json
- name: datadir
mountPath: /yapi/vendors
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1024Mi
volumes:
- name: config
configMap:
name: yapi-config
- name: datadir
persistentVolumeClaim:
claimName: yapi-pvc
---
apiVersion: v1
kind: Service
metadata:
name: yapi-svc
namespace: kube-yapi
spec:
ports:
- name: yapi
port: 80
targetPort: 3000
protocol: TCP
selector:
app: yapi
release: yapi
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: yapi-ingress
namespace: kube-yapi
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: yapi.xxx.com # 自定义域名
http:
paths:
- path: /
backend:
serviceName: yapi-svc
servicePort: 80
- 部署 yapi
$ kubectl create ns kube-yapi
$ kubectl create cm yapi-config -n kube-yapi --from-file=config.json
$ kubectl apply -f pvc.yaml
$ kubectl apply -f yapi.yaml
- 验证 yapi 服务