如果我们Google一下ansible,第一条出来的就是ansible的官网,它的title是“Ansible is Simple IT Automation”,从这里我们就能了解了ansible的目标:自动化。什么的自动化呢,其实是部署自动化(infrastructure as code),将你原先一步一步使用命令转变为通过一系列的状态检查
来安装一个软件,可以实现批量部署,一键部署。
这个话题我们分两方面来对比,一是有无的对比,二是不同自动化工具的对比
以前安装一个软件我们需要在控制台里一个命令一个命令来配置需要的环境,安装依赖。如果有多台的话我们需要把前面的步骤再重复一遍,有的机器上存在相关依赖,有的不存在,我们需要手动检查,费时费力还容易出错。 Ansible给我们提供了一个自动化利器,还提供了一种思考方式。Ansible不是以动作
来自动化软件安装,而是使用了状态
来实现自动化。一个系统只要最终状态满足软件的条件,那么这个软件就一定是可用的,而且状态
是幂等的,而动作是有副作用的。
ansible优势中最重要的就是简单。ansible无需你安装客户端,只需要在一台机器上安装好ansible,配置好ssh,就可以使用了。语法也很简单,使用一系列的task来指定要做的任务,yaml格式提供了很好的缩进,一目了然。
ansible使用只需3步
ansible需要使用Python相关库,如果没有安装的话还需要安装,并且需要libselinux-python库(yum安装即可)。
一定要编写可重复执行的剧本,也就是说playbook要是一系列对状态的定义
,而不是一系列动作,在执行完后系统要达到什么样的状态,这样在重复执行剧本不会出什么问题。对应到开发上的定义,我们说编写的剧本执行需要具备幂等性,一次执行与多次执行结果一致。
譬如过说要安装一个rpm包,我们可以在playbook中写一个shell: rpm -ivh a.rpm
,这是可以执行的,但是不符合ansible的哲学,因为当包已安装过后,再次执行就会报错。我们需要使用ansible提供的yum来定义状态
- name: Install package. yum: name: /tmp/package.rpm state: present
上面说了ansible简单、易上手,但同时我们也要了解它存在的问题才能决定是否适合我们。
网上有很多相关的比较,各有优势,看大家的应用场景。
学习一门工具不要仅仅看它的API,它本身的设计哲学更值得我们需要关注。毕竟API看过就忘,但是哲学却会影响我们一生。