Ansible入門

在上一篇博客《自動化運維工具介紹》中提到,運維自動化就是將日常重複性工作按照事先設定的規則,讓其在一定時間範圍內自動地完成任務,在這之中不需要人工參與。而 Ansible 就是幫助運維人員實現自動化的工具之一。


一、Ansible 是什麼?


Ansible 是近年來新出現的輕量級自動化運維工具,由 Python 開發,糅合了衆多老牌自動化運維工具(Puppet、Chef、Cfengine、Fabric、Func)的優秀特性,能夠實現批量程序部署批量執行命令的功能。除了批量程序部署、批量執行命令之外,Ansible 用於批量系統部署功能還在開發中,最終目標是實現批量系統、程序部署和執行命令這三部分功能,這樣就滿足了運維人員日常工作中的大部分需求。


Ansible 有豐富的內置模塊和開放的 API 接口,同時那些遵循 GPL 協議的企業或個人都可以隨意修改和發佈自己的程序。Ansible 雖然使用極爲簡單,但功能非常不簡單,完全沒有因爲使用方式上的簡單而縮水。


作爲自動化運維工具的新秀,Ansible 已經被 RedHat 官方收購,並在 GitHub 上備受關注。


二、爲什麼要選擇 Ansible?


Ansible 在 2012 年發佈,最初是在美國開始流行的,這主要得益於其作者 Michael DeHaan 在美國 IT 圈的名氣和影響力,並且 Ansible 本身使用簡單但能實現的功能非常豐富,所以很受歡迎。選擇 Ansible 的因爲主要有以下四點:

(1) Ansible 支持豐富的內置模塊,能夠實現的功能非常強大。500 多個內置模塊基本滿足日常運維工作需要。

(2) Ansible 是 agentless 類型的自動化運維工具,部署簡單。被管理端無需任何配置,由管理端配置好後即可使用。

(3) 在 Ansible 去中心化的概念下,只要一個簡單的複製操作即可完成管理配置中心的遷移。

(4) Ansible 完全是基於 Python 開發的,而 Python 在國內很流行,這很方便運維人員對 Ansible 開放 API 接口做二次研發。


三、Ansible 是如何工作的?


對於管理大規模主機來說,Puppet 是首選,而對於管理小規模主機來說,可以使用 Ansible。


Ansible 是 agentless 類型的自動化運維工具,在被管理端無 agent 程序,因此底層通信軟件要依賴於系統軟件,在 Linux 系統下基於 OpenSSH 通信,在 Windows 系統下則基於 PowerShell,但管理端使用的必須是 Linux 系統。在管理端上,使用者通過認證後,就可以通過 Ansible 工具調用各應用模塊將要執行的命令推送至被管理端執行,並在執行完畢後自動刪除臨時產生的文件。根據 Ansible 使用過程中的不同角色,可分爲:

① 使用者

② Ansible 工具集

③ 作用對象


wKioL1l0BIvSleIhAAdb2q0uS-U992.png

注:左邊部分是使用者,中間部分是 Ansible 工具集,右邊部分是作用對象。


(1)使用者

Ansible 的使用者可以來源於多個維度,如上圖中的 Ansible 工作機制所示(圖片來源於《Ansible 權威指南》)。

第一種方式:CMDB(Configuration Management DataBase,配置管理數據庫),CMDB 用於存儲和管理 IT 企業架構中的各種配置,是 ITLT 項目的核心工具。運維人員可以將 CMDB 和 Ansible 組合起來,通過 CMDB 下發指令來調用 Ansible 工具集並完成任務執行。

第二種方式:PUBLIC/PRIVATE CLOUD 方式,Ansible 提供了豐富的 API 編程語言接口(如 Python、PHP、Perl 等),基於 PUBLIC/PRIVATE CLOUD 方式可以通過調用 Ansible 的 API 接口來完成任務執行。

第三種方式:USERS 直接使用 Ad-Hoc 臨時命令集調用 Ansible 工具集來完成任務執行。

第四種方式:USERS 事先編寫好的 ANSIBLE PLAYBOOK,根據 Playbook(任務劇本)中事先編排好的任務集來按順序調用 Ansible 工具集完成任務執行。


(2)Ansible 工具集

ansible 命令是 Ansible 的核心工具,但 ansible 命令本身並不能完成任務的執行,而是通過調用 Ansible 的各個組件來實現功能的,因此 ansible 命令只是 Ansible 執行任務的調用入口。參照上圖中的 Ansible 工作機制,ansible 命令可以理解爲“總指揮”,它是通過“調兵遣將”來完成任務執行的。上圖的中間部分是 Ansible 工具集框架,中包含了可供 ansible 命令“使喚”(調用)的“兵將”(四個組件),分別爲 INVENTORY(命令作用對象的配置文件)、API(供程序調用的應用程序編程接口)、MODULES(豐富的內置模塊)和 PLUGS(內置的和可自定義的插件)。


(3)作用對象

Ansible 的作用對象,既可以是各類操作系統的主機(HOSTS),也可以作用於各類公有云/私有云,商業和非商業設備的網絡設施。


下圖爲 Ansible 的框架(圖片來自 Ansible 官網)。

wKioL1lyw8zgaL_GAAIHGjSxBjs184.jpg


在上圖中,Users 是用戶接口,用戶通過用戶接口與 Ansible 的核心工具(ansible命令)打交道,但 Ansible 核心部分本身並不執行任何任務操作,而是通過調用 Ansible 的模塊來進行。例如,當要創建用戶時就需要調用 Ansible 用戶管理模塊,當要安裝程序時就需要調用程序包管理模塊。Ansible 模塊有兩種,一種是內置模塊(即爲 Core Modules,核心模塊),一種是自定義模塊(Custom Modules)。


如果用戶需要處理的指令比較複雜,可以將多個指令編排寫在 Playbook (YAML 格式)文件中,而 Ansible 可以通過調用這個 Playbook 文件,根據 Playbook 文件中編排的任務集按次序調用相應的模塊來完成任務執行。爲了不讓 Playbook 顯得過於臃腫,也爲了能夠重用代碼,還可以將 Playbook 組織成 roles 的目錄結構。


此外,每當 Ansible 執行了管理操作,應該發郵件通知用戶,因此可以通過調用郵件發送插件來實現,也可以調用日誌記錄插件來實現日誌記錄功能。Ansible 的插件是模塊功能的補充,其中比較重要的一個插件是連接類型插件(Connection Plugins),默認連接類型插件是基於 SSH 協議與被管理主機通信的,因此可以有賬號密碼認證和密鑰認證兩種方式。但是,爲了安全起見,對於 Ansible 能夠管理的主機應該加以限制,需要將 Ansible 要管理的主機清單配置在 Host Inventory 中,而 Ansible 通過調用 hosts 文件來確定一臺主機是否可以被管理。


四、Ansible 的特性


Ansible 使用簡單,但實現的功能卻很豐富,其特性總結如下。

1、高度模塊化 ==> 實現的任何功能都是調用特定的模塊,完成特定的任務。

2、基於 Python 語言開發 ==> 主要調用了 Paramiko、PyYAML 和 JinJa2 這三個關鍵模塊。

3、部署簡單 ==> 這是 agentless 的特性,被管理端無需任何配置,在管理端上配置好後即可使用。

4、支持自定義模塊 ==> 可基於任何開發語言開發模塊。

5、支持 Playbook ==> 能將要處理的多個指令編排在 Playbook 中,然後依照次序執行任務。

6、具有冪等性 ==> 一個命令執行一次或多次的效果是一致的。


五、Ansible 的安裝部署


5.1 安裝 Ansible


可以使用 epel 源安裝 Ansible,此處以 CentOS 7 系統爲例。

[root@admin ~]# yum -y install ansible


5.2 Ansible 基礎元素介紹


配置文件:/etc/ansible/ansible.cfg

主機清單:/etc/ansible/hosts

主程序:ansible、ansible-playbook、ansible-doc

① ansible ==> Ansible 核心工具

② ansible-playbook ==> 運行一個 playbook 文件

③ ansible-doc ==> 查看 Ansible 模塊的文檔



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章