1. 程式人生 > >企業級自動化運維工具應用實戰ansible

企業級自動化運維工具應用實戰ansible

特性:

  • 模組化:呼叫特定的模組,完成特定任務
  •  有Paramiko, PyYAML, Jinja2(模板語言)三個關鍵模組
  •  支援自定義模組
  •  基於Python語言實現
  •  部署簡單,基於python和SSH(預設已安裝), agentless
  •  安全,基於OpenSSH
  •  支援playbook編排任務
  •  冪等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況
  •  無需代理不依賴PKI(無需ssl)
  •  可使用任何程式語言寫模組
  •  YAML格式,編排任務,支援豐富的資料結構
  •  較強大的多層解決方案

ansible架構

 Ansible工作原理

Ansible主要組成部分

  • ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置檔案,由Ansible順序依次執行,通常是JSON格式的YML檔案
  • INVENTORY: Ansible管理主機的清單/etc/anaible/hosts
  • MODULES: Ansible執行命令的功能模組,多數為內建核心模組,也可自定義
  • PLUGINS:模組功能的補充,如連線型別外掛、迴圈外掛、變數外掛、過濾外掛等,該功能不常用
  • API:供第三方程式呼叫的應用程式程式設計介面
  • ANSIBLE:組合INVENTORY、 API、 MODULES、 PLUGINS的綠框, 可以理解為是ansible命令工具,其為核心執行工具

Ansible命令執行來源:

  • USER,普通使用者,即SYSTEM ADMINISTRATOR
  • CMDB(配置管理資料庫) API 呼叫
  • PUBLIC/PRIVATE CLOUD API呼叫
  • USER-> Ansible Playbook -> Ansibile

利用ansible實現管理的方式:

  • Ad-Hoc 即ansible命令,主要用於臨時命令使用場景
  • Ansible-playbook 主要用於長期規劃好的,大型專案的場景,需要有前提的規劃

Ansible-playbook(劇本)執行過程:

  1. 將已有編排好的任務集寫入Ansible-Playbook
  2. 通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行

Ansible主要操作物件:  HOSTS主機  NETWORKING網路裝置 注意事項

  1.  執行ansible的主機一般稱為主控端,中控, master或堡壘機
  2.  主控端Python版本需要2.6或以上
  3.  被控端Python版本小於2.4需要安裝python-simplejson
  4.  被控端如開啟SELinux需要安裝libselinux-python
  5.  windows不能做為主控端  

安裝

1、rpm包安裝: EPEL源 yum install ansible /2、編譯安裝: 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 3、Git方式: git clone git://github.com/ansible/ansible.git --recursive cd ./ansible source ./hacking/env-setup 4、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

相關檔案

  • 配置檔案

/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/ansiblepull 遠端執行命令的工具 /usr/bin/ansible-vault 檔案加密工具 /usr/bin/ansible-console 基於Console介面與使用者互動的執行工具

  • 主機清單inventory

Inventory 主機清單 ansible的主要功用在於批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名 預設的inventory file為/etc/ansible/hosts inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成 /etc/ansible/hosts檔案格式 inventory檔案遵循INI檔案風格,中括號中的字元為組名。可以將同一個主機同時歸併到多個不同的組中;此外,當如若目標主機使用了非預設的SSH埠,還可以在主機名稱之後使用冒號加埠號來標明     ntp.magedu.com     [webservers]     www1.magedu.com:2222     www2.magedu.com     [dbservers]     db1.magedu.com     db2.magedu.com     db3.magedu.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 #日誌檔案