運維自動化之ANSIBLE(基礎知識)

Ansible發展史

Ansible
  創始人,Michael DeHaan( Cobbler 與 Func 的作者)
  2012-03-09,發佈0.0.1版,紅帽收購
  2015-10-17,Red Hat宣佈收購
  Ansible是一種agentless(基於ssh 前提需要做ssh密鑰對匹配),可實現批量配置、命令執行和控制,基於Python實現的自動化運維工具。
同類自動化工具GitHub關注程度(2018-06-23)

運維自動化之ANSIBLE(基礎知識)

Ansible特性

1、模塊化:調用特定的模塊,完成特定任務
2、有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模塊
3、支持自定義模塊
4、基於Python語言實現
5、部署簡單,基於python和SSH(默認已安裝),agentless
6、安全,基於OpenSSH
7、支持playbook編排任務
8、冪等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況
9、無需代理不依賴PKI(無需ssl)
10、可使用任何編程語言寫模塊
11、YAML格式,編排任務,支持豐富的數據結構
12、較強大的多層解決方案

Ansible架構

運維自動化之ANSIBLE(基礎知識)

Ansible工作原理

運維自動化之ANSIBLE(基礎知識)

Ansible主要組成部分

1、ANSIBLE PLAYBOOKS:
  任務劇本(任務集),編排定義Ansible任務集的配置文件,由Ansible順序依次執行,通常是JSON格式的YML文件.
2、INVENTORY:
  Ansible管理主機的清單/etc/anaible/hosts.
3、MODULES:
  Ansible執行命令的功能模塊,多數爲內置核心模塊,也可自定義.
4、PLUGINS:
  模塊功能的補充,如連接類型插件、循環插件、變量插件、過濾插件等,該功能不常用
5、API:
  供第三方程序調用的應用程序編程接口
6、ANSIBLE:
  組合INVENTORY、API、MODULES、PLUGINS的綠框,可以理解爲是ansible命令工具,其爲核心執行工具
7、Ansible命令執行來源:
  USER,普通用戶,即SYSTEM ADMINISTRATOR
  CMDB(配置管理數據庫) API 調用
  PUBLIC/PRIVATE CLOUD API調用
  USER-> Ansible Playbook -> Ansibile
8、利用ansible實現管理的方式:
  Ad-Hoc 即ansible命令,主要用於臨時命令使用場景
  Ansible-playbook 主要用於長期規劃好的,大型項目的場景,需要有前提的規劃
9、Ansible-playbook(劇本)執行過程:
  將已有編排好的任務集寫入Ansible-Playbook
  通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行
10、Ansible主要操作對象:
  HOSTS主機
  NETWORKING網絡設備
11、注意事項:
  執行ansible的主機一般稱爲主控端,中控,master或堡壘機
  主控端Python版本需要2.6或以上
  被控端Python版本小於2.4需要安裝python-simplejson
  被控端如開啓SELinux需要安裝libselinux-python
  windows不能做爲主控端

Ansible安裝

rpm包安裝:
  Ansible基於EPEL源
    CentOS6: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    CentOS7: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/ epel-7.repo
    yum -y install ansible
編譯安裝:
  yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
  tar xf ansible-1.5.4.tar.gz
  cd ansible-1.5.4
  python setup.py build
  python setup.py install
  mkdir /etc/ansible
  cp -r examples/* /etc/ansible
Git方式:
  git clone git://github.com/ansible/ansible.git --recursive
  cd ./ansible
  source ./hacking/env-setup
pip安裝: pip是安裝Python包的管理器,類似yum
  yum install python-pip python-devel
  yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
  pip install --upgrade pip
  pip install ansible --upgrade
確認安裝: ansible --version

Ansible相關文件

配置文件
  /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
  /etc/ansible/hosts 主機清單
  /etc/ansible/roles/ 存放角色的目錄
程序
  /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界面與用戶交互的執行工具

Ansible 主機清單inventory

Inventory 主機清單
  ansible的主要功用在於批量主機操作,爲了便捷地使用其中的部分主機,可以在inventory file中將其分組命名
默認的inventory file爲/etc/ansible/hosts
inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成
/etc/ansible/hosts文件格式
inventory文件遵循INI文件風格,中括號中的字符爲組名。可以將同一個主機同時歸併到多個不同的組中;此外,當如若目標主機使用了非默認的SSH端口,還可以在主機名稱之後使用冒號加端口號來標明
    ntp.dklwj.com
    [webservers]
    www1.dklwj.com:2222
    www2.dklwj.com
    [dbservers]
    db1.dklwj.com
    db2.dklwj.com
    db3.dklwj.com
如果主機名稱遵循相似的命名模式,還可以使用列表的方式標識各主機
示例:
  [websrvs]
  www[01:100].example.com

  [dbsrvs]
  db-[a:f].example.com

Ansible 配置文件

Ansible 配置文件
  /etc/ansible/ansible.cfg (一般保持默認)

[defaults]  
#inventory = /etc/ansible/hosts # 主機列表配置文件  
#library = /usr/share/my_modules/ # 庫文件存放目錄  
#remote_tmp = $HOME/.ansible/tmp #臨時py命令文件存放在遠程主機目錄  
#local_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 #日誌文件

Ansible系列命令

ansible ansible-doc ansible-playbook ansible-vault
ansible-console ansible-galaxy ansible-pull

ansible-doc: 顯示模塊幫助
  ansible-doc [options] [module...]
  -a 顯示所有模塊的文檔
  -l, --list 列出可用模塊
  -s, --snippet顯示指定模塊的playbook片段
示例:
  ansible-doc –l     列出所有模塊
  ansible-doc ping    查看指定模塊幫助用法
  ansible-doc –s ping  查看指定模塊幫助用法

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