如何選自動(dòng)化部署工具?Saltstack VS Ansible
在眾多自動(dòng)化部署工具中做選擇題的時(shí)候,相信很多運(yùn)維都會(huì)糾結(jié),到底選哪一個(gè)比較好?現(xiàn)在我就來(lái)說(shuō)說(shuō),希望看完本文,大家心中會(huì)有答案。如果沒(méi)有,請(qǐng)?jiān)倏匆槐?,哈哈?/p>
術(shù)語(yǔ)
Salt和Ansible最初都是作為執(zhí)行引擎構(gòu)建的。也就是說(shuō),如果需要,它們?cè)试S在一個(gè)或多個(gè)遠(yuǎn)程系統(tǒng)上并行執(zhí)行命令。
Ansible支持在多臺(tái)計(jì)算機(jī)上執(zhí)行任意命令行命令。它還支持執(zhí)行模塊。一個(gè)Ansible模塊基本上是寫在一定Ansible友好的方式一個(gè)Python模塊。大多數(shù)標(biāo)準(zhǔn)的Ansible模塊都是同等的。這意味著你告訴他們你希望系統(tǒng)進(jìn)入的狀態(tài),并且模塊嘗試使系統(tǒng)看起來(lái)像這樣。
Ansible有Playbook的概念 。Playbook是一個(gè)文件,為一組主機(jī)定義了一系列模塊執(zhí)行。Playbook可以改變執(zhí)行主機(jī)模塊的方式。這樣就可以協(xié)調(diào)多臺(tái)計(jì)算機(jī),例如在升級(jí)應(yīng)用程序之前將它們從負(fù)載平衡器中取出。
Salt有兩種類型的模塊;execution(執(zhí)行)模塊和 state(狀態(tài))模塊。執(zhí)行模塊是簡(jiǎn)單地執(zhí)行某些操作的模塊,它可以是命令行執(zhí)行或下載文件。狀態(tài)模塊更像Ansible模塊,其中參數(shù)定義狀態(tài),然后模塊嘗試實(shí)現(xiàn)該結(jié)束狀態(tài)。通常,狀態(tài)模塊在大多數(shù)工作中都使用執(zhí)行模塊。
狀態(tài)模塊是使用state執(zhí)行模塊執(zhí)行的。狀態(tài)模塊還支持在稱為SLS文件的文件中定義狀態(tài)。在top.sls文件中定義了哪些狀態(tài)適用于哪些主機(jī) 。
Playbook和SLS文件(通常)都是用YAML編寫的。
作為一個(gè)旁注,我想指出一個(gè)遠(yuǎn)程執(zhí)行引擎對(duì)于諸如在多臺(tái)機(jī)器上啟動(dòng)特定操作之類的任務(wù)非常有用。
結(jié)構(gòu)
Salt圍繞一個(gè)Salt Master和多個(gè)啟動(dòng)時(shí)連接到該主節(jié)點(diǎn)的Salt Minions構(gòu)建。通常,命令是在主命令行上發(fā)出的。然后,Master將那些命令分派給Minions。最初,Minions發(fā)起一個(gè)由加密密鑰交換組成的握手,之后它們具有持久的加密TCP連接。因此可以快速到達(dá)Minions。還緩存各種數(shù)據(jù)以加快執(zhí)行速度。支持ZeroMQ庫(kù)進(jìn)行通信。
Salt還支持使用SSH而不是使用Salt SSH的ZeroMQ 。但是請(qǐng)注意,它是Alpha軟件(我還沒(méi)有嘗試過(guò))
Ansible是無(wú)主從概念的,它使用SSH作為其主要通信層。這意味著速度較慢,但也因?yàn)闊o(wú)主從,可能會(huì)使運(yùn)行安裝程序和測(cè)試Ansible Playbook更加容易。有人說(shuō)它也更安全,因?yàn)樗恍枰渌?wù)器應(yīng)用程序。這在下方的“安全性”可以詳細(xì)了解該內(nèi)容。
Ansible也支持ZeroMQ版本,但需要初始SSH連接才能進(jìn)行設(shè)置。我嘗試了一下,說(shuō)實(shí)話,我并沒(méi)有看到有很明顯的提速。我想可能是在大型的Playbook和有更多的主機(jī)才可以看到明顯效果吧。
要列舉機(jī)器,建議你使用一個(gè)Ansible Inventory 文件,該Inventory文件基本上包含按組分組的主機(jī)列表,還具有添加到組或單個(gè)主機(jī)的屬性。你可以有多個(gè)庫(kù)存文件,例如,一個(gè)用于登臺(tái),一個(gè)用于生產(chǎn)。結(jié)構(gòu)簡(jiǎn)單清晰。
社區(qū)
Ansible:該項(xiàng)目的其余部分似乎不是社區(qū)的努力,而是邁克爾·德哈恩(Michael DeHaan)的單人秀。好消息是所有問(wèn)題都會(huì)得到相應(yīng)的回應(yīng)。
迄今為止,Salt已被證明是一個(gè)更受歡迎的社區(qū)。問(wèn)題可能要花大約4天的時(shí)間才能得到答復(fù),但似乎大多數(shù)問(wèn)題最終也都會(huì)得到跟進(jìn)。
我的明確印象是,Salt在受歡迎和協(xié)作方面擁有更成熟的社區(qū)。
速度
盡管你可能認(rèn)為只有幾臺(tái)服務(wù)器時(shí)速度并不重要,但我認(rèn)為你是錯(cuò)的。能夠快速迭代始終很重要。啟動(dòng)緩慢會(huì)降低你的速度。
Ansible始終使用SSH發(fā)起連接。太慢了,它的ZeroMQ實(shí)現(xiàn)(如前所述)確實(shí)有幫助,但是初始化仍然很慢。
Salt默認(rèn)使用ZeroMQ,它是很快的。如前所述,Salt可以緩存文件以更快地重新執(zhí)行。
編排
Ansible和Salt都支持編排。我想說(shuō)編排規(guī)則通常更容易獲得Ansible的概述?;旧希粋€(gè)Playbook分為幾組任務(wù),每個(gè)組與一組主機(jī)(或一個(gè)主機(jī)組)匹配。每個(gè)組按順序按時(shí)間順序執(zhí)行。任務(wù)的執(zhí)行順序也是如此。
Salt支持 事件和 事件的監(jiān)控。這意味著Salt執(zhí)行可以觸發(fā)另一臺(tái)計(jì)算機(jī)上的事件。Salt的執(zhí)行引擎還可以實(shí)現(xiàn)諸如監(jiān)控之類的功能,而未來(lái)的發(fā)展將非常有趣。
Ansible因其簡(jiǎn)單性而在這里獲勝。Salt之所以能勝任,是因?yàn)樗軌驅(qū)θ杭兓龀龀掷m(xù)的反應(yīng)。
Salt和Ansible都還支持在服務(wù)器窗口上執(zhí)行任務(wù)。這對(duì)于確保服務(wù)始終可用非常有用。
安全
Ansible使用SSH進(jìn)行傳輸。SSH是經(jīng)過(guò)測(cè)試的協(xié)議。只要正確配置了SSH服務(wù)器,我相信大多數(shù)人會(huì)認(rèn)為SSH客戶端是安全的。
Ansible還可以輕松地將多個(gè)非root用戶連接到單個(gè)主機(jī)。如果你對(duì)進(jìn)程運(yùn)行非常挑剔, root則應(yīng)評(píng)估Ansible。也就是說(shuō),Ansible支持使用 sudo來(lái)執(zhí)行其模塊。
Salt使用AES實(shí)現(xiàn)和密鑰處理,需要安裝Minions。它為此使用了 PyCrypto軟件包。安全性是相當(dāng)容易維護(hù)。
還需要注意的重要一點(diǎn)是,root默認(rèn)情況下,Salt運(yùn)行其Master和Minions 。這可以更改,但是顯然如果你不是root用戶,則很難安裝Debian軟件包等。我強(qiáng)烈建議,對(duì)于主服務(wù)器,可以將其配置為允許該salt命令為非root用戶。
可審核性
在談?wù)摪踩詴r(shí),我也認(rèn)為可審核性很重要。在這里,Salt大贏家。Salt執(zhí)行的每次執(zhí)行都會(huì)在主服務(wù)器上保存X天。這使調(diào)試變得很容易,而且還可以查看是否發(fā)生了異常的事情。
部署方式
Ansible在這里絕對(duì)容易。無(wú)需部署。當(dāng)然,Salt支持SSH,但文檔主要采用ZeroMQ。但是,SSH仍然很慢...
設(shè)置Minions的一件好事是它們是連接到主節(jié)點(diǎn)的Minions。這樣可以快速輕松地引導(dǎo)大量新機(jī)器。
Salt 引導(dǎo)腳本 對(duì)于引導(dǎo)非常有用,并且輕而易舉。它處理許多不同的分布,并且有據(jù)可查。
學(xué)習(xí)曲線
Ansible在這里贏了。更容易上手和理解。主要是因?yàn)樵O(shè)置幾個(gè)環(huán)境變量并開(kāi)始執(zhí)行你的Playbook以外,不需要做其他事情。
Salt可以在無(wú)主模式下運(yùn)行。這使得它更容易啟動(dòng)和運(yùn)行。但是,出于生產(chǎn)(和穩(wěn)定性)的考慮,我建議啟動(dòng)并運(yùn)行一個(gè)實(shí)際的Master。
升級(jí)
升級(jí)Salt取決于安裝方式。對(duì)于基于Debian的發(fā)行版,有一個(gè)apt存儲(chǔ)最新Debian軟件包的存儲(chǔ)庫(kù)。所以升級(jí)很簡(jiǎn)單apt-get upgrade。對(duì)于Ubuntu,有一個(gè)PPA。兩個(gè)存儲(chǔ)庫(kù)均得到積極維護(hù)。
升級(jí)Ansible更加簡(jiǎn)單。你只需執(zhí)行 git fetch && git checkout <tag>而已。
文獻(xiàn)資料
從文檔開(kāi)始,這兩個(gè)項(xiàng)目都具有啟動(dòng)和運(yùn)行,開(kāi)發(fā)模塊和配置設(shè)置所需的所有信息。Ansible歷史上比Salt擁有更好的文檔結(jié)構(gòu)。也就是說(shuō),最近在結(jié)構(gòu)化Salt文檔方面付出了巨大的努力。
結(jié)論
Ansible
優(yōu)點(diǎn)
- Ansible無(wú)代理部署和通信
- CLI支持幾乎所有編程語(yǔ)言
- 使用在Linux發(fā)行版中無(wú)所不在的Python
- 使用SSH / SSH2的出色安全性
- 附加的塔式儀表板允許對(duì)節(jié)點(diǎn)/資源進(jìn)行可視化管理(在商業(yè)版本中可用)
缺點(diǎn)
- 有時(shí)容易出現(xiàn)性能問(wèn)題
- 缺乏內(nèi)?。床榭碢laybook變量值)
Salt
優(yōu)點(diǎn)
- 由于具有多主機(jī)功能,因此可快速擴(kuò)展,非常有彈性且高效
- 使用Minions比Ansible提供更多的選擇和靈活性
- 尚無(wú)GUI(目前正在開(kāi)發(fā)中)
缺點(diǎn)
- 強(qiáng)迫用戶學(xué)習(xí)Python或PyDSL
- 未開(kāi)發(fā)的GUI
- 小型部署不如無(wú)代理通信那樣高效
對(duì)我而言,Ansible是對(duì)自動(dòng)化服務(wù)器配置和部署的出色介紹。它很容易啟動(dòng)和運(yùn)行,并且具有出色的文檔。
展望未來(lái),Salt的可擴(kuò)展性,速度和體系結(jié)構(gòu)都不錯(cuò)。對(duì)于云部署,我發(fā)現(xiàn)Salt架構(gòu)更合適。將來(lái)我會(huì)毫不猶豫地使用Salt。
綜上所述,你應(yīng)該在做出決定之前先對(duì)兩個(gè)項(xiàng)目進(jìn)行調(diào)整。他們的設(shè)置和測(cè)試相當(dāng)快。至此,希望你心中已有答案。