新聞中心
拿什么拯救你,我的Ansible
2015-10-28 17:35:35
云計(jì)算 在初期,使用Ansible感覺是比較新鮮的,還略微有點(diǎn)嗨,因?yàn)椴辉傩枰惭bAgent了,新服務(wù)器上線之后,把主機(jī)名加入hosts inventory,利用初始的root用戶密碼Push一次,整個(gè)配置任務(wù)就算完成了。但在運(yùn)行了半年多之后,在我們將所有的Puppet配置都遷移過來后,在不停的增加新的配置的情況下,我感到了痛苦,是真真正正的痛苦。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、離石ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的離石網(wǎng)站制作公司
在自動(dòng)化運(yùn)維方面,我用過Chef,Puppet,Salt還有Ansible。
其中Chef和Puppet之前在線上用了很長一段時(shí)間,效果也都不錯(cuò)。后來,我們希望嘗試一些新的工具,而Salt和Ansible都是通過Python實(shí)現(xiàn)的,加上我們的團(tuán)隊(duì)也很喜歡用Python,所以就對(duì)二者進(jìn)行了一些比較和試用。
就我個(gè)人而言,當(dāng)時(shí)是比較推崇Salt的,因?yàn)榭雌饋鞸alt更輕量級(jí),跟Puppet在配置管理方面也非常相似,而且Salt的源碼看起來很舒服,結(jié)構(gòu)很簡單,很適合學(xué)習(xí)和做二次開發(fā)。
但Ansible看起來則似乎更獨(dú)特一些,通過SSH通道實(shí)現(xiàn)免Agent,同時(shí)在配置方面顯得更干練,也有豐富的模塊,能通過tags對(duì)每個(gè)配置項(xiàng)來進(jìn)行靈活的分組。這些特點(diǎn),得到了另外一些同事的大力肯定和推薦,在經(jīng)歷過幾次爭(zhēng)論之后,領(lǐng)導(dǎo)決定將線上所有的Puppet配置都遷移到Ansible上去。
在初期,使用Ansible感覺是比較新鮮的,還略微有點(diǎn)嗨,因?yàn)椴辉傩枰惭bAgent了,新服務(wù)器上線之后,把主機(jī)名加入hosts inventory,利用初始的root用戶密碼Push一次,整個(gè)配置任務(wù)就算完成了。
但在運(yùn)行了半年多之后,在我們將所有的Puppet配置都遷移過來后,在不停的增加新的配置的情況下,我感到了痛苦,是真真正正的痛苦。
因?yàn)?,我們目前很難確保線上的配置是完整的,上下邏輯是沒有問題的,是能夠適用于所有環(huán)境的。
而這些,不是Ansible的問題,是人的問題。
由于Ansible免Agent,所以每一次配置的更改,都需要主動(dòng)的Push一次。在之前配置內(nèi)容不多,服務(wù)器較少的情況下,我們每次都直接把整個(gè)配置 Push一次。但隨著配置的增多,服務(wù)器數(shù)量增加到了一個(gè)相對(duì)飽和的程度時(shí),我們絕大部分情況下都只需要對(duì)現(xiàn)有的服務(wù)器配置進(jìn)行一些調(diào)整,例如增加或更新某個(gè)軟件,修改某個(gè)參數(shù)等。
在這種情況下,我們每一次的Push基本上都是通過tags來完成的,沒有人愿意在每次都將所有的配置都主動(dòng)Push一次,沒有人會(huì)有這個(gè)耐心,因?yàn)槭褂胻ags來執(zhí)行我想要修改的部分,可能只需要10秒,而將整個(gè)配置都跑一次,則需要3分鐘甚至更長的時(shí)間。因此,日積月累,整個(gè)配置的完整性沒有了保障,大家更新過的地方,通過tags跑都沒有問題,但是拋開tags將整個(gè)配置Push一次的時(shí)候,就會(huì)發(fā)現(xiàn),各種沖突和錯(cuò)誤都出現(xiàn)了。
我曾經(jīng)寫過一個(gè)CDH5的role,在最開始部署集群時(shí)沒有一點(diǎn)錯(cuò)誤,但是在維護(hù)了1個(gè)月之后,需要新上線一個(gè)新的CDH5集群時(shí),這個(gè)role根本無法完成一個(gè)新集群的部署,我花費(fèi)了足足2天來修復(fù)所有的報(bào)錯(cuò),我發(fā)現(xiàn),在這1個(gè)月里,大家更新了很多的地方,通過那些綁定的tags在現(xiàn)有的環(huán)境中 Push,都不會(huì)報(bào)錯(cuò)。
但其實(shí)有很多地方,是有沖突和邏輯問題的,很多僅需要在初始化的時(shí)候執(zhí)行的配置之后再也沒有執(zhí)行過,因?yàn)楦潞蟮呐渲么蠹叶际峭ㄟ^tags進(jìn)行Push的,而Ansible在任何一個(gè)配置項(xiàng)報(bào)錯(cuò)時(shí)都會(huì)中止。
這的確是人的問題,但這也是符合人性的。我們嘗試過不使用tags來Push,但之后所有的人都覺得這樣太過愚蠢,因?yàn)榻^大部分時(shí)間都不會(huì)發(fā)現(xiàn)錯(cuò)誤,只會(huì)浪費(fèi)時(shí)間。而經(jīng)過一段時(shí)間之后,誰都不敢保證整個(gè)配置Push一次是沒有問題的,并且,殘酷的現(xiàn)實(shí)告訴我們,每次都會(huì)有錯(cuò)誤出現(xiàn)。
為何之前在使用Puppet的時(shí)候,沒有遇到過這樣的困擾呢?因?yàn)?,Agent的方式,每次都需要Pull所有關(guān)聯(lián)的配置,需要耗費(fèi)一些時(shí)間,但由于不需要手動(dòng)去Push,所以感受會(huì)不同,我們沒有覺得浪費(fèi)了多少時(shí)間,也不用擔(dān)心更新之后其它的配置項(xiàng)會(huì)有問題。
這或許不是工具的問題,是我們沒有找到一個(gè)合適的方法來使用它。
但是,真的很難找到解決的辦法,強(qiáng)制所有人Push整個(gè)配置,或周期性的檢查整個(gè)配置,都難以實(shí)施下去。
該拿什么拯救你,我的Ansible。
網(wǎng)頁名稱:拿什么拯救你,我的Ansible
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/djgippi.html


咨詢
建站咨詢
