一、Pig架构(该图来自Pig白皮书中的基础架构图)

pig架构 pig架构组件 ppt_数据中心

二、CI/CD架构图

pig架构 pig架构组件 ppt_Deployment_02

# 服务Jenkins流水线
pipeline {
    agent {
        label "master"
    }
    tools {
        maven 'maven3'
        jdk 'java1.8'
    }
    options {
        ansiColor('xterm')
        timestamps()
        disableConcurrentBuilds()
        buildDiscarder(logRotator(numToKeepStr: '3',artifactDaysToKeepStr: '3'))
    }
    parameters {
        gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH'
        choice choices: ['uat', 'prod'], description: '选择部署环境', name: 'ENV'
        choice choices: ['uat', 'prod'], description: '选择部署namespace,UAT环境选择uat,PROD环境选择prod', name: 'NS'
    }
    environment {
        APP_NAME = "pig-register"
        REGISTRY = "reg.istak.com"
        HARBOR_NAMESPACE = "demo"
        HARBOR_KEY = "harborkey"
    }
    stages {
        stage('Git clone') {
            steps {
                git branch: "${params.BRANCH}", credentialsId: 'root', url: 'https://gitlab.istack.com/pig/pig-register.git'
            }
        }
        stage('Maven pack') {
            steps {
                sh 'mvn clean install -Dmaven.test.skip=true -gs /root/maven/conf/settings-pig.xml'
            }
            post {
                success {
                    archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/*.jar', fingerprint: true, followSymlinks: false
                }
            }
        }
        stage('Docker image build') {
            steps {
                echo 'Build images'
                sh '''
                    cd $WORKSPACE
                    docker build -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:v$BUILD_NUMBER -f ./pig-register/Dockerfile ./pig-register/target
                '''

                echo 'Push images'
                sh 'docker push $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:v$BUILD_NUMBER'
                
                echo 'Clean images'
                sh 'docker rmi $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:v$BUILD_NUMBER'
            }
        }
        stage('Deploy') {
            when {
                expression {
                    currentBuild.result == null || currentBuild.result == 'SUCCESS' 
                }
            }
            steps {
                script {
                    if ( "${params.ENV}" == "uat" ) {
                        echo ('Deploy to uat')
                        sh """
                            cd $WORKSPACE
                            sed -i -e 's#{APP_NAME}#${env.APP_NAME}#g;s#{NS}#${params.NS}#g;s#{REGISTRY}#${env.REGISTRY}#g;s#{HARBOR_NAMESPACE}#${env.HARBOR_NAMESPACE}#g;s#{BUILD_NUMBER}#${env.BUILD_NUMBER}#g;s#{HARBOR_KEY}#${env.HARBOR_KEY}#g' ./pig-register/deploy/*.yaml
                            /usr/local/bin/kubectl --kubeconfig /tke/uat-config apply -f ./pig-register/deploy/
                        """
                    } else {
                        echo ('Deploy to prod')
                        sh """
                            cd $WORKSPACE
                            sed -i -e 's#{APP_NAME}#${env.APP_NAME}#g;s#{NS}#${params.NS}#g;s#{REGISTRY}#${env.REGISTRY}#g;s#{HARBOR_NAMESPACE}#${env.HARBOR_NAMESPACE}#g;s#{BUILD_NUMBER}#${env.BUILD_NUMBER}#g;s#{HARBOR_KEY}#${env.HARBOR_KEY}#g' ./pig-register/deploy/*.yaml
                            /usr/local/bin/kubectl --kubeconfig /tke/prod-config apply -f ./pig-register/deploy/
                        """
                    }
                }
            }
        }
    }
}

三、云端与IDC数据中心网络架构图

  云端访问IDC数据中心网络,配置云端子网路由指向云端N2N服务器;IDC数据中心访问云端网络,配置IDC子网指向数据中心N2N服务器

pig架构 pig架构组件 ppt_TCP_03

四、TKE集群创建(托管集群类型/区域:北京/运行时:Docker/GlobalRouter网络模式/集群规格:L20)

  1、集群Woker节点资源规划

  

pig架构 pig架构组件 ppt_Deployment_04

   2、购买(组件:TCR)

   参考:https://cloud.tencent.com/document/product/457

   3、MySQL、Redis、Ckafka、Elasticsearch、EMR等产品购买参考腾讯云网关(产品购买时注意选择事先规划好的子网及安全组)

五、Pig部署

  1、根据Pig服务启动顺序部署服务(register-->stellar-upms-->gateway-->auth)

# Register服务Deployment和Service
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pix-register
spec:
  selector:
    matchLabels:
      app: pix-register
  replicas: 1
  template:
    metadata:
      labels:
        app: pix-register
    spec:
      containers:
        - name: pix-register
          image: reg.istack.com/demo/pix-register:v1
          env:
            - name: MYSQL_USER
              value: "root"
            - name: MYSQL_PWD
              value: "root"
          imagePullPolicy: Always
          ports:
            - containerPort: 8848
              protocol: TCP
          livenessProbe:
            failureThreshold: 3
            tcpSocket:
              port: 8848
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          readinessProbe:
            failureThreshold: 3
            tcpSocket:
              port: 8848
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            requests:
              cpu: "1000m"
              memory: "1Gi"
            limits:
              cpu: "2000m"
              memory: "4Gi"
      imagePullSecrets:
        - name: harborkey
      hostAliases:
        - ip: "10.16.10.143"
          hostnames:
            - "pig-mysql"
---
apiVersion: v1
kind: Service
metadata:
  name: pix-register
  labels:
    app: pix-register
spec:
  selector:
    app: pix-register
  type: NodePort
  ports:
    - port: 8848
      protocol: TCP
      targetPort: 8848

# 其他后端服务Deployment和Service模板
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {APP_NAME}
spec:
  selector:
    matchLabels:
      app: {APP_NAME}
  replicas: 1
  template:
    metadata:
      labels:
        app: {APP_NAME}
    spec:
      containers:
        - name: {APP_NAME}
          image: {REGISTRY}/{HARBOR_NAMESPACE}/{APP_NAME}:v{BUILD_NUMBER}
          imagePullPolicy: Always
          ports:
            - containerPort: 4000
              protocol: TCP
          livenessProbe:
            failureThreshold: 3
            tcpSocket:
              port: 4000
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          readinessProbe:
            failureThreshold: 3
            tcpSocket:
              port: 4000
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            requests:
              cpu: "1000m"
              memory: "1Gi"
            limits:
              cpu: "2000m"
              memory: "4Gi"
      imagePullSecrets:
        - name: {HARBOR_KEY}
---
apiVersion: v1
kind: Service
metadata:
  name: {APP_NAME}
  labels:
    app: {APP_NAME}
spec:
  selector:
    app: {APP_NAME}
  type: NodePort
  ports:
    - port: 4000
      protocol: TCP
      targetPort: 4000

  2、pig-ui服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pig-ui
spec:
  selector:
    matchLabels:
      app: pig-ui
  replicas: 1
  template:
    metadata:
      labels:
        app: pig-ui
    spec:
      containers:
        - name: pig-ui
          image: reg.istack.com/demo/pig-ui:v1
          imagePullPolicy: Always
          ports:
            - containerPort: 80
              protocol: TCP
          livenessProbe:
            failureThreshold: 3
            tcpSocket:
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          readinessProbe:
            failureThreshold: 3
            tcpSocket:
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            requests:
              cpu: "1000m"
              memory: "1Gi"
            limits:
              cpu: "2000m"
              memory: "4Gi"
          volumeMounts:
            - name: timezone
              mountPath: /etc/localtime
      imagePullSecrets:
        - name: harborkey
      volumes:
        - name: timezone
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:
  name: pig-ui
  labels:
    app: pig-ui
spec:
  selector:
    app: pig-ui
  type: NodePort
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
      nodePort: 30080

六、Pod水平自动伸缩(基于内存和CPU)

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: {APP_NAME}
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {APP_NAME}
  minReplicas: 2
  maxReplicas: 4
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  - type: Resource
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 3072Mi

七、Pod垂直伸缩

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: {APP_NAME}
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: {APP_NAME}
  updatePolicy:
    updateMode: "Off"

八、TKE接入Kuboard

参考:https://kuboard.cn/install/v3/install.html