什么是 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 語法格式