zoukankan      html  css  js  c++  java
  • k8s结合jenkins部署docker项目

    jenkins的可伸缩部署方式,一种是基于Docker(或者docker-swarm 集群)的部署方式,另外一种是基于kubernetes的部署方式。

    由于基于kubernetes也是基于docker的,都需要用到docker进行通信和中转,因此使用同一的slave镜像将大大节省平台开发与维护成本,因此需要引入jenkins的另一个大插件pipeline。Pipeline也是jenkins 2.0以后的主要方向和升级。

    jenkins介绍及传统部署遇到的问题

    Jenkins 是开源的一套持续集成框架,可以进行大规模的编译、测试和发布的工作,给软件开发团队带来极大的便利性。

    Jenkins 的持续集成环境可以是集群化的,主要的运行模式为master-slave模式。

    Jenkins 的master为Jenkins系统的控制节点,slave节点负责具体的项目编译测试等工作。

    由于大公司里面需要进行编译的工程或者对象非常庞大,因此需要大量的物理节点作为slave,而且这些环节相对固定,可能很难适应其他项目的编译测试,一旦salve节点遭到破坏,需要人为的进行修复甚至重建,非常麻烦。

    Docker 来解决问题

    Docker的问世,为我们提供了解决方案,使用docker作为jenkins slave节点可以解决slave节点遭到破坏后遇到的问题, 而且大量的工程不是每时每刻同时运行的因此可以在需要时吧docker拉起来进行编译测试,这样就节约了大量的物理节点, 解决了上述问题。

    然而使用docker 同样需要集群,因此要用到集群管理工具, swarm 或者kubernetes。Swarm 一般用在小集群上,而且swarm和docker本身的接口完全一致, 因此这里就简单介绍单点docker节点作为slave。 Kubernetes作为大的docker 集群管理工具,当jenkins的工程数量非常大的时候可以用kubernetes, kubernetes的运维相对比docker 和swarm的门槛要高一点。

    Jenkins master也可以使用docker来运行或者使用kubernetes来提供高可用的jenkins master。本文不对jenkins master的安装和docker运行做过多的说明。

    kubernetes 管理Jenkins slave

    Kubernetes 主要是用来进行docker 调度运行的,同样因为这一点通过kubernetes插件的配置,不需要管slave节点是否在线,因为kubernetes帮你负责创建和连接。这样就可以做到没有任务的时候没有任务slave节点在线,做到完全的按需启动slave和调度slave。

    使用kubernetes 部署管理的jenkins slave如下:

    Jenkins master 的部署

    1)物理机上安装步骤见上篇随笔

    2)使用docker安装运行

    docker search jenkins
    docker pull jenkins/jenkins:lts 
    docker images  查看拉取的镜像
    mkdir /home/jenkins_home  #创建一个jenkins目录
    
    #启动jenkins容器
    docker run -d --name jenkins_01 -p 8080:8080 -v /home/jenkins_01:/home/jenkins_01 jenkins/jenkins:lts ;

    https://hub.docker.com/_/jenkins/  可以下载到jenkins master镜像

    jenkins系统初始化安装插件

    首先配置涉及站点,默认的是 官方的:http://updates.jenkins-ci.org/update-center.json

    也可以配置日本的或者俄罗斯的 http://mirror.esuni.jp/jenkins/updates/update-center.json

    http://mirror.yandex.ru/mirrors/jenkins/updates/update-center.json

    配置完以后必须点右下角的立即获取

    也可以在可选插件哪个页面的下面点击获取。

    我们这里需要找的是kubernetes的插件和docker的插件进行安装,如果安装过程中有些插件安装失败,则手动下载插 件然后再高级里面选择上传插件进行安装:

    使用docker运行jenkins slave并连接到master 

    Jenkins master 连接slave 有两种模式,一直是master主动发起连接,主要通过ssh 来进行连接,另外一种是slave 主动连接master,使用的jnlp协议

    我们使用docker来运行jenkins slave 都可以,但是要做到没有任务在编译测试的时候没有slave在线  则只能通过 jnlp来进行连接而去必须使用kubernetes来调度。

    我们这里讨论的是使用单独的或者几个slave长期在线,进行项目的编译测试,都是由master发起连接的。

    https://hub.docker.com/u/jenkinsci/    slave镜像下载地址上

    docker 运行jenkins slave (ssh 模式)

    这种模式docker 运行一个slave 容器跟普通物理机使用完全一致,这里不做说明。

    同样可以再在同一个slave节点(docker 容器)上绑定很多个工程或者任务。

    docker jenkins slave (jnlp 模式)

    Jnlp 模式的则相对应用的比较少,jnlp 是由jenkins slave节点(物理节点,虚机或者容器均可)发起连接的, 会根据配置的jenkins master的url , Jenkins连接的token和jenkins slave name( lable)来进行进行连接。

    举个例子:

    登录jenkins-->系统管理-->节点管理-->新建节点

    那么slave 进行运行连接的时候4个参数是:

    1.      –url

    2.      http://172.25.8.10:9080

    3.     54cf091374806d8db7b9cd3977e23d080c955fa6fa33dd6c33dd594aa7b79350

    4.    jnlp_test

    Jenkins-slave –url http://172.25.8.10:8090 54cf091374806d8db7b9cd3977e23d080c955fa6fa33dd6c33dd594aa7b79350 jnlp_test
  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/lanist/p/13188483.html
Copyright © 2011-2022 走看看