一、Pig架构(该图来自Pig白皮书中的基础架构图)
二、CI/CD架构图
# 服务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服务器
四、TKE集群创建(托管集群类型/区域:北京/运行时:Docker/GlobalRouter网络模式/集群规格:L20)
1、集群Woker节点资源规划
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