同系列举荐

  • Jenkins管理工具详解
  • Pipeline流水语法详解
  • Docker容器入门简介
  • Pipeline整合Docker容器
  • Kubernetes容器引擎详解
  • 微服务组件二次浅封装

前言:该系列文章,围绕继续集成:Jenkins+Docker+K8S相干组件,实现自动化治理源码编译、打包、镜像构建、部署等操作;本篇文章次要形容流水线集成K8S用法

一、背景形容

分布式服务的部署是一个简单的流程,当容器利用存在几十甚至上百的时候,用手动的形式部署显然难度过高,借助Kubernetes容器编排引擎,能够疾速的实现主动部署,扩大,降级等一系列简单步骤。

二、流程设计

在之前的篇幅中,曾经形容了流水线的形式进行源码编译Jar包,并构建成Docker镜像的过程,接下来在K8S平台上部署Docker容器,这样整个自动化的流程就根本欠缺了:

外围步骤:

  • 创立yaml文件类型资源管理脚本;
  • 执行已部署资源的删除;
  • 依据脚本创立新的资源服务;

该流程连接在Docker镜像构建胜利之后,能够先在本地pull镜像,也能够间接从近程仓库实时获取镜像。

三、实现过程

1、插件装置

Jenkins集成K8S的插件:Kubernetes plugin

2、部署脚本

对于K8S部署docker镜像的脚本语法,在K8S根底模块中有详细描述,创立脚本文件的语法在docker流水线模块中同样实用:

    environment {        k8s_directory = 'k8s-deploy'    }        // K8S部署Docker镜像        stage('K8Sdeploy') {            steps {                sh '''                rm -rf ${k8s_directory}                mkdir -p ${k8s_directory}                cd ${k8s_directory}cat>k8s-app.yaml<<EOF---apiVersion: apps/v1kind: Deploymentmetadata:  name: k8s-app-deployment  labels:    app: k8s-appspec:  replicas: 2  selector:    matchLabels:      app: k8s-app  template:    metadata:      labels:        app: k8s-app    spec:      containers:      - name: k8s-app        image: cicada-image/doc-line-app:latest        imagePullPolicy: Never        ports:         - containerPort: 8079---apiVersion: v1kind: Servicemetadata:  name: k8s-app-service  labels:    app: k8s-appspec:  type: NodePort  ports:     - port: 8080      targetPort: 8079  selector:    app: k8s-appEOF                cat k8s-app.yaml                echo "create k8s-app.yaml success"                echo "base Yaml file deploy k8s resource"                ls                                sleep 10                set +e                kubectl delete -f k8s-app.yaml                                sleep 10                set -e                kubectl create -f k8s-app.yaml                '''            }        }    }

脚本阐明:

  • 进入k8s的工作目录;
  • 创立k8s-app.yaml部署的脚本文件;
  • 申明Pod的正本数为:2;
  • 依据脚本尝试一次资源删除;
  • 依据脚本创立资源;
  • set +e-e为shell语法,管制脚本是否中断;

资源创立胜利后,查看k8s的控制台界面,各个组件是否都部署胜利,之后通过拜访服务中API接口判断环境是否通顺:

3、流程总结

在整个流程中,波及上面几个外围阶段:

  • 源码治理,代码仓库获取,hook模式配置;
  • 本地编译打包,生成利用的Jar包;
  • Docker将Jar包构建成镜像文件,上传仓库;
  • K8S将Docker镜像部署在集群服务上;

这里简化很多不必要的流程,在理论的利用中,远比案例中的演示更简单,能够依据各个业务的须要,参考流水线组件的性能文档,一直引入更好的形式去优化流程,最终会造成一个继续交付的主动流程,并且不会对代码层面带来革新老本。

四、源代码地址

GitEE·地址https://gitee.com/cicadasmile/butte-auto-parentWiki·地址https://gitee.com/cicadasmile/butte-java-note