《Ansible自動化運維:技術與最佳實踐》第一章讀書筆記

  • 2019 年 10 月 3 日
  • 筆記

Ansible 架構及特點

第一章主要講的是 Ansible 架構及特點,主要包含以下內容:

  1. Ansible 軟體
  2. Ansible 架構模式
  3. Ansible 特性

Ansible 軟體

Ansible 的編排引擎可以完成配置管理、流程式控制制、資源部署等工作。 Ansible 基於 Python語言實現,由 Paramiko 和 PyYAML 兩個關鍵模組構建。

Ansible 應用領域

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

Ansible 架構模式

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

Ansible 管理方式

Ansible 是一個模型驅動的配置管理器,支援多節點發布、遠程任務執行。默認使用SSH進行遠程連接。無需再被管節點上安裝附加軟體,可使用各種程式語言進行擴展。

Ansible 管理系統由控制主機和一組被管節點組成。控制主機直接通過SSH控制被管節點,被管節點通過 Ansible 的資源清單來進行分組管理。
"Ansible 總體系統構成"

Ansible 用劇本方式對3台運行 Nginx 服務的 Ubuntu 伺服器進行配置管理

編寫 webservers.yml 的 Ansible 腳本,即 playbook ,其中包含被管節點的 hosts 和對這些 hosts 按照順序執行的任務列表(task)。

hosts 包括web1、web2、web3。

任務列表包括如下過程:

  • 安裝 Nginx(Install Nginx)
  • 創建 Nginx 配置文件(/etc/nginx/nginx.conf)
  • 基於安全證書SSH方式拷貝配置文件,重啟 Nginx 服務
  • 確保 Nginx 服務處於啟動狀態

在 Ansible 系統的控制主機上執行ansible-playbook webservers.yml,Ansible 將會通過 SSH 連接並行地在web1、web2、web3上面安裝、配置、運行 Nginx 服務。

"運行 Ansible 的 playbook 對 3 台 Web 伺服器進行配置"

Ansible 系統架構

"Ansible 基本架構"

  • 核心引擎:即 Ansible。
  • 核心模組(core modules):Ansible 模組資源分發到遠程節點使其執行特定任務或匹配一個特定的狀態。
  • 自定義模組(custom modules)
  • 插件(plugins):模組功能的補充,藉助插件完成記錄日誌、郵件等功能。
  • 劇本(playbook):定義 Ansible 任務的配置文件,可將多個任務定義在一個劇本中,由 Ansible 自動執行,可由控制主機運行多個任務,同時對多台遠程主機進行管理。
  • 連接插件(connectior plugins):Ansible 基於連接插件連接到各個主機,負責和被管節點實現通訊。因為支援除SSH連接方法外的其他連接方法,所以需要連接插件。
  • 主機清單(host inventory):定義 Ansible 管理的主機策略。

Ansible 採用 paramiko 協議庫,通過 SSH 或 ZeroMQ 等連接主機。Ansible 在控制主機將 Ansible 模組通過 SSH協議推送到被管節點執行,執行完自動刪除。控制主機與被管節點之間支援 local、SSH、ZeroMQ 三種連接方式,默認使用基於 SSH 連接,在大規模情況下,使用 ZeroMQ 連接方式執行速度更快。

任務執行模式

Ansible 系統由控制主機對被管節點的操作方式可分為兩類,即 ad-hoc 和 playbook。

  • ad-hoc 模式使用單個模組,支援批量執行單條命令。
  • playbook 模式是 Ansible 主要管理方式,playbook 通過多個 task 集合完成一類功能。(可以把 playbook 理解為通過組合多條ad-hoc 操作的配置文件)

"Ansible 執行過程"

Ansible 特性

Ansible 是基於一致性、安全性、高可靠性設計的輕量級自動化工具,具有功能強大、部署便捷、描述清晰等特性,很好地解決了統一配置、統一部署、流程編排等複雜的 IT 自動化管理問題。

Ansible 功能特性

  1. 語法簡單、易讀
  2. 不需要再被管節點安裝客戶端軟體
  3. 基於推送(Push)方式
  4. 方便管理小規模場景
  5. 大量內置模組
  6. 非常輕量級的抽象層

Ansible 與其他配置管理的對比

項目 Puppet SaltStack Ansible
開發語言 Ruby Python Python
是否有客戶端
是否支援二次開發 不支援 支援 支援
伺服器與遠程機器通訊協議 標準 SSL 協議 使用AES加密 使用 OpenSSH
配置文件格式 Ruby語法格式 YAML YAML

與其他自動化工具比較,Ansible 不需要安裝客戶端就可以輕鬆地管理、配置。
"Ansible 自動化運維方式"

總結

Ansible 的關鍵想法是電腦是一組,而不是一個個分開的機器,即「多層編排」的思想。避免了證書交換,以及反向解析 DNS 和 NTP 的問題。YAML的配置文件格式,簡單易用。