ansible是基于Python的 自动化部署 方案,但是目前只是通过命令行
ansible -i hosts all -a 'uptime' # or ansible-playbook -i hosts playbook.yml -e 'args' -t deploy
实现自动化部署.
长此以往,虽然可以实现所谓的自动化,但产品业务线多且杂的情况下,项目很难维护,更不用说以文件为存储的表现形式很差,针对目前使用ansible的经验以及使用中的困难,可以针对性的提出一些解决方案
加速
问题
自动化部署其中最大的障碍就是 网络 的原因
其中需要通过网络上传一些模板文件,有的甚至还需要上传一些压缩包,虽然说几MB的东西很快就能上传成功,但如果把这上传文件所需要的2秒乘以上百,上千台主机呢,更不用说ansible的表现形式就是一个任务一个任务的往下执行,假如在上传模板这一步卡住(等待所有服务器上传成功),这时某台未模板化的服务器的某服务需要重启,是不是会出问题呢
方案
针对这一问题,目前想到的解决方案如下:
- 适当增加fork数
目前fork数默认为50,可以适当增加
- 大文件使用内网(外网)下载
从部署机上上传文件可能会出现这样那样的问题,尤其是上传到国外服务器时经常会出现ansible playbook的任务卡住问题(其实是正在以几KB/s的龟速运行),所以其中大于xxMB的文件(压缩包)全部使用从远程服务器上下载方式,并且全部进行加密处理
- 把超过几百台服务器的节点分组多进程运行
服务器一旦多了,对应任务的等待时间也就多了,所以将500台的节点分为十组,每组50台,使用多进程分别同时运行,这样可以有效减少任务等待时间,需要注意每组运行失败的服务器。
- 把经常出问题或者网络不太好的节点放到最后运行
像中国移动以及香港,国外的某些节点在运行ansible playbook的时候总会或多或少的出些问题,这些节点可以考虑放到最后,并且需要找出问题原因进行优化
目标
web界面
使用过ansible的同学一定知道ansible-tower,它是ansible的web方式部署,通过web界面就可以添加删除任务,并且运行ansible playbook,可惜,它是收费的 /捂脸
任务队列
把ansible playbook放到任务队列里,由消费者去消费对应的任务
未完待续...