Ansible优点:

  • 充分利用现有设施。使用 Ansible 无需安装服务端和客户端,只要 SSH 即可。这意味着,任何一台装有 Ansible 的机器都可以成为强大的管理端。我觉得,这种去中心化的思路显得更为灵活。可能有人会担心 SSH 的效率,Ansible 的并行执行及加速模式或许可以打消你的顾虑。
  • 自动化管理工具不就是想把自己从重复的、复杂的事情中解放出来么?为了简化一件事,而沉入另一件复杂的 事,是不是有些不划算?从我的体验来看,Ansible 上手十分快,用 Ad-Hoc 可以应付简单的管理任务,麻烦点的也可以定义 Playbook 文件来搞定。
  • 采用人类易读的格式。Ansible 的主机定义文件使用 INI 格式,支持分组,能够指定模式;此外也能动态生成,这对管理云主机应当很有用。而 Playbook 则是 YAML 格式,我觉得它比 Puppet 的 DSL 要易读易写多了。
  • Perl、Ruby 等等都可以,你擅长什么就用什么。

一言以蔽之,Ansible 背后的简单化哲学深得我心。这也比较符合我选择软件的一贯原则。可能还有人会比较关心目前 Ansible 都有谁在用。毕竟,榜样的力量是无穷。Puppet 不正是因为 Google 在用而吸引了不少眼球么?据我所知,当前使用 Ansible 较为知名的用户包括 Fedora、Rackspace、Evernote 等等。

安装 Ansible

安装 Ansible:

 
1
2
3
# RHEL/CentOS/Fedora,需要配置 EPEL
# Debian/Ubuntu
# Gentoo/Funtoo

pip 来安装 Ansible,同时也会安装 paramiko、PyYAML、jinja2 等 Python 依赖库。

 
1
ansible

准备 Inventory

[] 指定,如:

 
1
2
  
org

同时,分组也能嵌套:

 
1
2
3
  
web  
db

此外,也可以通过数字和字母模式来指定一系列连续主机,如:

 
1
2
3
4
# 等价于
  
# 等价于
org

小试牛刀

现在,我们执行以下命令来看看 Ansible 是否能正常工作:

 
1
www

该命令选项的作用分别为:

  • -i:指定 inventory 文件,使用当前目录下的 hosts
  • all:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式
  • -m:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器
  • -u:指定远端机器的用户

如果返回如下结果:

 
1
2
3
4
  
  
  
}

则说明一切正常。

下面我们再看看远端机器的 uptime:

 
1
'uptime'

这将输出:

 
1
2
  
0.39

uptime 命令。

使用 Ad-Hoc 管理简单任务

执行 Ad-Hoc 就跟我们在 Linux 下执行单行命令差不多,用来快速完成简单的任务十分方便。比如:如果被管理端的 Python 为 2.4,那么需要 python-simplejson 这个包。我们可以通过以下命令在所有 CentOS 主机上安装它:

 
1
'yum -y install python-simplejson'

ansible-doc 查询模块文档,如:

 
1
raw

使用 Playbook 管理复杂任务

对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定。Playbook 是 Ansible 真正强大的地方,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容。我们来看一个简单的例子,该例子在远端机器上创建一个新 的用户:

 
1
2
3
4
5
6
7
8
9
10
11
12
  
user  
vps  
root  
false
 
  
 
  
vps  

 

tasks 指定要执行的任务。

要执行 Playbook,可以敲入:

 
1
yml

执行结果为:

 
1
2
3
4
5
6
7
8
9
10
create
*
 
on
  
]
 
PLAY
  
0

 

官方示例。

总结

Ansible 由 Puppet 的前雇员所创建,使用起来真的很简单。不仅仅是配置管理,远程执行、应用部署等任务皆能完成,而且便于利用自身所熟悉的语言扩展,确为不可多得的好工具。

相关文章: