說明
本系列使用 ansible 2.9.27 版本來說明和彙總相關信息。
# cat /etc/system-release
Red Hat Enterprise Linux Server release 7.8 (Maipo)
#
# uname -a
Linux test01 3.10.0-1160.36.2.el7.x86_64 #1 SMP Wed Jul 21 11:57:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
#
# ansible --version # ansible版本
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/vipxf/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
#
# yum info ansible # 包信息
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
Installed Packages
Name : ansible
Arch : noarch
Version : 2.9.27
Release : 1.el7
Size : 103 M
Repo : installed
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.
#
Ansible
Ansible是自由開源的配置和自動化工具。
- 官方網站 https://www.ansible.com/
- 官方文檔 https://docs.ansible.com/ansible/latest/
- 安裝包 https://releases.ansible.com/
主要特點
- 無客戶端模式(agentless),無侵入性,只需在主控端部署Ansible環境,被控端無需做任何操作
- 豐富的內置模塊滿足絕大部分場景需求,調用特定模塊可以完成特定任務
- 基於Python研發,支持API及自定義模塊,二次開發相對容易
- 默認使用SSH協議和節點進行通信
- 強大的playbook機制,配置語法使用yaml和Jinja模板語言,便於配置管理和實現複雜功能
- 具有冪等性,自動跳過沒有變化的部分,也就是一個操作執行一次和多次的結果相同
- 對雲計算平臺和大數據提供了支持
使用模式
- 結合CMDB:通過CMDB下發指令調用Ansible完成相關操作
- API調用:遠程調用Ansible提供豐富的API接口
- Ad-Hoc命令:直接通過Ad-Hoc命令集執行相關操作,多用於非固化需求、臨時性操作和二次開發接口調用的場景
- playbook執行:運行Playbook按序執行任務集
Ansible由控制主機對被管節點的操作方式爲 Ad-Hoc 和 Playbook。
- Ad-Hoc模式使用單個模塊,支持批量執行單條命令。
- Playbook模式是Ansible主要管理方式,Playbook通過多個Task集合完成一類功能,可以簡單地把 Playbook理解爲通過組合多條Ad-Hoc操作的配置文件。
架構及流程
# Ansible 主要由五部分組成
- Ansible Ansible核心
- Modules 包括核心模塊和自定義模塊
- Plugins 插件,對模塊功能的補充,包含連接插件、郵件插件等
- Playbooks 劇本,定義任務的配置文件
- Inventory 定義管理主機的清單
# ansible命令執行過程
1. Ansible加載配置文件,默認爲/etc/ansible/ansible.cfg
2. Ansible讀取Inventory文件(默認爲/etc/ansible/hosts),獲取管理主機列表及相關變量信息
3. 根據參數調用對應配置和模塊,產生臨時py文件
4. 通過SSH方式傳輸到目標主機(默認爲~/.ansible/tmp目錄)
5. 設置臨時py文件的執行權限,執行操作並返回結果
6. 刪除臨時py文件並退出
基礎信息
主要目錄
# 配置文件目錄
/etc/ansible/
- ansible.cfg # Ansible 主配置文件
- hosts # Inventory,定義目標主機清單的文件
- roles # 角色目錄,用於定義角色
# 執行文件目錄
/usr/bin/
# Lib庫依賴目錄
/usr/lib/python2.7/site-packages/ansible
# Help文檔目錄
/usr/share/doc/ansible-2.9.27/
# Ansible模塊目錄
/usr/share/ansible/
- collections # 目錄
- plugins # 插件模塊目錄
- roles # 角色模塊目錄
配置文件
默認Ansible配置文件存放在 /etc/ansible/ansible.cfg
# 常見參數
inventory = /etc/ansible/hosts # 主機清單inventory文件的位置
library = /usr/share/ansible # 存放Ansible模塊的目錄,支持用“:”隔開多個目錄
forks = 5 # 併發連接數,默認爲5
remote_port = 22 # 連接主機節點的端口,默認爲22端口,建議修改
host_key_checking = False # 是否檢查SSH主機的密鑰,值爲True/False
timeout = 60 # SSH連接的超時時間,單位爲秒
log_path = /var/log/ansible.log # 存儲ansible日誌的文件(默認不開啓)
執行文件
$ ll /usr/bin/*ansible* # 相關執行文件
lrwxrwxrwx 1 root root 20 Mar 17 2022 /usr/bin/ansible -> /usr/bin/ansible-2.7
lrwxrwxrwx 1 root root 20 Mar 17 2022 /usr/bin/ansible-2 -> /usr/bin/ansible-2.7
-rwxr-xr-x 1 root root 5933 Jan 16 2022 /usr/bin/ansible-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-config -> ansible
-rwxr-xr-x 1 root root 13432 Jan 16 2022 /usr/bin/ansible-connection
lrwxrwxrwx 1 root root 28 Mar 17 2022 /usr/bin/ansible-console -> /usr/bin/ansible-console-2.7
lrwxrwxrwx 1 root root 28 Mar 17 2022 /usr/bin/ansible-console-2 -> /usr/bin/ansible-console-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-console-2.7 -> ansible
lrwxrwxrwx 1 root root 24 Mar 17 2022 /usr/bin/ansible-doc -> /usr/bin/ansible-doc-2.7
lrwxrwxrwx 1 root root 24 Mar 17 2022 /usr/bin/ansible-doc-2 -> /usr/bin/ansible-doc-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-doc-2.7 -> ansible
lrwxrwxrwx 1 root root 27 Mar 17 2022 /usr/bin/ansible-galaxy -> /usr/bin/ansible-galaxy-2.7
lrwxrwxrwx 1 root root 27 Mar 17 2022 /usr/bin/ansible-galaxy-2 -> /usr/bin/ansible-galaxy-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-galaxy-2.7 -> ansible
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-inventory -> ansible
lrwxrwxrwx 1 root root 29 Mar 17 2022 /usr/bin/ansible-playbook -> /usr/bin/ansible-playbook-2.7
lrwxrwxrwx 1 root root 29 Mar 17 2022 /usr/bin/ansible-playbook-2 -> /usr/bin/ansible-playbook-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-playbook-2.7 -> ansible
lrwxrwxrwx 1 root root 25 Mar 17 2022 /usr/bin/ansible-pull -> /usr/bin/ansible-pull-2.7
lrwxrwxrwx 1 root root 25 Mar 17 2022 /usr/bin/ansible-pull-2 -> /usr/bin/ansible-pull-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-pull-2.7 -> ansible
lrwxrwxrwx 1 root root 26 Mar 17 2022 /usr/bin/ansible-vault -> /usr/bin/ansible-vault-2.7
lrwxrwxrwx 1 root root 26 Mar 17 2022 /usr/bin/ansible-vault-2 -> /usr/bin/ansible-vault-2.7
lrwxrwxrwx 1 root root 7 Mar 17 2022 /usr/bin/ansible-vault-2.7 -> ansible
$
常見模塊
Ansible基於模塊工作,本身沒有批量部署的能力。
可以理解爲Ansilbe提供了框架來運行具備批量部署能力的指定功能模塊。
# 通過 ansilbe-doc 命令查看模塊幫助信息,類似man命令
ansible-doc -l # List available plugins
ansible-doc -l | grep "copy" # 查找名稱包含copy字符的模塊
ansible-doc <module_name> # 顯示模塊的說明信息
ansible-doc -s <module_name> # Show playbook snippet for specified plugin(s)
# 常見模塊
## command 在指定主機上執行命令(默認模塊),不支持變量、管道、重定向等shell特性
## ping 測試指定主機連接性
## shell 在指定主機上執行命令或運行腳本,打開遠程主機的shell進程的一個子shell運行命令,支持shell的變量、管道、重定向等特性
## script 調用本地腳本在遠程主機執行
## stat 獲取文件信息
## setup 主機系統信息,收集facts
## copy 複製文件到遠程主機的指定位置
## fetch 複製指定主機的文件到本地
## get_url 在遠程主機下載指定的url地址,支持文件校驗
## file 設置文件屬性
## cron 設置計劃任務
## group 管理用戶組
## user 管理用戶
## service 管理服務狀態
## yum 管理程序包
## hostname 管理主機名稱
## git 代碼及版本管理
## B 後臺管理
## assemble 文件組裝,可以將多份配置文件組裝成一份配置文件
## ini ini文件管理模塊
## url web請求,發送HTTP協議請求並得到返回的狀態碼
## apt APT包管理模塊