介紹一款開源的IT配置管理工具—Ansible
一、Ansible發(fā)展和起源
Ansible是一款開源的IT配置管理工具,常被IT界的小伙伴們用于服務(wù)部署、配置管理等工作。配置文件采用最常見的yaml格式,學(xué)習(xí)起來也是比較容易,并且不像SaltStack,Ansible并不需要也沒有agent,只有一個控制端。該工具使用簡單但功能非常強(qiáng)大,可以解決眾多工作中繁瑣的服務(wù)安裝、配置等問題。
Ansible的第一個版本是0.0.1,發(fā)布于2012年3月9日,其作者兼創(chuàng)始人是Michael DeHaan。迄今為止已經(jīng)發(fā)展到了2.9版本。并且它的關(guān)注度、Star數(shù)以及Fork的次數(shù)都位居榜首。就連強(qiáng)大的SaltStack也只能排到第二。
Michael DeHaan在配置管理和架構(gòu)設(shè)計(jì)方面有豐富的經(jīng)驗(yàn),曾就職于RedHat公司,在RedHat任職期間主要開發(fā)了Cobble。在他嘗試了各種自動化工具Puppet、Chef之后,決定自己打造一款能夠結(jié)合眾多有點(diǎn)的自動化工具。由此,便有了Ansible這款易理解、易上手、受眾人喜愛的自動化工具。
二、為什么需要Ansible
前面說過,ansible通常用于自動化的場景,多用在服務(wù)部署、配置管理方面。隨著時間推移和公司發(fā)展,項(xiàng)目越來越多,團(tuán)隊(duì)日益壯大,各種公司內(nèi)部開發(fā)的應(yīng)用、第三方開源的中間件等服務(wù)越來越多,那么管理起來就相對比較困難,人肉操作已經(jīng)完全滿足不了傳統(tǒng)的運(yùn)維工作,需要消耗相當(dāng)多的時間來進(jìn)行變更,進(jìn)而阻礙了開發(fā)人員的速度,極大的降低了工作效率。顯然可考又高效的部署和管理成為了公司的一大難點(diǎn)與挑戰(zhàn)。那么一款高效且可靠的服務(wù)部署和管理工具就顯得尤為重要。而在很長一段時間里,Docker容器與kubernetes容器編排系統(tǒng)沒有被廣泛的普及之前,有很大一部分人在使用Jenkins + Ansible進(jìn)行CICD。
三、Ansible的主要功能
- 批量執(zhí)行遠(yuǎn)程命令:可以對任意多臺主機(jī)同時進(jìn)行命令的執(zhí)行。
- 批量配置軟件服務(wù):可以進(jìn)行自動化的方式部署、配置及管理服務(wù)。
- 編排高級的IT任務(wù):Ansible 可以使用yaml來編寫一套完整的Playbook,用來部署維護(hù)一套完全的基礎(chǔ)架構(gòu)。
四、Ansible的相關(guān)特性
Ansible是基于每個模塊進(jìn)行工作,自身并沒有批量部署的能力,ansible自身只是提供了一種框架。
- Ansible由Python語言開發(fā),沒有agent,不需要在被管理節(jié)點(diǎn)安裝任何客戶端。
- 模塊化:基于模塊工作,秩序調(diào)用特定的模塊來完成特定工作。
- 基于SSH協(xié)議。
- 三大關(guān)鍵組成模塊:Paramiko, PyYAML, Jinja2。
- 冪等性:一個任務(wù)執(zhí)行1遍和執(zhí)行n遍效果一樣,不因重復(fù)執(zhí)行帶來意外情況。
- 可以使用命令行ad-hoc方式來執(zhí)行批量任務(wù),也可以使用yaml格式的文件來定制Playbook劇本實(shí)現(xiàn)批量任務(wù)。
- 可以使用Role組織批量任務(wù)。
五、Ansible的優(yōu)點(diǎn)
- 容易學(xué)習(xí)且輕量:無需在被控制節(jié)點(diǎn)安裝agent,做批量操作時只需要在操作機(jī)操作即可(前提:需要配置好免密登錄)。
- 操作靈活:具有眾多的模塊,可使用命令行ad-hoc方式或者Playbook劇本的方式來實(shí)現(xiàn)批量任務(wù)執(zhí)行。
- 可移植性高:可以基于yaml文件編寫一套Playbook,只要做好邏輯判斷,就可以在多種操作系統(tǒng)上拿來即用。
- 冪等性:一個任務(wù)執(zhí)行1遍和執(zhí)行n遍效果一樣,不因重復(fù)執(zhí)行帶來意外情況。
- 支持普通用戶sudo提權(quán)。
但是任何事物都具有兩面性。SSH雖好,但如果被管理的機(jī)器數(shù)量眾多的話,執(zhí)行的速度就會比較慢,就需要進(jìn)行一定的優(yōu)化和分批任務(wù)來緩解速度問題。
六、Ansible的架構(gòu)
Ansible由以下幾個核心工具組成:
- INVENTORY:Ansible管理主機(jī)的清單/etc/anaible/hosts。
- MODULES:Ansible執(zhí)行命令的功能模塊,多數(shù)為內(nèi)置核心模塊,也可自定義。
- PLUGINS:模塊功能的補(bǔ)充,如連接類型插件、循環(huán)插件、變量插件、過濾插件等。
- APl:供第三方程序調(diào)用的應(yīng)用程序編程接口。
在日常工作中,我們大多數(shù)用到的且使用比較頻繁的主要是:Inventory 和 Modules。通常我們會根據(jù)項(xiàng)目的需求來定制化我們的Inventory,不會將它放在默認(rèn)的/etc/anaible/hosts文件中。
需要提醒大家的是:
Ansible更新后,很多之前的方法在一段時間后或者說在某個版本后就會完全廢棄掉,這點(diǎn)和目前Kubernetes的API廢棄有點(diǎn)像。但是當(dāng)你在某個高版本去使用低版本提供的方法時,它會在你執(zhí)行playbook的時候給出warning警告,可以根據(jù)警告再去查詢官方文檔上對應(yīng)版本的使用方法。
Ansible官網(wǎng):https://docs.ansible.com/。