起初yapi是单独部署在一台机器上,部署方式docker,最近公司统一账户管理(openldap),所以把yapi部署在k8s里面

mongodb部署在物理机上

添加源

vi /etc/yum.repos.d/mongodb-org-4.2.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

安装

yum -y install mongodb-org

启动及配置

  • /var/lib/mongo(数据文件所在目录)
  • /var/log/mongodb(日志文件所在目录)
  • /etc/mongod.conf(配置文件所在目录)
systemctl enable mongod --now

开启认证

mongo
use admin
db.createUser(
  {
    user: "myki",
    pwd: "密码",
    roles: [ { role: "root", db: "admin" } ]
  }
)

show users;
quit()

修改配置文件

vi /etc/mongod.conf
net:
  port: 27017
  bindIp: 0.0.0.0
security:
  authorization: enabled

yapi安装 yaml文件如下

kind: ConfigMap
apiVersion: v1
metadata:
  name: config-json
  namespace: tools
  labels:
    app: yapi
data:
  config.json: |-
    {
      "port": "3000",
      "closeRegister": true,
      "adminAccount": "admin@admin.com",
      "db": {
        "servername": "192.168.1.43",
        "DATABASE": "yapi",
        "port": 27017,
        "user": "myki",
        "pass": "密码",
        "authSource": "admin"
      },
      "ldapLogin": {
        "enable": true,
        "server": "ldap://ldap.mvmyun.com",
        "baseDn": "cn=manager,dc=mvmyun,dc=com",
        "bindPassword": "密码",
        "searchDn": "ou=People,dc=mvmyun,dc=com",
        "searchStandard": "&(objectClass=posixAccount)(cn=%s)",
        "emailPostfix": "@163.com",
        "emailKey": "mail",
        "usernameKey": "name"
     }
    }
---
apiVersion: v1 # 指定api版本,此值必须在kubectl api-versions中
kind: Service # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
  name: yapi # 资源的名字,在同一个namespace中必须唯一
  namespace: tools # 部署在哪个namespace中
  labels: # 设定资源的标签
    app: yapi
spec: # 资源规范字段
  type: ClusterIP # ClusterIP 类型
  ports:
    - port: 80 # service 端口
      targetPort: http # 容器暴露的端口
      protocol: TCP # 协议
      name: http # 端口名称
  selector: # 选择器
    app: yapi
---
apiVersion: apps/v1 # 指定api版本,此值必须在kubectl api-versions中
kind: Deployment # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
  name: yapi # 资源的名字,在同一个namespace中必须唯一
  namespace: tools # 部署在哪个namespace中
  labels: # 设定资源的标签
    app: yapi
    version: stable
spec: # 资源规范字段
  replicas: 1 # 声明副本数目
  revisionHistoryLimit: 3 # 保留历史版本
  selector: # 选择器
    matchLabels: # 匹配标签
      app: yapi
      version: stable
  minReadySeconds: 5 # 最小就绪时间 默认值0
  strategy: # 策略
    rollingUpdate: # 滚动更新
      maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUnavailable: 30% # 示在更新过程中能够进入不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
    type: RollingUpdate # 滚动更新策略
  template: # 模版
    metadata: # 资源的元数据/属性
      annotations: # 自定义注解列表
        sidecar.istio.io/inject: "false" # 自定义注解名字
        myki: "1600000000" # 自定义注解名字
      labels: # 设定资源的标签
        app: yapi
        version: stable
    spec: # 资源规范字段
      #serviceAccountName: jenkins
      #serviceAccount: jenkins
      containers:
        - name: yapi # 容器的名字
          #image: nginx # 容器使用的镜像地址
          image: registry.cn-hangzhou.aliyuncs.com/anoyi/yapi # 容器使用的镜像地址
          workingDir: /yapi/vendors
          command: ["/bin/sh"]
          args: ["-c", "node server/app.js"]
          volumeMounts: # 定义挂载
          - name: config-json
            mountPath: /yapi/config.json
            subPath: config.json
          - name: timezone # 挂载名字
            mountPath: "/etc/localtime" # pod 挂载目录
            readOnly: true
          imagePullPolicy:
#            periodSeconds: 10 # 检查间隔时间
          ports:
            - name: http # 名称
              containerPort: 3000 # 容器开发对外的端口
              protocol: TCP # 协议
          lifecycle:
            #优雅关闭容器
            preStop:
              exec:
                command: ["/bin/sh", "-c", "sleep 30"]
      imagePullSecrets: # 镜像仓库拉取密钥
        - name: aliyun-registry-vpc
      hostAliases:
      - ip: "192.168.1.26"
        hostnames:
          - "rc-ws.mymtools.com"
      affinity: # 亲和性调试
        nodeAffinity: # 节点亲和力
          requiredDuringSchedulingIgnoredDuringExecution: # pod 必须部署到满足条件的节点上
            nodeSelectorTerms: # 节点满足任何一个条件就可以
              - matchExpressions: # 有多个选项,则只有同时满足这些逻辑选项的节点才能运行 pod
                  - key: beta.kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
      dnsPolicy: ClusterFirst # Pod 的 DNS 配置可让用户对 Pod 的 DNS 设置进行更多控制
      #serviceAccountName: demo #服务账户名称
      #serviceAccount: demo #为Pod 配置服务账户
      dnsConfig:
        options:
          - name: single-request-reopen # dns搜索域解决dns 命中低问题
      volumes: # 外部挂载
        - name: config-json
          configMap:
            name: config-json
        - name: timezone # 挂载名字
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: yapi-https
  namespace: tools
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx # 1.18 以上使用
  tls:
  - hosts:
      - yapi.mvmyun.com
    secretName: mvmyun-com
  rules:
  - host: yapi.mvmyun.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: yapi
          servicePort: 80