ansible安裝與部署

1、基礎介紹
python

1、簡介linux

ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:web

(1)、鏈接插件connection plugins:負責和被監控端實現通訊;shell

(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;數據庫

(3)、各類模塊核心模塊、command模塊、自定義模塊;vim

(4)、藉助於插件完成記錄日誌郵件等功能;安全

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

2、整體架構服務器

wKioL1h9h5KSF-NHAACMM5HM03c161.png-wh_50

3、工做機制架構

Ansible 在管理節點將 Ansible 模塊經過 SSH 協議(或者 Kerberos、LDAP)推送到被管理端執行,執行完以後自動刪除,可使用 SVN 等來管理自定義模塊及編排

wKioL1h9h72SgCfxAAPymC2S_cg467.png

以上是ansible工做原理圖,該圖是在架構圖的基本上進行的拓展。從上面的圖上能夠了解到:

1、管理端支持local 、ssh、zeromq 三種方式鏈接被管理端,默認使用基於ssh的鏈接---這部分對應基本架構圖中的鏈接模塊;

2、能夠按應用類型等方式進行Host Inventory(主機羣)分類,管理節點經過各種模塊實現相應的操做---單個模塊,單條命令的批量執行,咱們能夠稱之爲ad-hoc;

3、管理節點能夠經過playbooks 實現多個task的集合實現一類功能,如web服務的安裝部署、數據庫服務器的批量備份等。playbooks咱們能夠簡單的理解爲,系統經過組合多條ad-hoc操做的配置文件。

4、特性

(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:可實現多級指揮。

5、優勢
(1)
、輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;
(2)、批量任務執行能夠寫成腳本,並且不用分發到遠程就能夠執行;
(3)、使用python編寫,維護更簡單,ruby語法過於複雜;
(4)、支持sudo。

 

2、Ansible基礎安裝與配置

1、Ansible基礎安裝

方式一 源碼安裝

apt-get install ieee-data sshpass python-setuptoolspython-crypto python-yaml python-ecdsa python-httplib2 python-jinja2python-markupsafe python-netaddr python-paramiko python-selinux

wget http://releases.ansible.com/ansible/ansible-2.1.2.0.tar.gz

tar -zxf ansible-2.1.2.0.tar.gz

cd ansible-2.1.2.0

python setup.py install

方式二 apt-get或者pip安裝

apt-get installansible

pip install ansible

2、Ansible配置

(1)、SSH免密鑰登陸設置

ssh-key-gen -t rsa

ssh-copy-idremote_ip

 

(2)、ansible配置

vim/etc/ansible/hosts

jumperansible_ssh_host=192.168.122.11

[test]

192.168.122.1[1:5]

 

(3)、簡單測試

ansible test -m ping

ansible test -m command -a ‘uptime’

3、經常使用模塊使用

(1)、setup

## 用來查看遠程主機的一些基本信息

ansible test -m setup

(2)、ping

## 用來測試遠程主機的運行狀態

ansible test -m ping

(3)、file

## 設置文件的屬性

ansible test -m file -a "dest=/tmp/aa.txt mode=600owner=mdehaan group=mdehaan"

ansible test -m file -a "dest=/path/to/c mode=755owner=lisuochen group=root state=directory"

(4)、copy

## 複製文件到遠程主機

ansible test -m copy -a 'src=/etc/hosts dest=/tmp/hostsowner=lisuochen group=lisuochen mode=0644'

(5)、command

## 在遠程主機上執行命令

ansible test -m command -a "uptime

(6)、shell

## 切換到某個shell執行指定的指令,參數與command相同。

與command不一樣的是,此模塊能夠支持命令管道

ansible -m shell-a ‘cat /etc/hosts | grep localhost’

(7)、更多模塊

其餘經常使用模塊,好比:service、cron、yum、synchronize就不一一例舉,能夠結合自身的系統環境進行測試。

service:系統服務管理

cron:計劃任務管理

yum:yum軟件包安裝管理

synchronize:使用rsync同步文件

user:系統用戶管理

group:系統用戶組管理

更多模塊能夠參考:

#ansible-doc –l

(8)、一些概念補充

playbook的組成:playbook是由一個或多個「play」組成的列表,可讓它們聯同起來按事先編排的機制執行;所謂task無非是調用ansible的一個module,而在模塊參數中可使用變量;模塊執行是冪等的,這意味着屢次執行是安全的,由於其結果均一致;

執行模型:task list中的各任務按次序逐個在hosts中指定的全部主機上執行,即在全部主機上完成第一個任務後再開始第二個。在順序運行某playbook時,若是中途發生錯誤,全部已執行任務都將回滾,所以,在修改playbook後從新執行一次便可;

 

task組成:每一個task都應該有其name,用於playbook的執行結果輸出,建議其內容儘量清晰地描述任務執行步驟。若是未提供name,則action的結果將用於輸出;

notify指定handler的執行機制:「notify」這個action可用於在每一個play的最後被觸發,在notify中列出的操做稱爲handler,僅在全部的變化發生完成後一次性地執行指定操做。

 

3、後續工做

1、深刻學習ansible的playbook以及擴展模塊;

2、經過ansible部署公司的自動化運維平臺;

3、嘗試自動化運維工具saltstack,並將其與ansible進行對比。

相關文章
相關標籤/搜索