1. 程式人生 > >Ansible自動化運維的使用領域和架構

Ansible自動化運維的使用領域和架構

Ansible自動化運維的使用領域和架構

Ansible

一、自動化運維簡介:

自動化運維:將周期性、重復性、規律性的工作都交給工具去做,具體來說有應用系統維護自動化,巡檢自動化和故障處理自動化這三個方面;自動化運維依賴於具體的智能管理平臺,最終達到提升運維效率的目的。
技術分享圖片

二、自動化應用領域

配置管理

確保被管理的主機盡可能快速、按照正確方式達到配置文件中描述的狀態,如網站高峰時候需擴展新的Web服務器,這就需要一臺由配置管理控制的機器能夠快速就位,即通常所說的代碼化基礎架構(Infratructure as code),由於構建基礎架構的所有代碼都必須存儲在源碼控制系統中,因此代碼化基礎架構逐步開始按照軟件開發生命周期(Software Development Lifecycle,SDLC)方式進行管理

常見輔助基礎架構測試工具:Ansible、CFEngine、Chef、Puppet、Salt等(配置管理工具)
常見基礎架構測試工具:Serverspec、Test kitchen等(測試基礎配置代碼正確性)服務

服務即時開通

用於在數據中心、虛擬化環境、雲集算中快速開通新的主機
一般雲計算提供商可提供對應API接口,自動化工具可通過API接口快速創建主機實例

應用部署

自動化部署應用,並盡可能零停機部署;一般應用部署采用滾動部署(又稱滾動更新或者增量發布,版本B緩慢更新並替代版本A)、金絲雀部署(版本B向一部分用戶發布,然後完全放開)或流水線式部署(持續×××付,自動化)常見流水線式部署工具:ThoughtWorks Go、Atlassian Bamboo、Jenkins等

流程編排

部署時保證基礎結構眾各組件協調一致,如對Web服務器部署新版本軟件時,需確保該Web從負載均衡上移除(不然會造成訪問異常)
常見流程編排工具:Ansible、Mcollective、Salt、Serf、Chef等

監控警告

當基礎架構出現問題、故障時通知,並可多種方式管理
常見監控告警工具:Nagios、Ganglia、Zenoss、Zabbix、Graphite等

日誌記錄

集中收集跨系統和應用的日誌數據,並能按照規則進行智能過濾、根本原因分析、告警等,常見日誌記錄工具:Logstash-Kibana、SumoLogic、Rsyslog等
註:Ansible可以完成前4個領域工作

三、Ansible架構及特點

技術分享圖片

Ansible實現方式:

Ansible基於Python語言實現,由Paramiko(提供了ssh及sftp進行遠程登錄服務器執行命令和上傳下載文件的功能)和PyYAML兩個關鍵模塊構成,應用於各規模及領域企業,如Twitter、NASA、Evernote等。Ansible只依賴SSH,因此無需在遠程機器上安裝代理(即客戶端)

Ansible架構模式:

Ansible由控制機和被管機組成;控制機安裝Ansible工具軟件、具體執行維護指令的服務器或工作站,是Ansible的核心;被管機為運行業務的服務器,由控制機通過SSH進行管理

Ansible管理方式

    Ansible是一個模型驅動的配置管理器(簡單理解即Ansible只是一個框架,具體功能由模塊實現),支持多節點發布、遠程任務執行;默認使用SSH進行遠程連接,無需在被管節點上安裝附加軟件,可使用各種編程軟件擴展

技術分享圖片
如上圖所示,Ansible管理系統由控制主機和一組被管節點組成,控制主機直接通過SSH控制被管節點,被管節點通過Ansible的資源清單(inventory,即主機定義)來進行分組管理。

技術分享圖片
上圖為配置管理實例,Ansible用劇本(playbook)方式對3臺運行Nginx服務的Ubuntu服務器進行配置管理,控制主機編寫了一個名為webservers.yml的Ansible腳本(該腳本稱為playbook,包含被管節點的hosts和按照順序執行的任務列表(task))

例子中,hosts包含web1、web2、web3

任務列表包含:
? 安裝Nginx(Install Nginx)
? 創建Nginx配置文件(/etc/nginx/nginx.conf)
? 基於安全證書SSH方式拷貝配置文件,重啟Nginx服務
? 確保Nginx服務處於啟動狀態
這時只需要在Ansible控制主機執行如下截圖即可
技術分享圖片

Ansible將會通過SSH連接並行地在web1、web2、web3安裝、配置、運行Nginx服務

Ansible系統架構
Ansible集合眾多優秀運維工具實現了批量系統配置、批量程序部署、批量運行命令等功能

Ansible基於模塊工作,本身沒有批量部署能力,真正具有批量部署的是Ansible所運行的模塊,Ansible只是提供一種框架,用戶通過Ansible編排引擎操作公有雲/私有雲或CMDB(配置管理數據庫)中的主機

技術分享圖片

? 核心引擎:即Ansible

? 核心模塊(core modules):Ansible自帶的模塊,Ansible將模塊資源分發到遠程節點使其執行特定任務或匹配一個特定的狀態

? 自定義模塊(custom modules):如核心模塊不能滿足某功能,可使用自定義模塊

? 插件(plugins):模塊功能的補充,通過插件可完成日誌記錄、郵件發送等功能

? 劇本(playbook):Ansible執行任務的配置文件,可將多個任務定義在一個劇本中,由Ansible自動執行,可同時對多臺遠程主機管理或運行任務

? playbook:Ansible配置、部署及編程語言,描述遠程系統執行策略或一組步驟的過程

? 連接插件(connectior plugins):Ansible通過連接插件連接到各主機,實現與被管節點通信(Ansible默認使用SSH連接到各節點,但也支持其余方式,因此需有連接插件)

? 主機清單(host inventory):定義Ansible管理的主機,默認為Ansible中hosts配置文件中定義的被管節點,但也支持動態主機清單

 Ansible釆用paramiko協議庫,通過SSH或者ZeroMQ連接主機,Ansible在控制主機將Ansible模塊通過SSH協議(或者Kerberos、LDAP)推送到被管節點執行,執行完之後自動刪除,可以使用SVN等來管理自定義模塊及編排,從圖1-4可以了解到,控制主機與被管節點之間支持local、SSH、ZeroMQ三種連接方式,默認使用基於SSH的連接,在規模較大的情況下使用ZeroMQ連接方式會明顯改善執行速度

Ansible部署
Ansible的安裝方式非常靈活,可滿足各種環境部署的需求,一般可以直接用源碼進行安裝,也可用操作系統軟件包管理工具進行安裝

Ansible自動化運維的使用領域和架構