目前测试环境开始尝试使用Mesos+Marathon+Docker,将服务的搭建部署容器化。在搭建部署服务的过程中,也少不了对持续化继承工具Jenkins的使用。老的一套Jenkins使用的是固定Jenkins slave节点来构建任务,当构建任务多的时候,总是会出现排队等待的现象。为了改善这种情况,在网上找到了Jenkins On Mesos的解决方案。Jenkins Master可以在构建时根据实际需要动态的向Mesos申请slave节点,并在构建完成的一段时间后将节点归还给Mesos。借用网上的一张架构图来了解一下它的实现原理:
这里写图片描述

ebay好像早在2014年就开始用这个方案,当时的Mesos的版本也比较低,现在国内的数人云去哪儿网等也在使用了。Jenkins On Mesos的实现主要是使用了Jenkins的一个Mesos Plugin的插件,接下来整理下这个插件是怎么配置的。

1 安装Jenkins的mesos插件

首先,需要在Jenkins上安装mesos插件,这个非常简单,就不过多说明。(Jenkins我是在centos7的docker镜像基础之上做的一个新镜像运行的。)

2 配置Mesos Cloud信息

mesos插件安装好之后,从Jenkins的 系统管理 -> 系统设置 进入设置页面,在最下面会出现一个新增一个云的选项,点这个下拉选项选择Mesos Cloud就会出现如下的界面:
这里写图片描述
这个界面上有几个主要的信息一定是要填写的:
1. Mesos native library path
这里是要填/usr/lib/libmesos.so,但是如果没装mesos的话是不会有这个文件的。要是直接拷贝一个libmesos.so放到这个目录也是不好用的,所以,我是在Jenkins Master的容器镜像里面也安装了mesos来解决这个问题。
2. Mesos Master
这里填Mesos Master地址即可,可以是zk://…/mesos的方式,也可以是单个ip:端口的方式。
3. Slave username
默认好像填的是jenkins,这里我直接改成root。
4. Jenkins URL
填自己的Jenkins Master的访问地址即可。

配到这里并没有结束,点开上图右下角的高级…就会看见还有一些配置项,是用来配置slave info用的。
这里写图片描述
这里也有几个需要注意的地方:
1. Checkpointing
这里选Yes,之后就会在Mesos的Framework信息界面看见Jenkins Scheduler的信息。
2. Label String
这是为Mesos Cloud起一个label名字,这个名字在以后创建Jenkins任务,指定运行的节点时会用到。

其他的信息,搭建可以看提示信息,根据自己的需要适当修改。接着,再点开上图所示右下角的高级…按钮,会出现docker容器的设置信息。
这里写图片描述
这里写图片描述
1. Use Docker Containerizer
这一项是问是否使用容器,将其勾选。
2. Docker Image
填写用来运行Jenkins slave的docker镜像。
3. Networking
有Host和Bridge两种方式,我这里用的是Bridge方式(Host方式的我还没有试过)。
4. Port Mapping
端口映射,填写自己想要映射的服务端口。
5. Volumes
参考数人云分享的经验,挂载 /usr/bin/docker /var/lib/docker /sys/fs/cgroup /var/run/docker.sock这几个目录后,在容器内部就可以操作主机上的Docker环境,使Jenkins Slave 可以在容器内部进行一些Docker Build,Docker Run,Docker Push等工作,所以我也进行了挂载。

到这里,Mesos Cloud需要配置的主要信息差不多都配置完毕了。其他可以根据自己的实际情况进行修改和调整。

3 配置Jenkins任务

Mesos Cloud配置完之后,Jenkins任务怎么用它呢,这里简单介绍一下。
这里写图片描述
这里写图片描述
如图所示,在Restrict where this project can be run下面的Label空栏里填上之前Mesos配置信息中Label String对应的名字。如果没有问题的话,下面就会出现一条提示信息:Label is serviced by no nodes and 1 cloud。这表明指定的是一个cloud,而不是某个固定的节点。
在下面的构建环境里面,选上Mesos Single-Use Slave,在构建里面执行一条while循环语句来试验下效果。点击构建之后,可以看到如下结果:
这里写图片描述
从图中可以看出,Jenkins Master已经从Mesos的资源池里动态调度到一个节点来执行Jenkins的构建任务。这时,在Mesos Master界面上也能看到该节点的信息:
这里写图片描述
等到Jenkins任务执行完成之后,Mesos便会将该节点资源收回:
这里写图片描述

以上便是Jenkins On Mesos的配置和使用方法,如何有效的去使用,还需要结合实际场景。

发表评论

邮箱地址不会被公开。 必填项已用*标注