一、ansible介紹與安裝使用
1、ansible介紹與特點
ansible是一款自動化運維工具,基於Python開發,可以實現批量系統設置、批量程序部署、批量執行命令等功能。特點如下:
Ansible完全基於Python開發,要求python的版本為2.6以上。
Ansible豐富的內置模塊,近600個模塊完全滿足日常功能所需
Ansible默認通過SSH協議管理機器,因此,客戶端無需任何配置,管理端配置好后即可使用。
Ansible目前屬於Redhat公司,最新版本為Ansible2.5。
2、ansible的應用環境
應用代碼自動化部署
系統管理配置自動化
支持持續交付自動化
支持雲計算,大數據平台環境
批量任務執行可以寫成腳本,不用分發到遠程就可以執行
支持非root用戶管理操作,支持sudo
使用python編寫,維護更簡單。
3、ansible的安裝
這里的安裝環境是centos7.4版本操作系統,首先需要安裝第三方epel源:
[root@ACA8D5EF ~]# yum install epel-release
Ansible依賴python環境,同時已經是RHEL/Centos的一個組成部分,因此推薦通過yum安裝ansible:
[root@ACA8D5EF ~]# yum install ansible
4、ansible的命令套件
安裝完ansible后,ansible一共提供了七個指令,分別是:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。
(1)、ansible
ansible是指令核心部分,其主要用於執行ad-hoc命令,即單條命令。默認后面需要跟主機和選項部分,默認不指定模塊時,使用的是command模塊。
(2)、ansible-doc
該指令用於查看模塊信息,常用參數有兩個-l 和-s ,具體如下:
例如,列出所有已安裝的模塊
# ansible-doc -l
查看具體某模塊的用法,這里如查看command模塊
# ansible-doc -s command
(3)、ansible-galaxy
ansible-galaxy 指令用於方便的從https://galaxy.ansible.com/ 站點下載第三方擴展模塊,可以形象的理解其類似於centos下的yum、python下的pip或easy_install。
(4)、ansible-lint
ansible-lint是對playbook的語法進行檢查的一個工具。用法是ansible-lint playbook.yml。
(5)、ansible-playbook
該指令是使用最多的指令,其通過讀取playbook 文件后,執行相應的動作,這個后面會做為一個重點來講。
(6)、ansible-pull
該指令使用需要談到ansible的另一種模式:pull 模式,這和平常經常用的push模式剛好相反,其適用於以下場景:
有數量巨大的機器需要配置,即使使用非常高的線程還是要花費很多時間
要在一個沒有網絡連接的機器上運行Anisble,比如在啟動之后安裝。
(7)、ansible-vault
ansible-vault主要應用於配置文件中含有敏感信息,又不希望被人看到,vault可以幫你加密/解密這個配置文件,屬高級用法。主要對於playbooks里比如涉及到配置密碼或其他變量時,可以通過該指令加密,這樣我們通過cat看到的是一個密碼串類的文件,編輯的時候需要輸入事先設定的密碼才能打開。這種playbook文件在執行時,需要加上–ask-vault-pass參數,同樣需要輸入密碼后才能正常執行。
二、ansible架構與運行原理
1、ansible基本架構
核心:ansible
核心模塊(Core Modules):是ansible自帶的模塊,Ansible模塊資源分發到遠程節點使其執行特定任務或匹配一個特定的狀態。
擴展模塊(Custom Modules):如果核心模塊不足以完成某種功能,可以添加擴展模塊。
插件(Plugins):完成較小型的任務。輔助模塊來完成某個功能。
劇本(Playbooks):ansible的任務配置文件,將多個任務定義在劇本中,由ansible自動執行。例如安裝一個nginx服務,那么我們可以把這拆分為幾個任務放到一個playbook中。例如:第一步需要下載nginx的安裝包。第二步我可能考慮需要做的就是將我事先寫好的nginx.conf的配置文件下發的目標服務器上。第三步,我們需要把服務啟動起來。第四步,我們可能需要檢查端口是否正常開啟。那么這些步驟可以通過playbook來進行整合,然后通過inventory來下發到想要執行劇本的主機上。
連接插件(ConnectiorPlugins):ansible基於連接插件連接到各個主機上,默認是基於SSH連接到目標機器上執行操作的,但是它還支持其他的連接方法,所以需要有連接插件,管理端支持local 、ssh、paramiko三種方式連接被管理端。
主機清單(Host Inventory):定義ansible管理主機的策略,一般小型環境下只需要在host文件中寫入主機的IP地址即可,但是到了中大型環境就需要使用靜態inventory或者動態主機清單來生所需要執行的目標主機。
2、ansible任務執行模式
ansible執行自動化任務,分為兩種執行模式:
1、ad-hoc:單個模塊,單條命令的批量執行,稱之為ad-hoc
2、playbook:這個可以理解成為面向對象的編程,就像上面舉例那樣可以把多個想要執行的任務放到一個playbook中,當然多個任務在事物邏輯上最好是有上下聯系的。通過多個任務可以完成一個總體的目標,這就是playbook。