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