天天看點

ansible安裝與部署

一、基礎介紹

1、簡介

ansible是新出現的自動化運維工具,基于Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優點,實作了批量系統配置、批量程式部署、批量運作指令等功能。ansible是基于子產品工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運作的子產品,ansible隻是提供一種架構。主要包括:

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

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

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

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

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

2、總體架構

ansible安裝與部署

3、工作機制

Ansible 在管理節點将 Ansible 子產品通過 SSH 協定(或者 Kerberos、LDAP)推送到被管理端執行,執行完之後自動删除,可以使用 SVN 等來管理自定義子產品及編排

ansible安裝與部署

以上是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。

二、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

## 用來測試遠端主機的運作狀态

(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,僅在所有的變化發生完成後一次性地執行指定操作。

三、後續工作

1、深入學習ansible的playbook以及擴充子產品;

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

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

繼續閱讀