CentOS7.4构建Docker swarm部署Jenkins Configuration as code
话说如果把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
大功告成...
本文链接:http://www.showerlee.com/archives/2842
继续浏览:
还没有评论,快来抢沙发!