1, Ansible 發展史
1.1 Ansible
- 創始人,Michael DeHaan(Cobbler 與 Func 的做者)
- 2012-03-09,發佈 0.0.1 版,紅帽收購
- 2015-10-17,Red Hat 宣佈收購
1.2 同類自動化工具 GitHub 關注程度(2016-07-10)
2,Ansible 特性
- 模塊化:調用特定的模塊,完成特定任務
- 有 Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模塊
- 支持自定義模塊
- 基於 Python 語言實現
- 部署簡單,局域 Python 和 SSH (默認已安裝),agentless
- 安全,基於 OpenSSH
- 支持 Playbook 編排任務
- 冪等性:一個任務執行1遍和執行n遍效果同樣,不因重複執行帶來之外狀況
- 無需代理不依賴PKI(無需ssl)
- 可以使用任何編程語言寫模塊
- YAML 格式,編排任務,支持豐富的數據結構
- 較強大的多層解決方案
3,ansible 架構
4,Ansible 工做原理
5,Ansible 主要組成部分
- ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義 Ansible 任務集的配置文件,有 Ansible 順序依次執行,一般是 JSON 格式的 YML 文件
- INVEVTORY:Ansible 管理主機的清單 /etc/ansible/hosts
- MODULES:Ansible 執行命令的功能模塊,多數爲內置核心模塊,也可自定義
- PLUGINS:模塊功能的補充,如鏈接類型插件、循環插件、變量插件、過濾插件等,該功能不經常使用
- API:供第三方程序調用的程序編程接口
- ANSIBLE:組合 INVENTORY、API、MODULES、PLUGINS 的綠框,能夠理解爲 ansible 命令工具,氣味核心執行工具
5.1 Ansible 命令執行來源:
- USER,普通用戶,即 SYSTEM ADMINISTRATOR
- CMDB(配置管理數據庫)API調用
- PUBLIC/PRIVATE CLOUD API 調用
- USER -> Ansible Playbook -> Ansible
5.2 利用 ansible 實現管理的方式
- Ad-Hoc 即 ansible 命令,主要用於臨時命令使用場景
- Ansible-playbook 主要用於長期規劃好的,大型項目的場景,須要有提早的規劃
5.3 Ansible-playbook (劇本)執行過程
- 將已有編排好的任務集寫入 Ansible-Playbook
- 經過ansible-playbook 命令分拆任務集逐條 ansible 命令,按預約規則逐條執行
5.4 Ansible 主要操做對象:
5.5 注意事項
- 執行 ansible 的主機通常稱爲主控端,中控,master 或堡壘機
- 主控端 Python 版本須要 2.6 及以上
- 被控端 Python 版本小於 2.4 須要安裝 Python-simplejson
- 被控端如開啓 SELinux 須要安裝 libselinux-python
- windows 不能作爲主控端
6,安裝
# yum info ansible
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Installed Packages
Name : ansible
Arch : noarch
Version : 2.7.7
Release : 1.el7
Size : 60 M
Repo : installed
From repo : epel
Summary : SSH-based configuration management, deployment, and task execution system
URL : http://ansible.com
License : GPLv3+
Description : Ansible is a radically simple model-driven configuration management,
: multi-node deployment, and remote task execution system. Ansible works
: over SSH and does not require any software or daemons to be installed
: on remote nodes. Extension modules can be written in any language and
: are transferred to managed machines automatically.
yum install -y ansible
# ansible --version
ansible 2.7.7
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
7, 相關文件
7.1 配置文件
/etc/ansible/ansible.cfg # 主配置文件,配置 ansible 工做特性
/etc/ansible/hosts # 主機清單
/etc/ansible/roles/ # 存放角色的目錄
7.2 程序
/usr/bin/ansible # 主程序,臨時命令執行工具
/usr/bin/ansible-doc # 查看配置文件,模塊功能查看工具
/usr/bin/ansible-galaxy # 下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook # 定製自動化任務,編排劇本工具 /usr/bin/ansible-pull 遠程執行命令的工具
/usr/bin/ansible-vault # 文件加密工具
/usr/bin/ansible-console # 基於 Console 界面與用戶交互的執行工具
8,主機清單 inventory
- Inventory 主機清單
- ansible 的主要功能用在於批量主機操做,爲了便捷地使用其中的部分主機,能夠在inventory file 中將其分組命名
- 默認的 inventory file 爲 /etc/ansible/hosts
- inventory file 能夠有多個,且也能夠經過 Dynamic Inventory 來動態生成
- /etc/ansible/hosts 文件格式
- inventory 文件遵循 INI 文件風格,中括號中的字符爲組名。能夠將同一個主機同時歸併到多個不一樣的組中;此外,當如若目標主機使用了非默認的SSH端口,還能夠在主機名稱以後使用冒號加端口來代表
ntp.example.com
[webservers]
www1.example.com:222
www2.example.com
[dbservers]
db1.example.com
db2.example.com
[servers]
192.168.1.100
192.168.1.111
- 若是主機名稱遵循類似的命名模式,還可使用列表的方式標識各主機
[webservs]
www[01:100].example.com
[dbsrvs]
db-[a:f].example.com
[srvs]
192.168.1.10[0:1]
9, Ansible 配置文件
- Ansible 配置文件 /etc/ansible/ansible.cfg (通常保持默認)
- [defaults]
# inventory = /etc/ansible/hosts # 主機列表配置文件
# library = /usr/share/my_modules/ # 庫文件存放目錄
# remote_tmp = $HOME/.ansible/tmp # 臨時py命令文件存放遠程主機目錄
# loacl_tmp = $HOME/.ansible/tmp # 本機的臨時命令執行目錄
# forks = 5 # 默認併發數
# sudo_user = root # 默認 sudo 用戶
# ask_sudo_pass = True # 每次執行 ansible 命令是否詢問 ssh 密碼
# ask_pass = True
# remote_port = 22
# host_key_checking = False # 檢查對應服務器的host_key,建議取消註釋
# log_path = /var/log/ansible.log # 日誌文件