onepiecedn 2013-11-02
最近纠结于在 Puppet、Chef、SaltStack、Ansible 等一干配置管理工具中如何选择。考虑到一旦开始没有选好,以后更改又是一堆麻烦事,所以就稍微有些慎重。
Puppet 和 SaltStack 我曾用过,但不是十分符合预期,所以先行排除。至于 Chef,虽然老早就听说过,但却一直没有找到机会尝试。翻了翻文档,Chef 跟 Puppet 及 SaltStack 也是一样采用服务端/客户端模式,对于在现有一定数量的机器上部署仍然有些麻烦。最后落单到 Ansible 上。经过对 Ansible 的把玩,我感觉 Ansible 于我比较相投。我喜欢 Ansible 的方面包括:
一言以蔽之,Ansible 背后的简单化哲学深得我心。这也比较符合我选择软件的一贯原则。
可能还有人会比较关心目前 Ansible 都有谁在用。毕竟,榜样的力量是无穷。Puppet 不正是因为 Google 在用而吸引了不少眼球么?据我所知,当前使用 Ansible 较为知名的用户包括 Fedora、Rackspace、Evernote 等等。
安装 Ansible
Ansible 能够安装到 Linux、BSD、Mac OS X 等平台,Python 版本最低要求为 2.6。常用 Linux 发行一般可以通过其自带的包管理器安装 Ansible:
yum install ansible # RHEL/CentOS/Fedora,需要配置 EPEL apt-get install ansible # Debian/Ubuntu emerge -avt ansible # Gentoo/Funtoo
如果你在所用 Linux 发行版的包仓库中找不到 Ansible,那么也可以通过 pip
来安装 Ansible,同时也会安装 paramiko、PyYAML、jinja2 等 Python 依赖库。
pip install ansible
准备 Inventory
Inventory 文件用来定义你要管理的主机。其默认位置在 /etc/ansible/hosts
,如果不保存在默认位置,也可通过 -i
选项指定。
被管理的机器可以通过其 IP 或域名指定。未分组的机器需保留在 hosts 的顶部,分组可以使用 []
指定,如:
[web] linuxtoy.org
同时,分组也能嵌套:
[vps:children] web db
此外,也可以通过数字和字母模式来指定一系列连续主机,如:
[1:3].linuxtoy.org # 等价于 1.linuxtoy.org、2.linuxtoy.org、3.linuxtoy.org [a:c].linuxtoy.org # 等价于 a.linuxtoy.org、b.linuxtoy.org、c.linuxtoy.org
小试牛刀
现在,我们执行以下命令来看看 Ansible 是否能正常工作:
ansible -i hosts all -m ping -u www
该命令选项的作用分别为:
-i
:指定 inventory 文件,使用当前目录下的 hostsall
:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式-m
:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器-u
:指定远端机器的用户如果返回如下结果:
linuxtoy.org | success >> { "changed": false, "ping": "pong" }
则说明一切正常。
下面我们再看看远端机器的 uptime:
ansible vps -a 'uptime'
这将输出:
linuxtoy.org | success | rc=0 >> 11:23:16 up 177 days, 21:19, 0 users, load average: 0.55, 0.45, 0.39
此处我们省略了 -m
,Ansible 默认使用 command 模块;-a
指定模块的参数,即执行 uptime
命令。
Puppet 的详细介绍:请点这里
Puppet 的下载地址:请点这里
相关阅读: