Ansible - 概念介紹


說明

本系列使用 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是自由開源的配置和自動化工具。

主要特點

- 無客戶端模式(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包管理模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章