官網(wǎng)地址:https://docs.ansible.com/
一、ansible簡(jiǎn)介(了解)
1、為什么使用ansible
? ? 01.安裝部署過程特別簡(jiǎn)單,學(xué)習(xí)曲線很平坦;
? ? 02.管理主機(jī)便捷,支持多臺(tái)主機(jī)并行管理;
? ? 03.避免被管理主機(jī)上安裝客戶代理,打開額外端口,采用無代理方式,只是利用現(xiàn)有的SSH后臺(tái)進(jìn)程;
? ? 04.用于描述基礎(chǔ)架構(gòu)的語言無論對(duì)機(jī)器還是對(duì)人都是友好的;
? ? 05.關(guān)注安全,很容易對(duì)執(zhí)行的內(nèi)容進(jìn)行審計(jì)、評(píng)估和重寫;
? ? 06.能夠立即管理遠(yuǎn)程被管理主機(jī),不需要預(yù)先安裝任何軟件;
? ? 07.非root賬戶也可以使用;
? ? 08.最簡(jiǎn)單、易用的IT自動(dòng)化系統(tǒng)。
補(bǔ)充:自動(dòng)化運(yùn)維的幾大關(guān)鍵領(lǐng)域
????①配置管理
????配置管理的目標(biāo)就是確保被管理的主機(jī)盡可能快速、按照正確方式達(dá)到配置文件中描述的狀態(tài),這對(duì)管理IT環(huán)境至關(guān)重要。
? ? ②服務(wù)即時(shí)開通
? ? ③應(yīng)用部署
? ? 這個(gè)領(lǐng)域重點(diǎn)關(guān)注如何盡可能地零停機(jī)部署應(yīng)用。
? ? ④流程編排
? ? 流程編排主要是進(jìn)行部署的時(shí)候如何保證基礎(chǔ)架構(gòu)中的各種組件協(xié)調(diào)一致。例,在你對(duì)web服務(wù)器部署新的軟件的版本的時(shí)候,需要確保web服務(wù)器從負(fù)載均衡器上移除,這是很常見的場(chǎng)景。
? ? ⑤監(jiān)控告警
? ? 監(jiān)控告警工具已經(jīng)發(fā)展到能夠快速處理大規(guī)模服務(wù)器的環(huán)境。
? ? ⑥日志記錄
? ? 集中日志數(shù)據(jù)確保能夠正確地收集跨系統(tǒng)和應(yīng)用的日志,同時(shí)能夠按照規(guī)則進(jìn)行智能過濾、根本原因分析、告警等。
2、ansible批量管理服務(wù)意義
? ? 01. 提高工作的效率
? ? 02. 提高工作準(zhǔn)確度
? ? 03. 減少維護(hù)的成本
? ? 04. 減少重復(fù)性工作
3、ansible能做什么
? ? 01. 可以實(shí)現(xiàn)批量系統(tǒng)操作配置
? ? 02. 可以實(shí)現(xiàn)批量軟件服務(wù)部署
? ? 03. 可以實(shí)現(xiàn)批量文件數(shù)據(jù)分發(fā)
? ? 04. 可以實(shí)現(xiàn)批量系統(tǒng)信息收集
二、ansible工作原理(理解)
1、ansible架構(gòu)
? ? ansible維護(hù)模式:包括控制機(jī)和被管機(jī)??刂茩C(jī)使用SSH協(xié)議對(duì)被管機(jī)進(jìn)行管理,控制機(jī)通過劇本playbook來進(jìn)行配置管理;被管機(jī)通過資源清單inventory來進(jìn)行分組管理。
? ? ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運(yùn)行的模塊,ansible只是提供一種架構(gòu)。

●核心引擎:即Ansible。
●核心模塊(core Modules):Ansible自帶的模塊。
●自定義模塊(custom modules):如果核心模塊不足以完成某種功能,可以添加自定義模塊。
●插件(plugins):完成模塊功能的補(bǔ)充,借助于插件完成日志記錄、郵件等功能。
●劇本(playbook):定義Ansible任務(wù)的配置文件。如果ansible模塊作為你的工作室工具,playbook是你的設(shè)計(jì)方案。在基本層面上,劇本可用于管理配置和部署遠(yuǎn)程機(jī)器;在更高級(jí)的應(yīng)用中,可以序列多層應(yīng)用及滾動(dòng)更新,并可以把動(dòng)作委托給其他主機(jī),與監(jiān)控服務(wù)器和負(fù)載均衡器交互。
●連接插件(connection plugins):ansible基于連接插件連接到各個(gè)主機(jī)上,負(fù)責(zé)與被管節(jié)點(diǎn)實(shí)現(xiàn)通信??刂浦鳈C(jī)與被管節(jié)點(diǎn)之間支持local、SSH、zeroMQ三種連接方式,默認(rèn)使用基于SSH的連接,在規(guī)模較大的情況下使用zeroMQ連接方式會(huì)明顯改善執(zhí)行速度。
●主機(jī)清單(host inventory):定義ansible管理的主機(jī)策略。
2、ansible工作機(jī)制
????1)ansible在管理節(jié)點(diǎn)將ansible模塊通過SSH協(xié)議(或者kerberos、LDAP)推送到被管理端執(zhí)行,執(zhí)行之后自動(dòng)刪除,可以使用SVN等來管理自定義模塊及編排。
????2)任務(wù)執(zhí)行模式
????①ad-hoc模式:使用單個(gè)模塊,支持批量執(zhí)行單條命令。
? ? ②playbook模式:是ansible的主要管理方式,也是ansible功能強(qiáng)大的關(guān)鍵所在,通過多個(gè)task集合完成一類功能??梢院?jiǎn)單地把playbook理解為通過組合多條ad-hoc操作的配置文件。
????3)ansible執(zhí)行流程

3、ansible組件調(diào)用關(guān)系

注:使用ansible或ansible-playbook時(shí),在服務(wù)器終端輸入ansible的ad-hoc命令集或playbook后,ansible會(huì)遵循預(yù)先編排的規(guī)則將playbook逐條拆解為play,再將play組織成ansible可識(shí)別的任務(wù)(task),隨后調(diào)用任務(wù)涉及的所有模塊(module)和插件(plugin),根據(jù)Inventory中定義的主機(jī)列表通過SSH(linux默認(rèn))將任務(wù)集以臨時(shí)文件或命令的形式傳輸?shù)竭h(yuǎn)程客戶端執(zhí)行并返回結(jié)果,如果是臨時(shí)文件則執(zhí)行完畢后自動(dòng)刪除。
三、ansible安裝與配置(操作)
1、環(huán)境準(zhǔn)備
? ? 1)從GitHub獲取ansible
? ? https://github.com/ansible/ansible
? ? 2)準(zhǔn)備控制主機(jī)
? ? 安裝了Python2.6或以上版本
? ? SSH
? ? 3)查看被管節(jié)點(diǎn)
? ? 類UNIX:安裝Python2.6或以上版本? SSH
? ? windowns:powershell3.0
? ? 注:①如果被管節(jié)點(diǎn)上啟用了Selinux,需要安裝libselinux-python,這樣才可以使用ansible中的copy、file、template相關(guān)的函數(shù)??梢酝ㄟ^ansible的yum模塊在需要的托管節(jié)點(diǎn)上安裝libselinux-python。②關(guān)于python版本,建議安裝python2。
2、安裝ansible? ??
? ? 1)直接用源碼安裝
? ? ①從GitHub源碼庫安裝方式
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
如果想要安裝過程中減少告警/錯(cuò)誤消息輸出,可以在安裝時(shí)加上-q參數(shù):
source ./hacking/env-setup -q
????②tar包安裝方式
????tar包下載地址:http://release.ansible.com/ansible
? ? 2)包管理工具安裝(*****)
? ? yum安裝——需要依賴epel的yum源
yum install -y ansible
3、主要配置文件
/etc/ansible/ansible.cfg? --- ansible服務(wù)配主配置文件
/etc/ansible/hosts? ?--- 主機(jī)清單文件。定義可以管理的主機(jī)信息,需先分發(fā)公鑰
/etc/ansible/roles? --- 角色目錄
/usr/share/ansible_plugins --插件目錄
四、ansible命令說明(熟悉)
五、ansible組件介紹(掌握)
六、ansible生產(chǎn)實(shí)踐
七、ansible常見問題分析與處理
1、遠(yuǎn)程主機(jī)無法管理問題分析
常見原因:
????① 管理端沒有分發(fā)好主機(jī)的公鑰;
????② 被管理端遠(yuǎn)程服務(wù)出現(xiàn)問題;
????③被管理端維護(hù)ansible遠(yuǎn)程連接的進(jìn)程出現(xiàn)僵死情況;
????????ssh服務(wù)進(jìn)程說明:
????????????/usr/sbin/sshd -D? --- 負(fù)責(zé)建立新的遠(yuǎn)程連接
????????????sshd: root@pts/0? --- 用于維護(hù)遠(yuǎn)程連接(windows--linux)
????????????sshd: root@notty? --- 用于維護(hù)遠(yuǎn)程連接,在被管理端主機(jī)上(ansible--被管理端)
????④被管理端selinux服務(wù)沒有關(guān)閉
? ??????????此時(shí)需要關(guān)閉被管理端selinux服務(wù);或在管理端安裝libselinux-python,讓selinux開啟的狀態(tài)也可以使用ansible程序。
2、