k8s部署 pm2项目

1、编写pm2项目Dockerfile文件
遇到的一个问题:
当我们在Dockerfile中采用pm2 start的启动命令时,一直无法正常启动,最后改成pm2-runtime启动方式
具体文件如下

# Set the base image
FROM node:16.20.2

WORKDIR /home/dex-transaction-ws

# Copy files
COPY ./ /home/dex-transaction-ws/

# Set ENV variables
ENV INAME=${SVC_NAME}

# Install dependencies and compile
RUN npm install pm2 -g
#RUN yarn install --frozen-lockfile
RUN yarn

# Expose port 8888 - note that docs port is 8080
EXPOSE 8888

# Set the default command to run when starting the container
CMD  pm2-runtime app.js --name dex-transaction-ws

2、配置k8s pods yaml文件

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    k8s.kuboard.cn/displayName: dex-transaction-ws
    k8s.kuboard.cn/workload: dex-transaction-ws
  labels:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: dex-transaction-ws
  name: dex-transaction-ws
  namespace: test
  resourceVersion: '46539186'
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s.kuboard.cn/layer: web
      k8s.kuboard.cn/name: dex-transaction-ws
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      annotations:
        kubectl.kubernetes.io/restartedAt: '2023-12-22T01:18:40+08:00'
      creationTimestamp: null
      labels:
        k8s.kuboard.cn/layer: web
        k8s.kuboard.cn/name: dex-transaction-ws
    spec:
      containers:
        - command:
            - pm2-runtime
            - app.js
            - '--name'
            - dex-transaction-ws
          env:
            - name: TZ
              value: Asia/Shanghai
          image: 'harbor.abc.com/test/dex-transaction-ws:sit'
          imagePullPolicy: Always
          name: dex-transaction-ws
          ports:
            - containerPort: 8888
              name: msag7
              protocol: TCP
            - containerPort: 9998
              name: mghkd
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /root/.pm2/logs/
              name: volume-6mey5
              subPath: dex-transaction-ws
          workingDir: /home/dex-transaction-ws
      dnsPolicy: ClusterFirst
      imagePullSecrets:
        - name: acr-secret
        - name: harbor-secret
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - name: volume-6mey5
          nfs:
            path: /data/nfs
            server: 172.16.10.20

---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: dex-transaction-ws
  name: dex-transaction-ws
  namespace: test
  resourceVersion: '45909276'
spec:
  clusterIP: 10.68.45.215
  clusterIPs:
    - 10.68.45.215
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: ddnfeb
      port: 8888
      protocol: TCP
      targetPort: 8888
    - name: 4f7pmc
      port: 9998
      protocol: TCP
      targetPort: 9998
  selector:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: dex-transaction-ws
  sessionAffinity: None
  type: ClusterIP

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: dex-transaction-ws
  name: dex-transaction-ws
  namespace: test
  resourceVersion: '46539488'
spec:
  ingressClassName: abc-ingress
  rules:
    - host: dex-test.abc.com
      http:
        paths:
          - backend:
              service:
                name: dex-transaction-ws
                port:
                  number: 8888
            path: /
            pathType: Prefix
    - host: dexws-test.abc.com
      http:
        paths:
          - backend:
              service:
                name: dex-transaction-ws
                port:
                  number: 9998
            path: /
            pathType: Prefix
  tls:
    - hosts:
        - dex-test.abc.com
        - dexws-test.abc.com
      secretName: abc.com-ssl

查询pods运行情况

~# kubectl get pods -n biking |grep dex-transaction-ws
dex-transaction-ws-5498654dff-hrpw9                   1/1     Running   1 (37h ago)   3d13h
~# kubectl get deployment -n biking |grep dex-transaction-ws
dex-transaction-ws                   1/1     1            1           4d14h
~# kubectl get ingress -n biking |grep dex-transaction-ws
dex-transaction-ws        biking-ingress   dex-test.cuiwjrpcvi.com,dexws-test.cuiwjrpcvi.com                         172.16.10.202,172.16.10.203   80, 443   4d14h

3、编写jenkins的pipeline文件

// 参数构建
pipeline {
    agent any
    parameters {
        gitParameter(name: 'BRANCH_TAG', type: 'PT_BRANCH_TAG', branchFilter: 'origin/(.*)', defaultValue: 'main', selectedValue: 'DEFAULT', sortMode: 'DESCENDING_SMART', description: '请选择需要部署的代码:')
        choice(name: 'mode', choices: ['deploy','rollback'], description: '请选择发布或者回滚?')        
        choice(name: 'ENVMENT', choices: ['sit','exp','gray','prod'], description: '环境参数')        
        string(name: 'iname', defaultValue: 'dex-transaction-ws', description: '服务名称')
    }
    environment {
        dest_path = "/var/jenkins_home/workspace/${JOB_NAME}"
        job_path = "/data/docker-compose/jenkins/jenkins_home/workspace/${JOB_NAME}"
        mod_path = "/data/docker-compose/jenkins/jenkins_home/mod"
    }
    stages {
        stage('clean'){
            steps {
              cleanWs(
                  cleanWhenAborted: true, 
                  cleanWhenFailure: true, 
                  cleanWhenNotBuilt: true, 
                  cleanWhenSuccess: true, 
                  cleanWhenUnstable: true, 
                  cleanupMatrixParent: true, 
                  disableDeferredWipeout: true,
                  deleteDirs: true
              )
            }    
        }        
        stage('从 gitlab 中拉取代码') {
            when {
                environment name: 'mode',value: 'deploy'
            }
            steps {
                deleteDir()
                checkout([$class: 'GitSCM', 
                    branches: [[name: "${params.BRANCH_TAG}"]],
                    gitTool: 'Default', 
                    userRemoteConfigs: [[url: 'https://gitlab.abc.net/bk/spot/dex-transaction-ws.git', credentialsId: 'gitlab-deploy',]]
                ])
            }
        }
        stage('Node Install And Build docker image'){
            steps{
                script{
                    sh """
                        docker build --build-arg SVC_NAME=${iname} -t harbor.abc.com/test/${iname}:$ENVMENT .
                    """
                }
            }
        }
        stage('Push image to hub'){
            steps{
                script{
                    withCredentials([usernamePassword(credentialsId: 'harbor-secret-dev',, passwordVariable: 'password', usernameVariable: 'username')]) {
                    sh 'docker login -u ${username} -p ${password}  harbor.abc.com'
                    }
                    sh 'docker push harbor.abc.com/test/${iname}:$ENVMENT'
                    
                }
            }
        }
        stage('deploy Server'){
            steps{
                script{
                    sh """
                        curl -X PUT \
                        -H "content-type: application/json" \
                        -H "Cookie: KuboardUsername=admin; KuboardAccessKey=ccpyiaxei7i8.8kjh69sh8amx8sp45x6i3t2tzwscdgeb" \
                        -d '{"kind":"deployments","namespace":"test","name":"${iname}","images":{"harbor.cuiwjrpcvi.com/bktest/${iname}":"harbor.cuiwjrpcvi.com/bktest/${iname}:${ENVMENT}"}}' \
                        "http://X.X.X.X:1234/kuboard-api/cluster/Test/kind/CICDApi/admin/resource/restartWorkload"    
                        
                        curl -X PUT \
                        -H "Content-Type: application/yaml" \
                        -H "Cookie: KuboardUsername=admin; KuboardAccessKey=ccpyiaxei7i8.8kjh69sh8amx8sp45x6i3t2tzwscdgeb" \
                        -d '{"kind":"deployments","namespace":"test","name":"${iname}"}' \
                        "http://X.X.X.X:1234/kuboard-api/cluster/Test/kind/CICDApi/admin/resource/restartWorkload"
					"""
                }
            }
        }
    }
}

你可能感兴趣的:(k8s,Node,kubernetes,node)