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 服务

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐