现在的公司很多都是使用的集群部署服务,少则几台虚拟机,多则几百上千台虚拟机,有时候需要对一个集群或者多个集群集中进行运维操作,那么这个时候,Ansible就可以实现批量操作了。
关于服务的自动化部署的方式有很多种版本,笔者接触到的自动化平台主要包括以下几种:
- 以Ansible脚本为主导而搭建的自动化部署升级平台;
- 以类似Jenkins流水线而搭建的自动化构建和部署平台;
- 以SDK包为基础,以Python脚本执行主导的运维平台;
- Docker容器+编排;
本文主要分享一下使用ansible自动化安装docker和docker-compose的经验。
ansible的管理机必须安装python2,但是有个非常重要的点,那就是Windows不可以当做管理机,主机系统可以是 Red Hat,Debian,CentOS,OS X,BSD的各种版本。
使用pip安装
由于ansible是一个python写的包,所以可以直接当做一个普通的第三方库来安装,直接运行命令安装即可:
使用yum或者apt-get安装
ansible也可以直接使用系统的包管理工具来安装,比如CentOS的yum命令:
Ubuntu系统的apt-get命令:
这个命令可以指定一个操作的用户,后续需要输入用户的密码和sudo命令。
由于ansible有很多非常有用的模块和命令可以使用,但是没有人能够全部记住每个模块命令,但是ansible有一个非常有用的命令使用查询文档,直接使用命令就可以查看某个模块的用法,还有例子:
ansible-playbook 目录结构
下面是一个ansible-playbook项目的基本目录结构,具体的目录和文件作用已经注释出来:
ansible安装docker
笔者写了一个使用ansible自动化安装docker的剧本,
项目地址:https://github.com/Hopetree/ansible-demos/tree/master/install_docker
适合于在CentOS系统上面执行docker的安装。这个剧本做的事情包括判断docker是否可以用,然后包括安装docker,添加用户到docker组,安装pip和docker-compose等。剧本目录如下:
尽量使用内置模块
所谓尽量使用内置模块的意思是当可以使用shell模块执行命令也可以使用内置的模块执行命令的时候应该尽量使用内置模块,比如下面这种,前面一种是使用命令行来安装包,后面一种是直接使用yum模块:
还有下面这种直接使用pip模块的:
register+when的使用
register可以用来把一个步骤的执行结果赋值到一个变量中,而when就可以用来判断一个变量的结果,所以通常可以把这两个模块结合起来使用。比如下面这段,第一个步骤是使用docker -v命令查询docker版本,然后第二个步骤判断当docker不可用的时候就执行docker安装。
执行结果
来源:https://cloud.tencent.com/developer/article/2123531