什麼是 Ansible
- 開源部署工具,也是一個自動化運維工具
- 開發語言:Python
Ansible 的特性
- 模組化部署管理:呼叫特定的模組,完成特定任務
- 三個關鍵模組:Paramiko(python 對 ssh 的實現),PyYAML,Jinja2(模板語言)
- 安全:基於 OpenSSH 協議通訊
- 跨平臺:支援 Linux、Win、UNIX、物理機、虛擬機器、雲平臺、網路
- 部署簡單,無需編譯:基於 Python 和 SSH(預設已裝),agentless(免代理),無需代理不依賴 PKI(無需 SSL)
- 支援自定義模組:支援任何程式語言編寫模組(二次開發)
- 冪等性:一個任務執行一遍和執行 n 遍的結果是一樣的,不因重複執行而帶來意外情況
- 支援 playbook 編排任務,YAML 語法格式,編排任務,支援豐富的資料結構
- 強大的多層解決方案 role
- 支援異構 IT 架構
Ansible 的應用場景
- 批量修改系統配置
- 批量程式部署
- 批量執行命令
Ansible、Cherf、Saltstack 的不同
Saltstack
- Ruby 語言編寫
- C/S架構
- 配置需要 Git 依賴
- Recipe 指令碼編寫規範,需要 Ruby 程式設計經驗
Saltstack
- Python 語言編寫
- C/S架構
- 模組化配置管理
- YAML 指令碼編寫規範
- 適合大規模叢集部署
Ansible
- Python 語言編寫
- 無 Client
- 模組化配置管理
- Playbook 指令碼編寫規範
- 易於上手,適合中小規模快速部署
Ansible 最大的優勢
- 符合最近幾年流行的敏捷開發流程,快速開發快速部署交付
- 我們需要有高效、敏捷的部署工具,加快產品交付
- 相容主流雲端計算下所有用到的基礎工具
Ansible 的架構
- ANSIBLE PLAYBOOKS :任務劇本,編排定義 Ansible 任務集的配置檔案,由 Ansible 順序執行,通常為 json 格式的 YAML 檔案
- INBENTORY:需要 Ansible 管理主機的清單列表 /etc/anaible/hosts
- MODULES:Ansible 的執行命令的功能模組,多數為內建核心模組,也可以自定義
- PLUGINS:模組功能補充,比如連結型別外掛、迴圈外掛、變數外掛、過濾外掛等,不常用
- API:供第三方程式呼叫的應用程式程式設計介面
- HOSTS:待 Ansible 管理的主機集
- NETWORKING:網路
它們互相之間都是通過 SSH 互相呼叫
Ansible 命令執行來源
- USERS:普通使用者
- PLAYBOOKS:任務劇本
- CMDB:配置管理資料庫,通過 API 呼叫
- PUBLIC/PRIVATE CLOUD:公有云、私有云,通過 API 呼叫
Ansible 的概念
Control node
控制節點
- 可以是任何安裝了 Ansible 的計算機,但不能是 Window 系統
- 可以從任意控制節點執行命令和 playbook,然後呼叫 /usr/bin/ansible 或 /usr/bin/ansible-playbook
- 可以將任何安裝了 Python 的計算機作為控制節點,比如膝上型電腦、桌上型電腦、伺服器
Managed nodes
受管節點
- 受管節點不需要安裝 Ansible
- 它可以是通過 Ansible 管理的網路裝置或伺服器
- 它也可以稱為 hosts(主機)
Inventory
清單
- 需要 Ansible 管理的主機清單
- 它也可以稱為 hostfile(主機檔案)
- 它有多種方式去管理組織主機的資訊
Modules
模組
- 執行程式碼單元
- 在 python 中,一個模組是一個 .py 檔案,這裡也可以這樣理解,每個模組都會有特定的功能
- 可以通過 task 呼叫單個模組,也可以通過 playbook 呼叫多個不同的模組
- Ansible 目前有 3000+ 個模組
Tasks
任務
- 行動單元
- 可以使用臨時命令(ad-hoc)每次執行一個任務
Playbooks
劇本(直譯)
- 儲存任務的有序列表,方便可以按順序重複執行這些任務(複用性)
- playbook 可以包括變數、任務
- 採用 YAML 語法格式