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

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

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

一、背景描述

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

二、流程设计

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

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

核心步骤:

  • 创建yaml文件类型资源管理脚本;
  • 执行已部署资源的删除;
  • 根据脚本创建新的资源服务
    [En]

    create a new resource service according to the script*

该流程衔接在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 2 10 8079 8080 --- apiversion: apps v1 kind: deployment metadata: name: k8s-app-deployment labels: app: k8s-app spec: replicas: selector: matchlabels: template: containers: - image: cicada-image doc-line-app:latest imagepullpolicy: never ports: containerport: service k8s-app-service type: nodeport port: targetport: eof cat k8s-app.yaml echo "create success" "base yaml file deploy k8s resource" ls sleep set +e kubectl delete -f -e create ''' } < code></eof>

脚本说明:

  • 进入k8s的工作目录;
  • 创建 k8s-app.yaml部署的脚本文件;
  • 声明Pod的副本数为:2;
  • 尝试按照脚本删除资源一次
    [En]

    try to delete the resource once according to the script*

  • 根据脚本创建资源;
  • set +e-e为shell语法,控制脚本是否中断;

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

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

3、流程总结

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

整个过程涉及以下核心阶段:

[En]

The following core stages are involved in the entire process:

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

这里简化了许多不必要的过程,但在实际应用中,它远远比案例中的演示复杂得多。根据每项业务的需求,我们可以参考管道组件的功能文档,不断推出更好的方法来优化流程。最终,将形成一个连续交付的自动流程,并且在代码级别将不会有任何转换成本。

[En]

Many unnecessary processes are simplified here, but in practical applications, it is far more complex than the demonstration in the case. according to the needs of each business, we can refer to the functional documents of pipeline components and constantly introduce better ways to optimize the process. eventually, an automatic process of continuous delivery will be formed, and there will be no cost of transformation at the code level.

同系列推荐

四、源代码地址

GitEE&#xB7;&#x5730;&#x5740;
https://gitee.com/cicadasmile/butte-auto-parent
Wiki&#xB7;&#x5730;&#x5740;
https://gitee.com/cicadasmile/butte-java-note

Original: https://www.cnblogs.com/cicada-smile/p/15786796.html
Author: 知了一笑
Title: 自动化集成:Pipeline整合Docker+K8S

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524188/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 阿里云函数-爱奇艺签到

    简介 是否支持多账号:是消息推送平台:PUSHPLUS 代码 -*- coding: utf8 -*- import requests,random,string,hashlib,…

    Linux 2023年6月7日
    083
  • linux添加磁盘及分区挂载

    磁盘管理 1.为什么要添加磁盘 2.系统添加磁盘并分区 磁盘管理 1.为什么要添加磁盘 随着系统的使用,磁盘的内容会越来越少,所以有必要添加磁盘来增加空间。 [En] With t…

    Linux 2023年5月27日
    089
  • linux之ifconfig查看ip

    ifconfig 用于显示或设置网络设备。 设置网络设备的状态和信息 [En] set the status and information of network devices*…

    Linux 2023年5月27日
    0126
  • kafka 在 zookeeper 中保存的数据内容

    转载请注明出处: 服务器上下载 kafka : wget https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-3.2.0….

    Linux 2023年6月14日
    096
  • Shell语法

    在 Shell 中引号分为 2 种:单引号、双引号。 ( 1 )双引号 由双引号括起来的字符,除 $ 、倒引号和反斜线( \ )仍保留其特殊功能外,其余字符通常作为普通字符对待。 …

    Linux 2023年5月28日
    085
  • Shading-JDBC、ShadingSphere、ShardingProxy 使用详解

    ShadingSphere ​ShardingSphere是一款起源于当当网内部的应用框架,2015年在当当网内部诞生,2016年由主要开发人员张亮带入京东数科,在国内经历了当当网…

    Linux 2023年6月6日
    0134
  • DHCP服务

    一、dhcp介绍 dhcp 应用层协议 动态主机配置协议 作用: 为主机动态分配tcp/ip参数(ip地址、掩码、网关、DNS服务器地址) Linux实现dhcp服务 软件: dh…

    Linux 2023年6月7日
    082
  • 记录一次shell脚本环境全局变量在函数内部生效问题

    背景 计划核对内网IP的使用情况,所以写了个小脚本扫描有哪些IP还在使用。执行脚本过程中发现函数中一直获取不到变量的值,排查后将结论记录下来。 问题现象 已经配置了全局变量,但是在…

    Linux 2023年6月14日
    094
  • SQL52 获取employees中的first_name

    本题链接表结构如下所示(内容不完整):额外的要求是按照first_name最后两个字母升序进行输出。这里需要用到MySQL的字符串处理函数RIGHT。RIGHT函数的语法如下所示:…

    Linux 2023年6月13日
    0111
  • 【MQTT】iniparser库的安装和使用

    iniparser库 * – iniparser库介绍 – 下载库 – iniparser中的API – dictionary中的一…

    Linux 2023年6月13日
    096
  • neovim环境与vim简单使用

    Github仓库 neovim的配置 这里列出我自己使用的 init.vim,如果插件无法安装,请按照github仓库中给出的解决方法解决(手动clone安装即可)。参考了gith…

    Linux 2023年6月8日
    099
  • python2.6.6安装Image模块

    python2.6.6安装Image模块1、下载Image模块源码地址:http://www.pythonware.com/products/pil/index.htm2、加压文件…

    Linux 2023年6月14日
    087
  • Centos 7 升级内核

    【背景说明】 在公司进行部署产品时,发公司内部的服务内核资源并不能满足于产品部署条件,于是我和内核就进行了一场风花雪月般的交互,在操作前,本人小白一枚,就在浩瀚的互联网海洋中搜索升…

    Linux 2023年5月27日
    0100
  • Emacs Lisp 入门

    ;; This gives an introduction to Emacs Lisp in 15 minutes (v0.2d);;;; 英文原作者: Bastien / @bz…

    Linux 2023年6月13日
    0105
  • Django orm的managed参数

    Django orm的managed参数 如果一张表不是在django的models.py中创建表,而是该表由cmd或者Navicat或者其他方式创建的,或者该表是一个视图,那么也…

    Linux 2023年6月14日
    082
  • WPF 已知问题 Popup 吃掉 PreviewMouseDown 事件

    在 WPF 中,使用 Popup 也许会看到 PreviewMouseDown 事件被吃掉 因为 PreviewMouseDown 是 RoutingStrategy.Direct…

    Linux 2023年6月6日
    0123
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球