ADCloud系统的DevOps工具链实践--系列二
Posted 麒麟敏捷社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ADCloud系统的DevOps工具链实践--系列二相关的知识,希望对你有一定的参考价值。
本期,小编给大家带来ADCloud系统的DevOps工具链实践系统的第二篇,Jenkins高可用在ADCloud系统上的具体实践。
Jenkins是最好的持续集成工具之一,它既强大又灵活。基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。拥有众多的可扩展性,插件,api,成熟度高。
Jenkins使用上的问题
1. jenkins 服务可用性不能保障:使用虚机搭建方式,无法保证Jenkins高可用。原因:Jenkins使用的社区版没有办法弄集群,只能通过监控的方式检测应用可以行。
2. 不停的通过增加虚机:ADcloud不断的接入业务系统,单台Jenkins已不能支持满足当前的需求,需申请新的虚机搭建Jenkins。
3. 分配jenkins资源不合理:按照单台Jenkins 最多可以接入50个业务系统的规模进行扩展,由于每个业务系统编译时需要的内存不同,每台Jenkins主机压力不同。
问题4:Jenkins主机之间编译环境出现差异:由于业务系统之间的编译语言和版本不一致,为了适应这种需求需要不停安装新的编译软件适配不同的编译工具,导致管理混乱。
因此 Jenkins容器化是唯一可选之路。
Jenkins如何容器化
采用Jenkins、Mesos和Marathon搭建高可用服务,下面通过两张架构图来了解下具体实现原理:
Marathon执行流程
marathon集群是来保证jenkins Master的单点故障,实时监控jenkins Master,一旦服务不正常可以立马重启jenkins Master。
Jenkins执行流程
Jenkins Master在作业构建时根据实际需要动态的向Mesos申请slave节点,并在构建完成的一段时间后将节点归还给Mesos。
ADCloud搭建过程
1.首先做个Jenkinsmaster 镜像,可以自己通过dockerFile,也可以直接去docker hub网站上下载。通过marathon 把Jenkins master 拉起来。
2.配置JenkinsMaster实现弹性伸缩。配置Jenkins Master实现弹性伸缩
这个界面上有几个主要的信息一定是要填写的:
Mesosnative library path 这里是要填/usr/lib/libmesos.so,
3.配置Jenkins Slave标签
红框是设置的标签可以区别salve。
4.接下来 制作Jenkinsslave镜像,按照自己的需求制作。制作完成设置docker化的jenkins-slave,勾选Use Docker Containerizer。
5.信息填写完成之后,测试Jenkins是否在Mesos上注册成功,访问mesos页面可以找到jenkins Framework。
6.接下来是Jenkins job的配置,在Restrict where this project can be run选择 mesos 配置里的标签就可以使用了。
7.保证数据一致性。搭建nfs实现jenkins-salve之间数据共享。
Adcloud Jenkins 容器化之后的整体架构图:
其中marathon集群是来保证jenkins Master的单点故障,实时监控jenkins Master,一旦服务不正常可以立马重启jenkins Master,而Jenkins Mster通过mesos集群来执行job。
目前Mesos集群有四个Mesos Slave节点资源,资源上报到Mesos Master,Mesos Master收集到这些资源之后把这些资源再提供给Marathon和Jenkins Master。如果Marathon需要发任务启动Jenkins Msater,把这个任务发送给Mesos Master,之后Mesos Master去找指定的Slave起Marathon的任务。这是Marathon的任务启动过程。Jenkins Master要跑一个job,Mesos Master同样提供资源给Jenkins Master,提供的资源包括了Marathon 任务使用剩下的资源,Jenksin Msater的任务再通过Mesos Master去Mesos Slave中起docker来执行。
由上可知编译环境已经容器化,但所有的编译环境采用同一镜像,而不同的业务系统所需的编程语言依赖的编译工具和运行资源内存要求不一样,如果用到工具就加到镜像中去,这样镜像会变得很厚重。所以为了解决这种问题,我们采用下述方法:
按资源规格制作:按照cpu个数和内存大小指定同规格大小的镜像。
按编译环境制作:按照不同的编译环境制作镜像,如:Java,c++,python,go,js等制作不同的镜像。
镜像用Harbor管理。它是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
ADCloud分配标签大致方案:
1.Mesos slave 标签设置:制作完这些镜像要使用起来,需要在Jenkins master进行配置:
2.在数据库中配置Mesos slave 标签;
3.在应用下新建流水线时,选择相应的编译工具、版本 和内存大小等信息,根据选择的这些信息,后台计算出需要的镜像类型然后生成相应的Jenkins job 配置。
麒麟系统实践效果
由于 Jenkins Master可以在构建时根据实际需要动态的向Mesos申请slave节点,并在构建完成的一段时间后将节点归还给Mesos。
目前Jenkins 资源利用图:
蓝色:在线的slave数量
红色:正在使用的slave数量
黄色:可用且空闲的slave数量
蓝色数量 = 红色 + 黄色
由上图可知Jenkins资源是有空闲的。它解决了我们的问题1,2。而制作多镜像并设置mesos多标签解决了我们问题3,4。
总 结
Jenkins容器化为我们很好的解决了问题,同时nfs模式保证了Jenkins-salve之间数据一致性。对于Jenkins job, 为了防止主机上Jenkins job的丢失,我们把配置文件存放在数据库中。 jenkins不单要容器化,还要合理的编排利用,达到最佳效果。
·END·
与君共享
以上是关于ADCloud系统的DevOps工具链实践--系列二的主要内容,如果未能解决你的问题,请参考以下文章
CODING DevOps 系列第一课:基于开源工具链打造持续交付平台