ansible是壹種自動化運維工具,基於paramiko開發的,並且基於模塊化工作,Ansible是壹種集成IT系統的配置管理、應用部署、執行特定任務的開源平臺,它是基於python語言,由Paramiko和PyYAML兩個關鍵模塊構建。集合了眾多運維工具的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能.ansible是基於模塊工作的,本身沒有批量部署的能力.真正具有批量部署的是ansible所運行的模塊,ansible只是提供壹種框架.ansible不需要在遠程主機上安裝client/agents,因為它們是基於ssh來和遠程主機通訊的.
ansible被定義為配置管理工具,配置管理工具通常具有以下功能:
常用的自動化運維工具技術特性比較:
ansible系統由控制主機和被管理主機組成,控制主機不支持windows平臺
部署簡單, 只需要在控制主機上部署ansible環境,被控制端上只要求安裝ssh和python 2.5以上版本,這個對於類unix系統來說相當與無需配置.
Ansible任務執行模式分為以下兩種:
ansible配置文件查找順序
ansible配置文件
ansible 有許多參數,下面我們列出壹些常見的參數:
ansible的主要功用在於批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名。默認的inventory file為/etc/ansible/hosts。
inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成。
Inventory文件格式:
inventory其他的參數
ansible通過ssh實現配置管理、應用部署、任務執行等功能,因此,需要事先配置ansible端能基於密鑰認證的方式聯系各被管理節點。
ansible命令使用語法:
例如:
可以通過 ansible-doc -l 列出所有可用的module,常用的module有:
ansible -s <module-name> 可以查看指定module的用法,或者參看 官方幫助文檔 :
playbook是由壹個或多個“play”組成的列表。play的主要功能在於將事先歸並為壹組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的壹個module。將多個play組織在壹個playbook中,即可以讓它們聯同起來按事先編排的機制同唱壹臺大戲。
下面是壹個簡單示例:
playbooks的組成部分
執行過程:
playbook安裝配置apache實戰
ansilbe自1.2版本引入的新特性,用於層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變量、文件、任務、模塊及處理器放置於單獨的目錄中,並可以便捷地include它們的壹種機制。角色壹般用於基於主機構建服務的場景中,但也可以是用於構建守護進程等場景中。
壹個roles的案例如下所示:
在playbook中,可以這樣使用roles:
也可以向roles傳遞參數:
也可以用條件來使用roles:
ansible運行playbook時會啟動很多ssh連接來執行復制文件,運行命令這樣的操作.openssh支持這樣壹個優化,叫做ssh Multiplexing,當使用這個ssh Multiplexing的時候,多個連接到相同主機的ssh回話會***享相同的TCP連接,這樣就只有第壹次連接的時候需要進行TCP三次握手.
ansible會默認使用ssh Multiplexing特性,壹般不需要更改配置,相關的配置項為:
ansible執行過程中,他會基於調用的模塊生成壹個python腳本,然後將python腳本復制到主機上,最後執行腳本.ansible支持壹個優化,叫做pipelining,在這個模式下ansible執行腳本時並不會去復制它,而是通過管道傳遞給ssh會話,這會讓ansible的ssh會話從2個減少到1個,從而節省時間.
pipelining默認是關閉的, 因為他需要確認被管理主機上的/etc/sudoers文件中的 requiretty 沒有啟用, 格式如下:
ansible開啟pipelining方法, 修改ansible.cfg配置文件:
ansible playbook會默認先收集fact信息,如果不需要fact數據可以在playbook中禁用fact采集:
也可以全局禁用fact采集:
另壹種解決方案就是使用fact緩存,目前ansible支持下面幾種fact緩存:
JSON文件做fact緩存示例
ansible把采集到的fact寫入控制主機的json文件中,如果文件已經存在,那麽ansible不會再去主機上采集fact
啟用JSON文件緩存,修改ansible.cfg文件:
ansible默認並發數是5,可以用下面兩種方法修改並發數:
ansible內置多種雲計算相關模塊,如aws,openstack,docker等,下圖是ansible與docker相關的模塊:
通過playbook和dockerfile相結合的方式生成鏡像, 示例如下:
ansible可以通過docker模塊來操作容器,示例如下: