一、Ansible介绍
Ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible和目前市面上一些其它的项目管理工具有很大的不同,它的设计初衷就是为了更方便、快捷的进行配置管理。它易于安装和使用、语法也非常简单易学。你可以用Ansible将平常复杂的配置工作变得简单,变得更加标准化更容易控制。如果需要的话,你可以在不止一个地方控制你的整个基础架构。
Ansible是一个简单的自动化运维管理工具,可以用来自动化部署应用、配置、编排 task(持续交付、无宕机更新等), Ansible只需要在一台普通的服务器上运行即可,不需要在被管控的服务器上安装客户端。因为它是基于SSH的,Linux服务器离不开SSH,所以Ansible不需要为配置工作添加额外的支持。 你可以通过命令行来使用Ansible,运行Ansible的服务器这里俗称“管理节点”;通过Ansible进行管理的服务器俗称“受控节点”。
对于用saltstack或puppet的人来说,Ansible是一款很好的基于SSH方案的替代品,他能够大大简化Linux管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成。其命令行机制同样非常强大,可以使用Web UI实现授权管理与配置,当然免费的很有限制的。
Ansible特性总结:
基于Python语言实现,其巧妙地通过SSH进行管理节点,被管理端无需Agent,使用起来非常方便。Ansible巧妙地利用了现有的组件进行组装称一个完整的系统,如利用:
Paramiko组件(Python的SSH连接库)
PyYAML组件(Python的YAML解析器库)
Jinja2组件(Python的模板引擎库)
受控节点如果是Python 2.4 或 Python 2.5 ,则需额外安装Simplejson模块。到Python的2.6或以上版本,就则内置了Simplejson模块,不需要额外安装任何其它依赖。值得欣慰的是,目前主流的服务器上内置的Python版本绝多数都是Python 2.6以上版本。
二、Ansible核心组件
Ansible在管理节点将Ansible模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完之后自动删除,可以使用SVN等来管理自定义模块及编排。
Host Inventory:定义ansible管理的主机,可以进行分组管理。
Core Modules:Ansible核心模块,ansible中模块就是用来指定对远程主机具体的操作,比如执行命令模块command、创建文件模块file等(ansible自带的模块)。
Custom Modules:自定义模块,如果核心模块不足以完成某种功能就可以使用任何语言自定义模块。
Connection Plugins:连接插件是Ansible用来连接被管理端的一种方式,比如客户端运行了SSH服务,Ansible利用SSH服务跟客户端进行通信,Ansible是通过Python编写的,而Python有一个模块paramiko支持并行连接SSH。Ansible事实上就是使用paramiko进行连接被管理端。但是它还支持其他的连接方法需要插件(如zeroMQ就是C/S模式工作)。
Plugins:第三方插件支持,如email、logging模块,只要有Python编写能力就可以自行编写插件。
Playbooks:剧本或编辑是Ansible的任务配置文件、将多个任务定义在剧本中由Ansible自动执行,Playbooks最大的好处就是支持幂等,也就是说相同的任务不管执行多少次其结果是不变的,带来的好处也就是持续可维护性。
三、安装Ansible
通常大家都喜欢用各个系统自带的包管理工具去安装和维护软件包。但这样,你并不一定能获取到最新或最可靠的Ansible版本。所以,建议你使用pip来安装和管理Ansible。
Pip是专门用来管理Python模块的工具,Ansible会将每次正式发布都更新到pip仓库中。所以通过pip安装或更新Ansible,会比较稳妥的拿到最新稳定版。需要注意的是安装pip之前要先安装setuptools工具,使用setuptools工具带的命令easy_install去安装pip,具体可以看python部分。
如果你已经基于Ansible开发大量模块,你最好一直使用对应版本。此时不建议你升级到最新版本,以免由于不兼容等问题导致模块功能异常。
第一种:使用YUM安装Ansible
使用YUM安装Ansible时需要配置epel源才行,能帮你自动解决软件包的依赖关系。
1 2 |
$ rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ yum install ansible |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Installing: ansible noarch 2.1.1.0-1.el6 epel 3.5 M Installing for dependencies: PyYAML x86_64 3.10-3.1.el6 base 157 k libyaml x86_64 0.1.3-4.el6_6 base 52 k python-babel noarch 0.9.4-5.1.el6 base 1.4 M python-crypto2.6 x86_64 2.6.1-2.el6 epel 513 k python-httplib2 noarch 0.7.7-1.el6 epel 70 k python-jinja2-26 noarch 2.6-3.el6 epel 527 k python-keyczar noarch 0.71c-1.el6 epel 219 k python-markupsafe x86_64 0.9.2-4.el6 base 22 k python-pyasn1 noarch 0.0.12a-1.el6 base 70 k python-simplejson x86_64 2.0.9-3.1.el6 base 126 k python-six noarch 1.9.0-2.el6 base 28 k sshpass x86_64 1.05-1.el6 epel 19 k |
第二种:使用pip安装Ansible
如果使用pip安装Ansible。升级操作系统时,并不会同时升级Ansible。另外,升级操作系统有可能损坏Ansible环境,毕竟它依赖Python。Pip的安装指令为:
1 2 |
$ yum install python-pip $ pip install ansible |
第三种:使用源码安装Ansible
最时尚的玩法是使用源码安装了。你会拿到最新版,但并非稳定版。所以,使用源码安装时要留意Bug,积极关注社区和版本更新。请从Github上获取最新代码,安装过程如下:
1 2 |
$ git clone git://github.com/ansible/ansible.git $ cd ansible && sudo make install |
四、Ansible文件说明
我这里使用YUM安装的,查看一下Ansible相关文件。
1 |
$ rpm -ql ansible | more |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 主配置文件 /etc/ansible/ansible.cfg # 默认定义主机清单文件 /etc/ansible/hosts # 用来编排Playbook /etc/ansible/roles # 执行命令的程序 /usr/bin/ansible /usr/bin/ansible-console # Ansible模块使用帮助命令,其中使用-l可以查看ansible自带的所有模块 /usr/bin/ansible-doc /usr/bin/ansible-galaxy # 用来执行playbook的程序 /usr/bin/ansible-playbook /usr/bin/ansible-pull /usr/bin/ansible-vault |