Ansible - - 工做架構及原理

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 主要操做對象:

  • HOSTS 主機
  • NETWORKING 網絡設備

5.5 注意事項

  • 執行 ansible 的主機通常稱爲主控端,中控,master 或堡壘機
  • 主控端 Python 版本須要 2.6 及以上
  • 被控端 Python 版本小於 2.4 須要安裝 Python-simplejson
  • 被控端如開啓 SELinux 須要安裝 libselinux-python
  • windows 不能作爲主控端

6,安裝

  • yum 安裝信息
# 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.
  • rpm 包安裝: EPEL 源
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    # 日誌文件
相關文章
相關標籤/搜索