自动化集成:Pipeline整合Docker+K8S

简介: 可以根据各个业务的需要,参考流水线组件的功能文档,不断引入更好的方式去优化流程,最终会形成一个持续交付的自动流程,并且不会对代码层面带来改造成本。
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作; 本篇文章主要描述流水线集成K8S用法

00-0.png

一、背景描述

分布式服务的部署是一个复杂的流程,当容器应用存在几十甚至上百的时候,用手动的方式部署显然难度过高,借助Kubernetes容器编排引擎,可以快速的实现自动部署,扩展,升级等一系列复杂步骤。

二、流程设计

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

06-1.png

核心步骤:

  • 创建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接口判断环境是否通顺:

06-2.png

3、流程总结

06-3.png

在整个流程中,涉及下面几个核心阶段:

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

这里简化很多不必要的流程,在实际的应用中,远比案例中的演示更复杂,可以根据各个业务的需要,参考流水线组件的功能文档,不断引入更好的方式去优化流程,最终会形成一个持续交付的自动流程,并且不会对代码层面带来改造成本。

四、源代码地址

GitEE·地址
https://gitee.com/cicadasmile/butte-auto-parent
Wiki·地址
https://gitee.com/cicadasmile/butte-java-note
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
14天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
151 77
|
1天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
16 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
23天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
43 9
|
1月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
25天前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
44 1
|
25天前
|
Kubernetes 开发者 Docker
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
1月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
Kubernetes 负载均衡 Linux
Docker从入门到掉坑(四) 国内搭建k8s避坑指南
Docker从入门到掉坑(四) 国内搭建k8s避坑指南
453 0
|
存储 JSON Kubernetes
Docker从入门到掉坑(五):继续挖一挖 k8s
Docker从入门到掉坑(五):继续挖一挖 k8s
Docker从入门到掉坑(五):继续挖一挖 k8s
|
Kubernetes 负载均衡 Linux
Docker从入门到掉坑(四):上手k8s避坑指南
Docker从入门到掉坑(四):上手k8s避坑指南
Docker从入门到掉坑(四):上手k8s避坑指南