天天看點

anisble

一、簡介

1.1 基本概念:

ansible是一個基于python開發的輕量級自動化運維管理工具,可以用來批量執行指令,安裝程式,支援playbook編排。它通過ssh協定來連接配接主機,去中心化,相對比puppet和saltstack無需安裝客戶即可實作檔案傳輸、指令執行、應用部署、配置管理、任務編排等,顯得更為簡單與輕量。ansible隻是提供一種架構,其基于子產品工作的,本身沒有批量部署。

1.2 核心元件:

(1)、連接配接插件connection plugins:負責和被監控端實作通信;

(2)、host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;

(3)、各種子產品核心子產品、command子產品、自定義子產品;

(4)、借助于插件完成記錄日志郵件等功能;

(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運作多個任務。

1.3 工具特性:

(1)、no agents:不需要在被管控主機上安裝任何用戶端;

(2)、no server:無伺服器端,使用時直接運作指令即可;

(3)、modules in any languages:基于子產品工作,可使用任意語言開發子產品;

(4)、yaml,not code:使用yaml語言定制劇本playbook;

(5)、ssh by default:基于SSH工作;

(6)、strong multi-tier solution:可實作多級指揮。

1.3.1 流程架構:

anisble

ansible如何工作:

Ansible預設是通過SSH通道來管理的,也就是它所說的免用戶端方式管理, 它底層是通過 paramiko 來實作的。

對Ansible底層工作機制感興趣的可以參考這個:http://www.the5fire.com/explore-the-ansible.html

ansible執行過程大體過程如下圖,其中暖色調的代表已經子產品化。

anisble

圖檔來源于:http://ju.outofmemory.cn/entry/67581

ansible有如下優點:

輕量級,無需在用戶端安裝agent,更新時,隻需在操作機上進行一次更新即可;

批量任務執行可以寫成腳本,而且不用分發到遠端就可以執行;

使用python編寫,維護更簡單;

使用push方式,控制節點向其他節點推方式,可先測試變更,友善控制管理。

支援sudo

缺點:

基于ssh,串行,故超過500台主機效率較低;

1.4ansible安裝

1.4.1、源碼安裝

源碼位址:https://pypi.python.org/packages/source/a/ansible/ansible-1.5.5.tar.gz

1.4.2、pip安裝

1.4.2、yum安裝

[root@ansible ~]#

[root@ansible ~]# rpm -qa | grep ansible # 檢查是否安裝

ansible-1.5.3-1.el6.noarch

[root@ansible ~]# yum install ansible -y # 沒有安裝的話,使用這個安裝即可

1.5、ansible組成介紹

1.5.1、包含檔案介紹

[root@ansible ~]# tree /etc/ansible/

/etc/ansible/

├── ansible.cfg # ansible的配置檔案

└── hosts # ansible的主倉庫 用來存儲需要管理的遠端主機的相關資訊

0 directories, 2 files

1.5.2、ansible其他元件介紹

ansible-doc 子產品文檔檢視器,很有用,使用ansible -l 顯示所有module清單,使用 ansible-doc <module_x> 來檢視module_x的詳細文檔,這裡不做太多介紹

ansible-playbook 傳說中的配置管理工具,如果你用過puppet或者saltstack,這個可以不用介紹了,如果你沒用過,也沒關系,花費20分鐘看下官方的Video。 掌握一件事情最好的辦法就是使用它,你可以下載下傳官方的example來學習

ansible-galaxy 和三星沒關系,你可以把他了解成ansible的pip,可以從galaxy.ansible.com下載下傳官方收錄的playbooks

ansible-pull 支援直接從git下載下傳playbook執行,需要遵循其規定的目錄格式,用處不是特别大,可以不關注

ansible-vault 如果你的配置檔案中含有敏感資訊,你可能并不希望他能被人看到,vault可以幫你加密/解密這個配置檔案,進階用法,請參照http://blog.ansibleworks.com/2014/02/19/ansible-vault/

1.5.3、ansible的Inventory介紹

ansible.cfg檔案不用去管,我們隻需要配置hosts檔案即可,hosts檔案也就是官方說的Inventory,

hosts檔案配置的幾種格式:

單純的寫主機名或ip,所屬組為all

#blue.example.com

#192.168.100.1

定義一個組

#[webservers]

#alpha.example.org

#beta.example.org

#192.168.1.100

組成員可以使用通配符來比對 www[001:006].example.com

如果你沒有使用公鑰,想要使用密碼,你也可以這樣寫(适用于第一次登陸控制)

格式:【主機名】 【主機位址】 【主機密碼】 預設是root使用者來進行的

[keepalived]

keepalived1 ansible_ssh_host=192.168.146.136 ansible_ssh_pass="test"

keepalived2 ansible_ssh_host=192.168.146.137 ansible_ssh_pass="test"

hosts檔案設定的參數官方給出的:

anisble

1.6、ansible的簡單使用

1.6.1、上傳公鑰到遠端主機

定義好了倉庫,那麼我們就需要把控制端的公鑰推送到遠端主機上 (稍後會有講到)

方法:1、使用expect+shell方式批量推送

方法:2、自己手動一個一個的推送

1.6.2、牛刀小試看看效果如何

好了,公鑰都傳到對方主機了,那麼我們來簡單的使用來試用下

[root@ansible ~]# ansible keepalived -a "uptime" # 預設使用command子產品

keepalived1 | success | rc=0 >>

13:07:24 up 7:59, 1 user, load average: 0.00, 0.00, 0.00

keepalived2 | success | rc=0 >>

13:07:31 up 7:58, 1 user, load average: 0.00, 0.00, 0.00

anisble幫助:

1.列出所有已安裝的子產品

[root@localhost ~]# ansible-doc –l

2.檢視某一個子產品的用法

[root@localhost ~]# ansible-doc –h

[root@localhost ~]# ansible-doc -s yum //檢視yum的用法

3.ansible-playbook

該指令是使用最多的指令,其通過讀取playbook 檔案後,執行相應的動作。

繼續閱讀