1、簡介html
1.1 基本概念:python
ansible是一個基於python開發的輕量級自動化運維管理工具,能夠用來批量執行命令,安裝程序,支持playbook編排。它經過ssh協議來鏈接主機,去中心化,相對比puppet和saltstack無需安裝客戶便可實現文件傳輸、命令執行、應用部署、配置管理、任務編排等,顯得更爲簡單與輕量。ansible只是提供一種框架,其基於模塊工做的,自己沒有批量部署。linux
1.2 核心組件:git
(1)、鏈接插件connection plugins:負責和被監控端實現通訊;web
(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;shell
(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.一、源碼安裝
源碼地址:https://pypi.python.org/packages/source/a/ansible/ansible-1.5.5.tar.gz
1.4.二、pip安裝
1.4.二、yum安裝
[root@ansible ~]#
[root@ansible ~]# rpm -qa | grep ansible # 檢查是否安裝
ansible-1.5.3-1.el6.noarch
[root@ansible ~]# yum install ansible -y # 沒有安裝的話,使用這個安裝便可
1.五、ansible組成介紹
1.5.一、包含文件介紹
[root@ansible ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg # ansible的配置文件
└── hosts # ansible的主倉庫 用來存儲須要管理的遠程主機的相關信息
0 directories, 2 files
[root@ansible ~]#
1.5.二、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.三、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.六、ansible的簡單使用
1.6.一、上傳公鑰到遠程主機
定義好了倉庫,那麼咱們就須要把控制端的公鑰推送到遠程主機上 (稍後會有講到)
方法:一、使用expect+shell方式批量推送
方法:二、本身手動一個一個的推送
1.6.二、牛刀小試看看效果如何
好了,公鑰都傳到對方主機了,那麼咱們來簡單的使用來試用下
[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
[root@ansible ~]#
anisble幫助:
1.列出全部已安裝的模塊
[root@localhost ~]# ansible-doc –l
2.查看某一個模塊的用法
[root@localhost ~]# ansible-doc –h
[root@localhost ~]# ansible-doc -s yum //查看yum的用法
3.ansible-playbook
該指令是使用最多的指令,其經過讀取playbook 文件後,執行相應的動做。
參考文檔:
http://www.javashuo.com/article/p-etzfwxpa-gg.html
http://www.javashuo.com/article/p-vzvxyqed-r.html #授信ansible-shell
http://www.javashuo.com/article/p-qqyhtqnv-m.html #經常使用模塊
官網地址:http://docs.ansible.com/synchronize_module.html
https://blog.51cto.com/linuxg/1714381#ansible用戶委派
https://blog.csdn.net/justheretobe/article/details/72775964#ansible playbook
https://www.linuxidc.com/Linux/2017-12/149671.htm 架構原理
https://www.cnblogs.com/f-ck-need-u/p/7553186.html?utm_source=debugrun&utm_medium=referral ansible配置文件詳解
http://ansible-tran.readthedocs.io/en/latest/docs/intro_getting_started.html #ansible中文文檔