1. 程式人生 > >Ansible入門簡介

Ansible入門簡介

Ansible簡介

Ansible基於Python語言實現,由paramiko和PyYAML兩個關鍵模組構建。Ansible的編排引擎可以出色地完成配置管理,流程控制,資源部署等多方面工作。ansible主要承擔的工作有以下幾種:

  1. 配置管理
  2. 服務即時開通
  3. 應用部署
  4. 流程編排
  5. 監控告警
  6. 日誌記錄

    Ansible公司負責Ansible開源軟體的維護,管理。一般軟體的更新時間為2個月。到現在寫這篇部落格為止,Ansible的版本已經更新到了2.3.

Ansible架構模式

Ansible維護模式通常由控制機和被管理機組成。因為Ansible的特性不像其他運維工具那樣需要在被監控的目標上安裝agent,所以我們的側重點只需要放在安裝了Ansible的伺服器上(當然用於實驗環境的話可以是一臺筆記本,桌上型電腦或者僅僅只需要一臺虛擬機器即可)。Ansible可以通過SSH進行遠端連結到對端主機上,然後執行你想要執行的playbook或者指令。所有的遠端主機都可以在inventory中被定義。

以下是Ansible的基本架構:
這裡寫圖片描述

  1. 核心引擎:即圖中所看到的ansible
  2. 核心模組(core module):在模組庫(module library)中分為兩塊,一個是核心模組另外一個就是自定義模組(custom modules)。核心模組中都是ansible自帶的模組,Ansible模組資源分發到遠端節點使其執行特定任務或匹配一個特定的狀態。這些核心核心模組都遵循這batteries included哲學。其實這裡這個還是很有意思的,batterires included:Python has a large standard library, commonly cited as one of Python’s greatest strengths,providing tools suited to many tasks. 這就意味著Python有這巨大的庫支援你完成你想完成的任務工作。
  3. 自定義模組(custom modules):如果在Ansible中滿足不了你所需求的模組,那麼Ansible也能提供新增自定義化的模組。
  4. 外掛(plugin):這裡我的理解就是完成較小型的任務。輔助協助模組來完成某個功能。
  5. 劇本(playbook):定義需要給遠端主機執行的一系列任務。例如安裝一個nginx服務,那麼我們可以把這拆分為幾個任務放到一個playbook中。例如:第一步需要下載nginx的安裝包。第二步我可能考慮需要做的就是將我事先寫好的nginx.conf的配置檔案下發的目標伺服器上。第三步,我們需要把服務啟動起來。第四步,我們可能需要檢查埠是否正常開啟。那麼這些步驟可以通過playbook來進行整合,然後通過inventory來下發到想要執行劇本的主機上。並且playbook也支援互動式執行playbook裡面的步驟,而且如果有那一個步驟執行返回了一個錯誤報告,那麼我們可以僅僅只單獨執行這個步驟。你可以把playbook理解成為一個組策略,控制管理這個OU下所有的主機行為。
  6. 連線外掛(connectior plugins):Ansible預設是基於SSH連線到目標機器上執行操作的。但是同樣的Ansible支援不同的連線方法,要是這樣的話就需要連線外掛來幫助我們完成連線了。
  7. 主機清單(host inventory):為Ansible定義了管理主機的策略。一般小型環境下我們只需要在host檔案中寫入主機的IP地址即可,但是到了中大型環境我們有可能需要使用靜態inventory或者動態主機清單來生成我們所需要執行的目標主機。

任務執行模式

Ansible針對Ansible伺服器對執行操作伺服器的操作方式,分為兩種執行模式:
1.ad-hoc:這個模式支援執行單個模組,支援批量執行單條命令。
2.playbook:這個可以理解成為面向物件的程式設計,就像上面舉例那樣可以把多個你想要執行的任務放到一個playbook當中,當然多個任務在事物邏輯上最好是有上下聯絡的。通過這多個任務可以完成一個總體的目標,這就是playbook。

下圖是參看書籍畫的Ansible執行過程:
這裡寫圖片描述

Ansible功能特性

  1. 應用程式碼自動化部署
  2. 系統管理配置自動化
  3. 支援持續交付自動化
  4. 支援雲端計算,大資料平臺環境
  5. 輕量級,無序在客戶端安裝agent,更新時只需在控制機上進行更行即可
  6. 批量任務執行可以寫成指令碼,不用分發到遠端就可以執行
  7. 支援非root使用者管理操作,支援sudo
  8. 使用python編寫,維護更簡單