《Ansible自動化運維:技術與最佳實踐》第一章讀書筆記
- 2019 年 10 月 3 日
- 筆記
Ansible 架構及特點
第一章主要講的是 Ansible 架構及特點,主要包含以下內容:
- Ansible 軟體
- Ansible 架構模式
- Ansible 特性
Ansible 軟體
Ansible 的編排引擎可以完成配置管理、流程式控制制、資源部署等工作。 Ansible 基於 Python語言實現,由 Paramiko 和 PyYAML 兩個關鍵模組構建。
Ansible 應用領域
- 配置管理
- 服務即時開通
- 應用部署
- 流程編排
- 監控告警
- 日誌記錄
Ansible 架構模式
Ansible 維護模式通常由控制機和被管機組成。控制機是用來安裝 Ansible 工具軟體、執行維護指令的伺服器或工作站,是 Ansible 維護的核心。被管機是運行業務服務的伺服器,由控制機通過SSH來進行管理。
Ansible 管理方式
Ansible 是一個模型驅動的配置管理器,支援多節點發布、遠程任務執行。默認使用SSH進行遠程連接。無需再被管節點上安裝附加軟體,可使用各種程式語言進行擴展。
Ansible 管理系統由控制主機和一組被管節點組成。控制主機直接通過SSH控制被管節點,被管節點通過 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 系統架構
- 核心引擎:即 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 是基於一致性、安全性、高可靠性設計的輕量級自動化工具,具有功能強大、部署便捷、描述清晰等特性,很好地解決了統一配置、統一部署、流程編排等複雜的 IT 自動化管理問題。
Ansible 功能特性
- 語法簡單、易讀
- 不需要再被管節點安裝客戶端軟體
- 基於推送(Push)方式
- 方便管理小規模場景
- 大量內置模組
- 非常輕量級的抽象層
Ansible 與其他配置管理的對比
項目 | Puppet | SaltStack | Ansible |
---|---|---|---|
開發語言 | Ruby | Python | Python |
是否有客戶端 | 有 | 有 | 無 |
是否支援二次開發 | 不支援 | 支援 | 支援 |
伺服器與遠程機器通訊協議 | 標準 SSL 協議 | 使用AES加密 | 使用 OpenSSH |
配置文件格式 | Ruby語法格式 | YAML | YAML |
與其他自動化工具比較,Ansible 不需要安裝客戶端就可以輕鬆地管理、配置。
總結
Ansible 的關鍵想法是電腦是一組,而不是一個個分開的機器,即「多層編排」的思想。避免了證書交換,以及反向解析 DNS 和 NTP 的問題。YAML的配置文件格式,簡單易用。