一、簡介
1.1 基本概念:
ansible是一個基于python開發的輕量級自動化運維管理工具,可以用來批量執行指令,安裝程式,支援playbook編排。它通過ssh協定來連接配接主機,去中心化,相對比puppet和saltstack無需安裝客戶即可實作檔案傳輸、指令執行、應用部署、配置管理、任務編排等,顯得更為簡單與輕量。ansible隻是提供一種架構,其基于子產品工作的,本身沒有批量部署。
1.2 核心元件:
(1)、連接配接插件connection plugins:負責和被監控端實作通信;
(2)、host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;
(3)、各種子產品核心子產品、command子產品、自定義子產品;
(4)、借助于插件完成記錄日志郵件等功能;
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運作多個任務。
1.3 工具特性:
(1)、no agents:不需要在被管控主機上安裝任何用戶端;
(2)、no server:無伺服器端,使用時直接運作指令即可;
(3)、modules in any languages:基于子產品工作,可使用任意語言開發子產品;
(4)、yaml,not code:使用yaml語言定制劇本playbook;
(5)、ssh by default:基于SSH工作;
(6)、strong multi-tier solution:可實作多級指揮。
1.3.1 流程架構:

ansible如何工作:
Ansible預設是通過SSH通道來管理的,也就是它所說的免用戶端方式管理, 它底層是通過 paramiko 來實作的。
對Ansible底層工作機制感興趣的可以參考這個:http://www.the5fire.com/explore-the-ansible.html
ansible執行過程大體過程如下圖,其中暖色調的代表已經子產品化。
圖檔來源于:http://ju.outofmemory.cn/entry/67581
ansible有如下優點:
輕量級,無需在用戶端安裝agent,更新時,隻需在操作機上進行一次更新即可;
批量任務執行可以寫成腳本,而且不用分發到遠端就可以執行;
使用python編寫,維護更簡單;
使用push方式,控制節點向其他節點推方式,可先測試變更,友善控制管理。
支援sudo
缺點:
基于ssh,串行,故超過500台主機效率較低;
1.4ansible安裝
1.4.1、源碼安裝
源碼位址:https://pypi.python.org/packages/source/a/ansible/ansible-1.5.5.tar.gz
1.4.2、pip安裝
1.4.2、yum安裝
[root@ansible ~]#
[root@ansible ~]# rpm -qa | grep ansible # 檢查是否安裝
ansible-1.5.3-1.el6.noarch
[root@ansible ~]# yum install ansible -y # 沒有安裝的話,使用這個安裝即可
1.5、ansible組成介紹
1.5.1、包含檔案介紹
[root@ansible ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg # ansible的配置檔案
└── hosts # ansible的主倉庫 用來存儲需要管理的遠端主機的相關資訊
0 directories, 2 files
1.5.2、ansible其他元件介紹
ansible-doc 子產品文檔檢視器,很有用,使用ansible -l 顯示所有module清單,使用 ansible-doc <module_x> 來檢視module_x的詳細文檔,這裡不做太多介紹
ansible-playbook 傳說中的配置管理工具,如果你用過puppet或者saltstack,這個可以不用介紹了,如果你沒用過,也沒關系,花費20分鐘看下官方的Video。 掌握一件事情最好的辦法就是使用它,你可以下載下傳官方的example來學習
ansible-galaxy 和三星沒關系,你可以把他了解成ansible的pip,可以從galaxy.ansible.com下載下傳官方收錄的playbooks
ansible-pull 支援直接從git下載下傳playbook執行,需要遵循其規定的目錄格式,用處不是特别大,可以不關注
ansible-vault 如果你的配置檔案中含有敏感資訊,你可能并不希望他能被人看到,vault可以幫你加密/解密這個配置檔案,進階用法,請參照http://blog.ansibleworks.com/2014/02/19/ansible-vault/
1.5.3、ansible的Inventory介紹
ansible.cfg檔案不用去管,我們隻需要配置hosts檔案即可,hosts檔案也就是官方說的Inventory,
hosts檔案配置的幾種格式:
單純的寫主機名或ip,所屬組為all
#blue.example.com
#192.168.100.1
定義一個組
#[webservers]
#alpha.example.org
#beta.example.org
#192.168.1.100
組成員可以使用通配符來比對 www[001:006].example.com
如果你沒有使用公鑰,想要使用密碼,你也可以這樣寫(适用于第一次登陸控制)
格式:【主機名】 【主機位址】 【主機密碼】 預設是root使用者來進行的
[keepalived]
keepalived1 ansible_ssh_host=192.168.146.136 ansible_ssh_pass="test"
keepalived2 ansible_ssh_host=192.168.146.137 ansible_ssh_pass="test"
hosts檔案設定的參數官方給出的:
1.6、ansible的簡單使用
1.6.1、上傳公鑰到遠端主機
定義好了倉庫,那麼我們就需要把控制端的公鑰推送到遠端主機上 (稍後會有講到)
方法:1、使用expect+shell方式批量推送
方法:2、自己手動一個一個的推送
1.6.2、牛刀小試看看效果如何
好了,公鑰都傳到對方主機了,那麼我們來簡單的使用來試用下
[root@ansible ~]# ansible keepalived -a "uptime" # 預設使用command子產品
keepalived1 | success | rc=0 >>
13:07:24 up 7:59, 1 user, load average: 0.00, 0.00, 0.00
keepalived2 | success | rc=0 >>
13:07:31 up 7:58, 1 user, load average: 0.00, 0.00, 0.00
anisble幫助:
1.列出所有已安裝的子產品
[root@localhost ~]# ansible-doc –l
2.檢視某一個子產品的用法
[root@localhost ~]# ansible-doc –h
[root@localhost ~]# ansible-doc -s yum //檢視yum的用法
3.ansible-playbook
該指令是使用最多的指令,其通過讀取playbook 檔案後,執行相應的動作。