歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ansible 快速上手

Ansible 快速上手

日期:2017/2/28 14:38:54   编辑:Linux教程

最近糾結於在 Puppet、Chef、SaltStack、Ansible 等一干配置管理工具中如何選擇。考慮到一旦開始沒有選好,以後更改又是一堆麻煩事,所以就稍微有些慎重。

Puppet 和 SaltStack 我曾用過,但不是十分符合預期,所以先行排除。至於 Chef,雖然老早就聽說過,但卻一直沒有找到機會嘗試。翻了翻文檔,Chef 跟 Puppet 及 SaltStack 也是一樣采用服務端/客戶端模式,對於在現有一定數量的機器上部署仍然有些麻煩。最後落單到 Ansible 上。經過對 Ansible 的把玩,我感覺 Ansible 於我比較相投。我喜歡 Ansible 的方面包括:

  • 充分利用現有設施。使用 Ansible 無需安裝服務端和客戶端,只要 SSH 即可。這意味著,任何一台裝有 Ansible 的機器都可以成為強大的管理端。我覺得,這種去中心化的思路顯得更為靈活。可能有人會擔心 SSH 的效率,Ansible 的並行執行及加速模式或許可以打消你的顧慮。
  • 使用簡單,快速上手相當容易。我在用 Puppet 之前,就沒少花時間鑽研它。想想吧,我們使用這類自動化管理工具不就是想把自己從重復的、復雜的事情中解放出來麼?為了簡化一件事,而沉入另一件復雜的事,是不是有些不劃算?從我的體驗來看,Ansible 上手十分快,用 Ad-Hoc 可以應付簡單的管理任務,麻煩點的也可以定義 Playbook 文件來搞定。
  • 采用人類易讀的格式。Ansible 的主機定義文件使用 INI 格式,支持分組,能夠指定模式;此外也能動態生成,這對管理雲主機應當很有用。而 Playbook 則是 YAML 格式,我覺得它比 Puppet 的 DSL 要易讀易寫多了。
  • 能夠使用你熟悉的語言來編寫模塊。雖然 Ansible 是使用 Python 開發的,但它不會將你限制到某種具體的編程語言,Bash、Python、Perl、Ruby 等等都可以,你擅長什麼就用什麼。

一言以蔽之,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 文件,使用當前目錄下的 hosts
  • all:針對 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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved