天天看點

k8s部署Yapi接口服務

YApi 是高效、易用、功能強大的 api 管理平台,旨在為開發、産品、測試人員提供更優雅的接口管理服務…此處省略,具體介紹請自行查閱官方介紹

1.Dockerfile的編寫

FROM nodejs10.16.0 as builder
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk update && apk upgrade && apk add --no-cache git python make openssl tar gcc wget curl
RUN rm -rf /var/cache/apk/*
ADD v1.5.6.tar.gz /tmp
RUN mkdir /yapi
WORKDIR /yapi/vendors
COPY entrypoint.sh /usr/bin
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
           

這裡示範用的是v1.5.6的版本,大家可以下載下傳自己想部署的版本并做相應修改即可

2.entrypoint.sh代碼如下

#!/bin/sh
# yapi初始化後會有一個init.lock檔案
lockPath="/yapi/vendors/init.lock"
# 如果初始化檔案檔案存在,則直接運作,否則初始化
cd /yapi/vendors
if [ ! -f "$lockPath" ]; then
    cp -rf /tmp/yapi-1.5.6/* /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
           

大家可以看下注釋,因為在初始化後會自動在/yapi目錄下生成一個init.lock檔案,我這裡将這個檔案往vendors目錄下拷貝了一份,腳本中判斷vendors目錄下是否有該檔案,如果沒有,則認為是初次安裝,則執行初始化安裝指令,如果存在,則直接啟動項目。

注意修改啟動腳本中的版本号為你自己下載下傳的版本

3.因為yapi項目在初始化的依賴配置檔案,配置檔案内容如下

{
  "port": "3000",
  "adminAccount": "[email protected]",
  "db": {
    "connectString": "mongodb://mongodb-rs0-0.mongodb-rs0-svc.mongodb:27017,mongodb-rs0-1.mongodb-rs0-svc.mongodb:27017,mongodb-rs0-2.mongodb-rs0-svc.mongodb:27017/yapi?replicaSet=rs0&slaveOk=true",
    "user": "yapi",
    "pass": "123456"
  },
  "ldapLogin": {
    "enable": true,
    "server": "ldap://172.16.1.29",
    "baseDn": "CN=yapi,OU=ServiceAccount,OU=IT部,DC=test,DC=com",
    "bindPassword": "yapi123456",
    "searchDn": "OU=IT部,DC=test,DC=com",
    "searchStandard": "&(objectClass=user)(sAMAccountName=%s)",
    "usernameKey": "displayName",
    "emailKey": "mail"
  },
  "closeRegister":true
}
           

4.yapi在初始化時自行安裝的node依賴需要持久儲存,是以需要建立pv,并在容易中挂載

yapi-pvc.yaml如下

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: yapi-datadir
  namespace: omc
  annotations:
    volume.beta.kubernetes.io/storage-class: "nfs-storage"
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 20Gi
           

kubectl create -f yapi-pvc.yaml

5. 部署檔案如下

yapi.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: yapi
  namespace: omc
  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: registry.cn-beijing.aliyuncs.com/niu-idc/yapi:v1.5.6
        imagePullPolicy: Always
        ports:
        - containerPort: 3000
          name: yapi
          protocol: TCP
        volumeMounts:
        - 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-datadir
      imagePullSecrets:
      - name: registry-aliyun
           

在該部署檔案中,有兩個volume,一個是配置檔案,一個是持久存儲

6.yapi-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: yapi-svc
  namespace: omc
spec:
  ports:
  - name: yapi
    port: 80
    targetPort: 3000
    protocol: TCP
  selector:
    app: yapi
    release: yapi
           

7.yapi-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: yapi-ingress
  namespace: omc
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: yapi-idc.niucache.com
    http:
      paths:
      - path: /
        backend:
          serviceName: yapi-svc
          servicePort: 80
           

執行如下指令完成部署:

1.打包鏡像

docker build -t registry.cn-beijing.aliyuncs.com/niu-idc/yapi:v1.5.6 -t Dockerfile .
           

2.configmap yapi-config建立

kubectl create cm yapi-config -n omc --from-file=config.json
           

3.持久卷聲明yapi-datadir建立

kubectl create -f yapi-pvc.yaml
           

4.yapi部署

kubectl create -f yapi.yaml
           

5.service建立

kubectl create -f yapi-svc.yaml
           

6.ingress建立

kubectl create -f yapi-ingress.yaml
           

稍等幾分鐘,當yapi初始化安裝以後就可以通路到了。

k8s部署Yapi接口服務