一 簡介 Ansible是一款極其簡單的自動化運維工具, 基於Python開發, 集合了眾多運維工具(puppet, cfengine, chef, func, fabric)的優點。 實現了批量系統配置, 批量程式部署, 批量運行命令等功能。 Ansible是基於模塊工作的, 本身沒有批量部署的能 ...
一 簡介
Ansible是一款極其簡單的自動化運維工具, 基於Python開發, 集合了眾多運維工具(puppet, cfengine, chef, func, fabric)的優點。 實現了批量系統配置, 批量程式部署, 批量運行命令等功能。
Ansible是基於模塊工作的, 本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊, Ansible只是提供一種框架。主要包括:
- Play books:任務劇本(任務集),編排定義Ansible任務集的配置文件,由Ansible依次執行多個任務,通常是JSON格式的YML文件;
- Host inventory: Ansible管理主機的清單,指定操作的主機, 是一個配置文件裡面定義監控的主機;
- Modules:各種模塊核心模塊, command模塊等,也包括自定義模塊;
- Connection plugins: 負責和被監控端實現通信;
- Plugins:模塊功能的補充,如連接類型插件、迴圈插件、變數插件等,可藉助於插件完成更豐富的功能。
二 工作機制
- 用戶使用Ansible或Playbook,在伺服器中斷輸入Ansible的Ad-Hoc命令集或Playbook;
- Ansible遵循預先編排的規則將Playbooks逐條拆解為Play;
- Play組織成Ansible可識別的任務(Task);
- Task會調用任務所涉及的所有模塊(Module)和插件(Plugin);
- 讀取Inventroy中定義的主機列表;
- 通過SSH認證(預設)將任務集以臨時文件或命令的形式傳輸到遠程客戶端執行並返回執行結果。
三 特性
- no agents: 不需要在被管控主機上安裝任何客戶端,只需SSH、Python即可,建議Python版本為2.6.6以上;
- no server: 無伺服器端, 使用時直接運行命令即可;
- modules in any languages: 基於模塊工作, 豐富的內置模塊,可使用任意語言開發模塊;
- yaml, not code: 使用yaml語言定製劇本playbook,易於管理,API簡單明瞭;
- ssh by default: 基於SSH工作,整個過程簡單、方便、安全,建議使用公鑰方式認證;
- strong multi-tier solution: 可實現多級指揮。
四 優點
(1).輕量級, 無需在客戶端安裝agent, 更新時只需在操作機上進行一次更新即可;
(2).批量任務執行可以寫成腳本, 而且不用分發到遠程就可以執行;
(3).使用python編寫, 維護更簡單, ruby語法過於複雜;
(4).支持sudo。
五 應用場景
5.1 操作角度劃分
- 文件傳輸:文件的本地傳輸和異地傳輸,所有文件的空間形態、時間形態變化均構成文件傳輸類操作;
- 命令執行:終端所有操作對系統來說都是指令的組成,對運維操作的用戶行為來說,除文件傳輸以外的其他操作均可稱為命令操作。
5.2 工作類型劃分
- 應用部署
- 配置管理
- 任務流編排