最近糾結於在 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
命令。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2013-11/92255p2.htm
Puppet 的詳細介紹:請點這裡
Puppet 的下載地址:請點這裡