《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的配置文件格式,簡單易用。

Tags: