欢迎访问www.showerlee.com, 您的支持就是我前进的动力.

CentOS7.4构建Docker swarm部署Jenkins Configuration as code

showerlee 2019-06-14 22:01 DevTools, Docker, 其他 阅读 (7,831) 抢沙发

话说如果把Jenkins作为一只可爱的宠物, 部署及配置Jenkins是一个及其复杂和头痛的过程,我们作为铲屎官需要给这只名叫Jenkins的爱宠从打生下起都要进行细心的呵护, 在Web UI给他装插件, 配slave节点, 配环境变量, 配CI工具, 配后台管理权限等等,说实话你不写个自动化shell或者ansible你都不好意思跟你同行打招呼.

不过作为我们DevOps, 不是所有语言都能拿得起放得下(自黑), 在写自动化脚本过程中势必要跟我们的Jenkins本家groovy脚本语言打交道, 这玩意可是直接能够调用Jenkins API的敲门砖, 但是前提你能玩得转他的API doc, 本铲屎官给Jenkins铲屎已经够意思了, 还让我去研究如果优雅的铲屎, 不留一丝痕迹? 

这里多亏了Docker swam和JCasC, 他们组合起来就能把我们可爱的Jenkins小宠宠瞬间打回一只可以被随时替代的小牛, 我们可以不必一天在给Jenkins遛弯的过程, 怕他走丢啦, 怕他肚子吃坏啦, 怕他被人欺负了, 给他打一针JCasC, 扔进Docker Swarm牛圈, 瞬间变成一只可被随时打入冷宫的小牛, 想怎么玩就怎么玩, 玩坏了分分钟扔掉并直接给他再克隆一只, 是不是很神奇?

闲话不多说, 其实宠物和牛对应的就是可变基础设施与不可变基础设施, 具体的基础设施我们可以拿vm与docker做比较.

基础设施vs不可变基础设施:

基础设施服务器会不断更新和修改。使用此类基础架构的工程师和管理员可以通过SSH连接到他们的服务器,手动升级或降级软件包,逐个服务器地调整配置文件,以及将新代码直接部署到现有服务器上。换句话说,这些服务器是可变的; 它们可以在创建后进行更改。

不可变基础设施: 他们部署了服务器之后决不会被修改。如果需要以任何方式更新,修复或修改某些内容,则会根据具有相应更改的公共映像构建新服务器以替换旧服务器。经过验证后,它们就会投入使用,而旧的则会退役。

比起传统的虚拟机基础环境, 使用docker本身就能让我们节省资源的同时快速构建我们的应用, 他的持续集成、版本控制、可移植性、隔离性和安全性能够让我们摆脱传统的可变基础设施(宠物), 让我们不必去在对他创建后进行任何配置更改, 只需要把他当做牛一样, 所有的配置都在牛(镜像)使用前进行版本配置变更, 使用时直接扔到docker swarm, 做到召之即来挥之即去, 降低我们的运维成本.

这里的Jenkins CasC plugin对我们的Jenkins在不可变基础设施中又做了一次二次优化, 他让我们原本需要去在我们的自动化脚本内嵌入groovy语言变成了历史, 我们只需要按照插件的语法格式编写一个human readable的yaml文件并嵌入Jenkins docker启动, 他就能自动化帮我们完成装插件, 配slave节点, 配环境变量, 配CI工具, 配后台管理权限等工作, 真正做到快速版本迭代更新, 节省了我们大量版本更新时花费的人力物力.


OK, Let's rack and roll...

安装环境

system: CentOS 7.4 x64

Docker: 17.12.0-ce

Jenkins docker image: 2.164.1

Docker manager node:  192.168.0.102

Docker worker1 node:   192.168.0.102

Docker worker2 node:   192.168.0.104

一. 系统环境配置

1.关闭iptables和selinux

# su - root

# systemctl stop firewalld

# setenforce 0

# vi /etc/sysconfig/selinux

修改

SELINUX=disabled

2.在三台节点分别添加本地host DNS

# vi /etc/hosts

192.168.0.102  manage
192.168.0.103  worker1
192.168.0.104  worker2

3.更改对应系统主机名
Manager:
# hostnamectl set-hostname manager
Worker1:
# hostnamectl set-hostname worker1
Worker2
# hostnamectl set-hostname worker2

二. 安装Docker Engine

1. 下载yum镜像源

# wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker.repo

2. 安装docker engine

# yum install docker-ce –y

3.启动docker service 

# systemctl start docker
# systemctl enable docker

4.创建docker manager节点(manager)

# docker swarm init --advertise-addr 192.168.0.102

Swarm initialized: current node (viwovkb0bk0kxlk98r78apopo) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3793hvb71g0a6ubkgq8zgk9w99hlusajtmj5aqr3n2wrhzzf8z-    1s38lymnir13hhso1qxt5pqru 192.168.0.102:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

5.加入worker节点到manager节点(worker1, worker2)

# docker swarm join --token SWMTKN-1-3793hvb71g0a6ubkgq8zgk9w99hlusajtmj5aqr3n2wrhzzf8z-1s38lymnir13hhso1qxt5pqru 192.168.0.102:2377

6.查看节点连接信息

# docker node ls

ID                            HOSTNAME           STATUS              AVAILABILITY        MANAGER STATUS
viwovkb0bk0kxlk98r78apopo *   manager            Ready               Active              Leader
yf6nb2er69pydlp6drijdfmwd     worker1            Ready               Active              
yyavdslji7ovmw5fd3v7l62g8     worker2            Ready               Active         

7.在docker swarm下创建http服务

# docker service create -p 80:80 --name webservice --replicas 5 httpd

ID                  NAME                IMAGE               NODE               DESIRED STATE       CURRENT STATE       ERROR           PORTS
xsa5wb0eg2ln        webservice.1        httpd:latest        manager            Running             Running about 10 minutes ago                                       
3sbscs7m9lnh        webservice.2        httpd:latest        worker2            Running             Running about 10 minutes ago                                      
yao2m5wi54kz        webservice.3        httpd:latest        worker2            Running             Running about 10 minutes ago                                 
dfg2mswa52sf        webservice.4        httpd:latest        worker1            Running             Running about 15 seconds ago                                 
kah1j5hs14as        webservice.5        httpd:latest        worker1            Running             Running about 15 seconds ago                                 

8.测试http站点

# curl 192.168.0.102

It works...

三.在docker swarm下构建Jenkins cluster with configuration as code

详见作者的github仓库

https://github.com/showerlee/docker-compose-with-JCasC

大功告成...

正文部分到此结束
版权声明:除非注明,本文由(showerlee)原创,转载请保留文章出处!
本文链接:http://www.showerlee.com/archives/2842

继续浏览:

还没有评论,快来抢沙发!

发表评论

icon_wink.gif icon_neutral.gif icon_mad.gif icon_twisted.gif icon_smile.gif icon_eek.gif icon_sad.gif icon_rolleyes.gif icon_razz.gif icon_redface.gif icon_surprised.gif icon_mrgreen.gif icon_lol.gif icon_idea.gif icon_biggrin.gif icon_evil.gif icon_cry.gif icon_cool.gif icon_arrow.gif icon_confused.gif icon_question.gif icon_exclaim.gif