介紹
Ansible 是一個(gè)配置管理和應(yīng)用部署工具,功能類(lèi)似于目前業(yè)界的配置管理工具 Chef,Puppet,Saltstack。Ansible 是通過(guò) Python 語(yǔ)言開(kāi)發(fā)。Ansible 平臺(tái)由 Michael DeHaan 創(chuàng)建,他同時(shí)也是知名軟件 Cobbler 與 Func 的作者。Ansible 的第一個(gè)版本發(fā)布于 2012 年 2 月,相比較其它同類(lèi)產(chǎn)品來(lái)說(shuō),Ansible 還是非常年輕的,但這并不影響他的蓬勃發(fā)展與大家對(duì)他的熱愛(ài)。
Ansible 默認(rèn)通過(guò) SSH 協(xié)議管理機(jī)器,所以 Ansible 不需要安裝客戶(hù)端程序在服務(wù)器上。您只需要將 Ansible 安裝在一臺(tái)服務(wù)器,在 Ansible 安裝完后,您就可以去管理控制其它服務(wù)器。不需要為它配置數(shù)據(jù)庫(kù),Ansible 不會(huì)以 daemons 方式來(lái)啟動(dòng)或保持運(yùn)行狀態(tài)。
Ansible 的目標(biāo)有如下:
? 自動(dòng)化部署應(yīng)用
? 自動(dòng)化管理配置
? 自動(dòng)化的持續(xù)交付
? 自動(dòng)化的(AWS)云服務(wù)管理。
根據(jù) Ansible 官方提供的信息,當(dāng)前使用 Ansible 的用戶(hù)有:evernote、rackspace、NASA、Atlassian、twitter 等。
Ansible是怎么工作的

從上圖可以看出,運(yùn)行ansible的先決條件是,安裝ansible到管理節(jié)點(diǎn),定義主機(jī)清單,并有一些playbooks定義。
讓我們來(lái)看看我們?nèi)绾问褂肁nsible將我們的Ubuntu虛擬機(jī)轉(zhuǎn)換為Web服務(wù)器。
您在管理節(jié)點(diǎn)上運(yùn)行Ansible Playbook,它查看您在playbook中定義的命令參數(shù),并通知我們定位到網(wǎng)絡(luò)組中的節(jié)點(diǎn)。 Ansible然后讀取主機(jī)清單以查找分配給Web組的節(jié)點(diǎn)。在這一點(diǎn)上,Ansible已經(jīng)準(zhǔn)備好開(kāi)始工作,所以它將通過(guò)ssh遠(yuǎn)程連接到定義的機(jī)器,通常你會(huì)想要通過(guò)預(yù)共享密鑰建立一些類(lèi)型的ssh信任,這樣你就不必在進(jìn)行ssh登陸的時(shí)候輸入密碼。然后Ansible將開(kāi)始逐步執(zhí)行playbook中的任務(wù),一次一個(gè)任務(wù),從頂部到底部的順序遍歷它們,就像你手動(dòng)登錄執(zhí)行任務(wù)一樣。所以,它安裝軟件包,更新配置文件,使用git部署我們的網(wǎng)站代碼,最后啟動(dòng)我們的Web服務(wù)。當(dāng)Ansible很愉快的把一切都按預(yù)期的完成,你會(huì)得到一個(gè)執(zhí)行成功的狀態(tài)報(bào)告。
可以用動(dòng)圖說(shuō)明下此次過(guò)程。

對(duì)管理主機(jī)的要求
目前,只要機(jī)器上安裝了 Python 2.6 或 Python 2.7 (windows系統(tǒng)不可以做控制主機(jī)),都可以運(yùn)行Ansible.
主機(jī)的系統(tǒng)可以是 Red Hat, Debian, CentOS, OS X, BSD的各種版本,等等.
對(duì)節(jié)點(diǎn)主機(jī)的要求
通常我們使用 ssh 與托管節(jié)點(diǎn)通信,默認(rèn)使用 sftp.如果 sftp 不可用,可在 ansible.cfg 配置文件中配置成 scp 的方式. 在托管節(jié)點(diǎn)上也需要安裝 Python 2.4 或以上的版本.如果版本低于 Python 2.5 ,還需要額外安裝一個(gè)模塊:
python-simplejson
Ansible 與其它配置管理的對(duì)比
選擇了目前幾款主流的與 Ansible 功能類(lèi)似的配置管理軟件 Puppet、Saltstack,這里所做的對(duì)比不針對(duì)各個(gè)軟件的性能作比較,只是對(duì)各個(gè)軟件的特性做個(gè)對(duì)比。
| Puppet | Saltstack | Ansible | |
|---|---|---|---|
| 開(kāi)發(fā)語(yǔ)言 | Ruby | Python | Python |
| 是否有客戶(hù)端 | 有 | 有 | 無(wú) |
| 是否支持二次開(kāi)發(fā) | 不支持 | 支持 | 支持 |
| 服務(wù)器與遠(yuǎn)程機(jī)器是否相互驗(yàn)證 | 是 | 是 | 是 |
| 服務(wù)器與遠(yuǎn)程機(jī)器通信是否加密 | 是,標(biāo)準(zhǔn) SSL 協(xié)議 | 是,使用 AES 加密 | 是,使用 OpenSSH |
| 平臺(tái)支持 | 支持 AIX、BSD、HP-UX、Linux、 MacOSX、Solaris、 Windows | 支持 BSD、Linux、Mac OS X、Solaris、 Windows | 支持 AIX、BSD、 HP-UX、 Linux、Mac OSX、Solaris |
| 是否提供 web | ui 提供 | 提供 | 提供,不過(guò)是商業(yè)版本 |
| 配置文件格式 | Ruby 語(yǔ)法格式 | YAML | YAML |
| 命令行執(zhí)行 | 不支持,但可通過(guò)配置模塊實(shí)現(xiàn) | 支持 | 支持 |
資源
官方文檔: http://docs.ansible.com/
中文文檔: http://www.ansible.com.cn/ http://ansible-tran.readthedocs.io/
Jinja2 中文文檔: http://docs.jinkan.org/docs/jinja2/
yaml語(yǔ)法: http://www.yaml.org/
書(shū)籍: https://www.ansible.com/ebooks 鏈接:http://pan.baidu.com/s/1qYazeos 密碼:28p2
ansible examples :https://github.com/ansible/ansible-examples
ansible-vim: https://github.com/pearofducks/ansible-vim (可以高亮顯示,語(yǔ)法檢查)
更多文章請(qǐng)看 Ansible 專(zhuān)題文章總覽