Ansible概念
ansible是自動化運維工具,基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。說白了,Ansible就是在一臺或多臺服務器上執行一系列命令而已。主要包括:
(1)、連接插件connectionplugins:負責和被監控端實現通信
(2)、hostinventory:指定操作的主機,是一個配置文件里面定義監控的主機
(3)、各種模塊核心模塊、command模塊、自定義模塊
(4)、借助于插件完成記錄日志郵件等功能
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
Ansible可以實現很多工具的功能,如下圖:
Ansible和其它自動化工具比較
Ansible無需在被控主機部署任何代理程序,默認直接通過ssh通道進行遠程命令執行和下發配置。具有功能強大、系統管理靈活等特點。兩者都提供豐富的模板和API,對云計算、大數據都有很好的支持。
同類自動化工具GitHub關注程度(2016-07-10)
同類自動化工具 |
watch(關注) |
star(點贊) |
fork(復制) |
Contributors(貢獻者) |
Ansible |
1387 |
17716 |
5356 |
1428 |
Puppet |
463 |
4044 |
1678 |
425 |
Chef |
383 |
4333 |
1806 |
464 |
Fabric |
379 |
7334 |
1235 |
116 |
Ansible架構
Ansible:Ansible核心程序。
HostLnventory:記錄由Ansible管理的主機信息,包括端口、密碼、ip等。
Playbooks:“劇本”YAML格式文件,多個任務定義在一個文件中,定義主機需要調用哪些模塊來完成的功能。
CoreModules:核心模塊,來完成管理任務。先調用此中的模塊,再指定HostLnventory中的主機來完成管理任務。
CustomModules:自定義模塊,完成核心模塊無法完成的功能,支持多種語言。
ConnectionPlugins:連接插件,做通信使用。
Ansible 工作機制
Ansible 在管理節點將 Ansible 模塊通過 SSH 協議(或者 Kerberos、LDAP)推送到被管理端執 行,執行完之后自動刪除,可以使用 SVN 等來管理自定義模塊及編排
1、管理端支持local 、ssh、zeromq 三種方式連接被管理端,默認使用基于ssh的連接---這部分對應基本架構圖中的連接模塊
2、可以按應用類型等方式進行Host Inventory(主機群)分類,管理節點通過各類模塊實現相應的操作---單個模塊,單條命令的批量執行,我們可以稱之為ad-hoc
3、管理節點可以通過playbooks 實現多個task的集合實現一類功能,如web服務的安裝部署、數據庫服務器的批量備份等。playbooks我們可以簡單的理解為,系統通過組合多條ad-hoc操作的配置文件
ansible的任務執行流程
(1)讀取配置
(2)抓取全量機器&分組列表
可從多個靜態文件、文件夾、腳本中讀取機器,分組及其變關聯量信息。
(3)使用host-pattern過濾機器列表
(4)根據參數確定執行模塊和配置
從modules目錄動態讀取,用戶可以自行開發模塊。
(5)Runner執行返回
Connection環節定義連接方式 => Action階段機器列表(Lookup plugin Action變量/文件等資源的獲?。?/p>
Callback plugin各階段的鉤子調用
(6)輸出結束
Filter plugin過濾算子
Callback plugin各階段的鉤子調用
Ansible特性:
(1)、Agentless(去中心化)
(2)、noserver:無服務器端,使用時直接運行命令即可
(3)、模塊化:調用特定模塊,完成特定任務,支持自定義模塊
(4)、yaml,notcode:使用yaml語言定制劇本playbook
(5)、sshbydefault:基于SSH工作
(6)、strongmulti-tiersolution:可實現多級指揮
(7)、冥等性
優點:
(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
(2)、批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;
(3)、使用python編寫,維護更簡單,ruby語法過于復雜;
(4)、支持sudo。
Ansible工作機制
Ansble目錄結構圖:
Ansible主要組成部分:
ANSIBLEPLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置文件,由Ansible順序依次執行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主機的清單
MODULES:Ansible執行命令的功能模塊,多數為內置的核心模塊,也可自定義
PLUGINS:模塊功能的補充,如連接類型插件、循環插件、變量插件、過濾插件等,該功能不常用。
API:供第三方程序調用的應用程序編程接口
ANSIBLE:該部分圖中表示的不明顯,組合INVENTORY、API、MODULES、PLUGINS的綠框大家可以理解為是Ansible命令工具,其為核心執行工具
Ansible組件調用關系:
自動化發布:
測試環境
Dev測試環境
測試環境
灰度環境
發布環境
生產環境
灰度發布
指在黑與白之間,能夠平滑過渡的一種發布方式ABtest就是一種灰度發布方式,讓一部分用戶繼續用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來?;叶劝l布可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響
自動化發布:
發布機/Master/管理機/堡壘機
統一入口、規范管理
利用手機APP動態口令等驗證機制
托管服務器密碼,實現自動改密
事中控制,防止違規
操作精細化審計,追溯整個運維過程
目錄擺放規范簡述:
/srv/
/data/srv/
/web/
/app/
命名規范簡述
一級:項目名
二級:打包時間
三級:版本號
主版本號.子版本號[.修正版本號[.編譯版本號]]
四級:版本特性
示例:webapp-201704041220-V1.0.10.0-Beta
webapp-201705051220-V1.1.12.0-Stable
參考文檔:
https://github.com/ansible/ansible
原創文章,作者:Linux.rookie,如若轉載,請注明出處:http://www.www58058.com/79474