Ansible基本原理


一、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。

3、ansible的任務執行流程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM