什麼是ansible?python
ansible是個什麼東西呢?官方的title是「Ansible is Simple IT Automation」——簡單的自動化IT運維管理工具。這個工具的目標有這麼幾項:讓咱們自動化部署APP;自動化管理配置項;自動化的持續交付;自動化的(AWS)雲服務管理。基於Python開發,可實現對多臺服務器進行批量配置、程序的部署及指令的運行。大大減小了在運維工程中的工做量。shell
ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:ruby
(1)、鏈接插件connection plugins:負責和被監控端實現通訊;服務器
(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;架構
(3)、各類模塊核心模塊、command模塊、自定義模塊;框架
(4)、藉助於插件完成記錄日誌郵件等功能;less
(5)、playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。運維
整體架構ssh
Ansible工做機制ide
Ansible 在管理節點將 Ansible 模塊經過 SSH 協議(或者 Kerberos、LDAP)推送到被管理端執行,執行完以後自動刪除,可使用 SVN 等來管理自定義模塊及編排
由上面的圖能夠看到 Ansible 的組成由 5 個部分組成:
Ansible:核心
Modules:包括 Ansible 自帶的核心模塊及自定義模塊
Plugins:完成模塊功能的補充,包括鏈接插件、郵件插件等
Playbooks:網上不少翻譯爲劇本,我的以爲理解爲編排更爲合理;定義 Ansible 多任務配置文件,有 Ansible 自動執行
Inventory:定義 Ansible 管理主機的清單
優勢
(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;
(2)、批量任務執行能夠寫成腳本,並且不用分發到遠程就能夠執行;
(3)、使用python編寫,維護更簡單,ruby語法過於複雜;
(4)、支持sudo。
常見的運維工具的工做模式有兩種agent和agentless。ansible屬於後者,即在被控制端沒有代理運行。ansible基於ssh實現信息的傳輸,且在運行過程當中具備冪等性(同一個操做執行屢次,結果相同,不會重複執行)
ansible的簡單應用
默認狀況下,Ansible1.2 以前的版本,須要加參數-c 顯式指定;Ansible1.3+版本默認使用Openssh 來遠程鏈接主機,並開啓 ControlPersist 來優化鏈接速度和認證;若是使用 RHEL6 系做爲 Ansible 控制端,因爲 OpenSSH 版本太老沒法支持 ControlPersist,這時候 Ansible 將會使用高效的 Python 實現的 OpenSSH 即 paramiko;若果想使用原生的 OpenSSH 鏈接被控端,須要升級OpenSSH 到 5.6+或者選擇 Ansible 的加速模式針對不支持 ControlPersist 的系統如 RHEL6 能夠經過使用 Ansible 加速模式或者 SSH pipelining( pipelining=on )進行優化來提升鏈接速度
Ansible 加速模式支持 RHEL6 控制端和其餘受限的環境
加速模式使用方法:
在定義的 playbooks 裏面添加 accelerate: true 參數
---
- hosts: all
accelerate: true
tasks:
- name: some task
command: echo ` item `
with_items:
- foo
- bar
- baz
更改 Ansible 用於加速鏈接的端口,使用參數 accelerate_port,端口配置能夠設置系統環境變量ACCELERATE_PORT或者修改 ansible.cfg 配置文件,accelerate_multi_key容許使用多把密鑰
[accelerate]
accelerate_port = 5099
---
- hosts: all
accelerate: true
# default port is 5099
accelerate_port: 10000
accelerate_multi_key = yes
註釋:Ansible 加速模式支持 sudo 操做,但須要註釋 /etc/sudoers #Defaults requiretty;
sudo 密碼還未支持,因此 sudo 執行須要 NOPASSWD
官方鼓勵使用 SSH Keys,也能夠經過參數--ask-pass 及--ask-sudo-pass 使用密碼
真正實現批量部署的是ansible中的模塊,經常使用的模塊有command,user,copy,cron,file,ping,yum,service,shell,script......
命令格式:ansible <host-pattern>[-m module] [-a args]
host-pattern # 目標主機的地址,通常是配置文件中的組名
-m module # 指定應用的模塊
-a args # 指定模塊的參數
ansible-doc -l # 查看全部可用的模塊
ansible-doc moduleName # 查看指定模塊的幫助信息
限於篇幅太長,請你們移步這裏進行下載查看,謝謝!