乐趣区

关于kubernetes:自动化集成Pipeline整合DockerK8S


同系列举荐

  • 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/v1
kind: Deployment
metadata:
  name: k8s-app-deployment
  labels:
    app: k8s-app
spec:
  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: v1
kind: Service
metadata:
  name: k8s-app-service
  labels:
    app: k8s-app
spec:
  type: NodePort
  ports: 
    - port: 8080
      targetPort: 8079
  selector:
    app: k8s-app
EOF
                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-parent
Wiki·地址
https://gitee.com/cicadasmile/butte-java-note

退出移动版