- Ansible vs. Chef vs. Fabric vs. Puppet vs. SaltStack
在生產(chǎn)環(huán)境中工作媚创,常常意味著連續(xù)部署和遍布全球的基礎(chǔ)設(shè)施。如果您的基礎(chǔ)架構(gòu)是分散式和基于云的郭厌,同時您需要在大量服務(wù)器上頻繁部署大量類似的服務(wù),如果此時有一種方法可以自動配置和維護以上所有內(nèi)容將是您的一大福音雕蔽。
部署管理工具(Deployment management tools)和配置管理工具(configuration management tools)是為此目的而設(shè)計的沪曙。它們使您能夠使用“食譜”(recipes),“劇本” (playbooks)萎羔,模板(templates)或任何術(shù)語來簡化整個環(huán)境中的自動化和編排液走,以提供標準、一致的部署贾陷。
在選擇工具時請記住幾點注意事項缘眶。首先是了解工具的模型。有些工具采用主控模式(master-client model)髓废,它有一個集中控制點(master)與分布式部署的服務(wù)器進行通信巷懈,其他部分則可以在更本地的層面上運行。另一個考慮因素是你的環(huán)境構(gòu)成慌洪。有些工具是采用不同的語言編寫的顶燕,對于特定的操作系統(tǒng)或設(shè)置可能會有所不同。確保您選擇的工具與您的環(huán)境完美配合冈爹,充分利用團隊的特定技能可以為您節(jié)省很多麻煩涌攻。
1. Ansible
Ansible是一種開源工具,用于以可重復(fù)的方式將應(yīng)用程序部署到遠程節(jié)點和配置服務(wù)器频伤。它為您提供了基于推送模型(push model )推送多層應(yīng)用程序和應(yīng)用程序組件的通用框架恳谎,您也可以根據(jù)需要將其設(shè)置為 master-client 模式。 Ansible 建立在可用于各種系統(tǒng)上部署應(yīng)用程序的劇本(playbook)。
何時使用它 :對您來說最重要的是快速因痛,輕松地啟動和運行婚苹,并且您不想在遠程節(jié)點或受管服務(wù)器上安裝代理(Agent)。如果您的需求重點更多地放在系統(tǒng)管理員身上鸵膏,專注于精簡和快速膊升,請考慮 Ansible 。
價格:免費的開源版本谭企,Ansible Tower 的付費套餐每年 5000 美元(最多可容納100個節(jié)點)廓译。
贊成的理由:
- 基于 SSH , 不需要在遠程節(jié)點安裝任何代理
- 學(xué)習(xí)曲線平緩、使用 YAML
- Playbook 結(jié)構(gòu)簡單赞咙,結(jié)構(gòu)清晰
- 具有變量注冊功能责循,可以使前一個任務(wù)作為后一個任務(wù)的變量
- 代碼庫精簡
反對的理由:
- 相較其他編程語言的工具功能有限。
- 通過 DSL 實現(xiàn)其邏輯攀操,這意味著需要經(jīng)常查看文檔直到您學(xué)會為止
- 即使是最基本功能也需要變量注冊院仿,這可能使簡單任務(wù)變得復(fù)雜
- 內(nèi)省(Introspection)很差速和。例如很難在劇本中看到變量的值
- 輸入歹垫,輸出和配置文件格式之間缺乏一致性
- 性能存在一定瓶頸
2. Chef
Chef 是一個配置管理開源工具,用戶群專注面向開發(fā)者颠放。Chef 作為 master-client 模式運行排惨,需要一個單獨的工作站來控制 master 。Chef 基于 Ruby 開發(fā)碰凶,純 Ruby 可以支持大多數(shù)元素暮芭。Chef 的設(shè)計是透明的,并遵循給定的指示欲低,這意味著你必須確保你的指示是清楚的辕宏。
何時使用它:在考慮 Chef 之前,需要確保你熟悉 Git 砾莱,因為它需要配置 Git 瑞筐,你必須編寫 Ruby 代碼。Chef 適合以開發(fā)為中心(development-focused )的團隊和環(huán)境腊瑟。對于尋求更成熟異構(gòu)環(huán)境解決方案的企業(yè)來說聚假,這是一件好事。
價格:提供免費的開源版本闰非,標準版和高級版計劃以每年節(jié)點為單位定價膘格。 Chef Automate 的價格為每個節(jié)點 137 美元,或者采用 Hosted Chef 每個節(jié)點每年節(jié)省72 美元河胎。
贊成的理由:
- 豐富的模塊和配置配方(recipes)
- 代碼驅(qū)動的方法為您提供更多的配置控制和靈活性
- 以 Git 為中心賦予 Chef 強大的版本控制功能
- 'Knife'工具(使用 SSH 從工作站部署代理)減輕了安裝負擔(dān)
反對的理由:
- 如果您還不熟悉 Ruby 和面向過程編程闯袒,學(xué)習(xí)曲線會非常陡峭
- 這不是一個簡單的工具,可能需要維護大量的代碼庫和復(fù)雜的環(huán)境
- 不支持推送功能
3. Fabric
Fabric 是一個基于 Python 的應(yīng)用程序部署工具游岳。Fabric 的主要用途是在多個遠程系統(tǒng)上運行任務(wù)政敢,但它也可以通過插件的方式進行擴展,以提供更高級的功能胚迫。 Fabric 將配置您的操作系統(tǒng)喷户,進行操作系統(tǒng)/服務(wù)器管理,自動化部署您的應(yīng)用访锻。
何時使用它:如果您剛剛開始進入部署自動化領(lǐng)域褪尝,F(xiàn)abric 是一個良好的開端。如果您的環(huán)境至少包含一點 Python期犬,它都會有所幫助河哑。
價格:免費
贊成的理由:
- 擅長部署以任何語言編寫的應(yīng)用程序。它不依賴于系統(tǒng)架構(gòu)龟虎,而是依賴于操作系統(tǒng)和軟件包管理器
- 相比其他工具更簡單璃谨,更易于部署
- 與 SSH 進行了廣泛的整合,以實現(xiàn)基于腳本的流水線
反對的理由:
- Fabric 是單點設(shè)置(通常是運行部署的機器)
- 使用 PUSH 模型鲤妥,因此不如其他工具那樣適合流水線部署模型
- 雖然它是用于在大多數(shù)語言中部署應(yīng)用程序的絕佳工具佳吞,但它確實需要運行Python,所以您的環(huán)境中必須至少有一個適用于 Fabric 的 Python 環(huán)境
4. Puppet
Puppet 長期依賴是全面配置管理領(lǐng)域的標準工具之一棉安。Puppet 是一個開源工具底扳,但是考慮到它已經(jīng)存在了多長時間,它已經(jīng)在一些最大和最苛刻的環(huán)境中進行了部署和驗證贡耽。 Puppet 基于 Ruby 開發(fā)衷模,但使用更接近 JSON 的領(lǐng)域?qū)S谜Z言(Domain Specific Language,DSL)蒲赂。Puppet 采用master-client 模式運行阱冶,并采用模型驅(qū)動(model-driven)的方法。 Puppet 將工作設(shè)計為一系列依賴關(guān)系列表凳宙,根據(jù)您的設(shè)置熙揍,這可以使事情變得更容易或更容易混淆。
何時使用它: 如果穩(wěn)定性和成熟度對您來說是最關(guān)鍵的因素氏涩,Puppet 是一個不錯的選擇届囚。對于具有異構(gòu)環(huán)境的大型企業(yè)和涉及多種技能范圍的 DevOps 團隊而言而言,這是一件好事是尖。
價格:Puppet 分為免費的開源版本和付費的企業(yè)版本意系,商業(yè)版每年每個節(jié)點 120 美元(提供批量折扣)。
贊成的理由:
- 通過 Puppet Labs 建立了完善的支持社區(qū)
- 具有最成熟的接口饺汹,幾乎可以在所有操作系統(tǒng)上運行
- 安裝和初始設(shè)置簡單
- 最完整的 Web UI
- 強大的報表功能
反對的理由:
- 對于更高級的任務(wù)蛔添,您需要使用基于 Ruby 的 CLI(這意味著您必須了解Ruby)
- 純 Ruby 版本的支持正在縮減(而不是那些使用 Puppet 定制 DSL 的版本)
- Puppet 代碼庫可能會變得龐大,新人需要更多的幫助
- 與代碼驅(qū)動方法相比,模型驅(qū)動方法意味著用戶的控制更少
5. Saltstack
SaltStack(或 Salt)是一種基于 CLI 的工具迎瞧,可以將其設(shè)置為 master-client 模型或非集中模型夸溶。 Salt 基于Python 開發(fā),提供了 PUSH 和 SSH 兩種方法與客戶端通訊凶硅。 Salt 允許對客戶端和配置模板進行分組缝裁,以簡化對環(huán)境的控制。
何時使用它: 如果可擴展性和彈性是一個大問題足绅,則 Salt 是一個不錯的選擇捷绑。對系統(tǒng)管理員來說,Salt 提供的可用性非常重要氢妈。
價格:提供免費的開源版本粹污,以及基于年度/節(jié)點訂閱的 SaltStack Enterprise 版本。具體的價格沒有在他們的網(wǎng)站上列出首量,據(jù)說每個節(jié)點每年的起步價為 150 美元壮吩。
贊成的理由:
- 一旦你渡過了入門階段,就可以簡單地組織和使用
- DSL 功能豐富蕾总,不需要邏輯和狀態(tài)
- 輸入粥航,輸出和配置非常一致,全部所有 YAML (一個可讀性高生百,用來表達數(shù)據(jù)序列的格式)
- 內(nèi)省(Introspection)非常好递雀。很容易看到 Salt 內(nèi)部發(fā)生了什么
- 強大的社區(qū)
- 很高的可擴展性和靈活性
反對的理由:
- 對于新用戶來說,非常難以配置蚀浆,學(xué)習(xí)曲線陡峭
- 在入門級別而言缀程,文檔很難理解
- Web UI 比同領(lǐng)域的其他工具更新、更輕量
- 對非 Linux 操作系統(tǒng)沒有很好的支持
Ansible vs. Chef vs. Fabric vs. Puppet vs. SaltStack
您使用的配置管理或部署自動化工具取決于您的環(huán)境需求和偏好市俊。 Chef 和 Puppet 是一些較老的杨凑、更成熟的選項,它們適用于那些重視成熟性和穩(wěn)定性而非簡單性的大型企業(yè)和環(huán)境摆昧。 Ansible 和 SaltStack 是尋求快速和簡約解決方案人士的理想選擇撩满,同時在不需要支持某些特殊功能或具有大量操作系統(tǒng)的環(huán)境中工作。Fabric 對于小型環(huán)境和那些正在尋求更低門檻和入門級解決方案的人來說是一個很好的工具绅你。
WordBook
YAML
YAML 語言(發(fā)音 /?j?m?l/ )實質(zhì)上是一種通用的數(shù)據(jù)串行化格式伺帘。基本語法規(guī)則如下:
- 大小寫敏感
- 使用縮進表示層級關(guān)系
- 縮進時不允許使用Tab鍵忌锯,只允許使用空格伪嫁。
- 縮進的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
- # 表示行注釋
YAML 支持的數(shù)據(jù)結(jié)構(gòu):
對象:鍵值對的集合偶垮,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
數(shù)組:一組按次序排列的值张咳,又稱為序列(sequence) / 列表(list)
純量(scalars):單個的帝洪、不可再分的值
DSL|Domain Specific Language,領(lǐng)域?qū)S谜Z言
DSL的目標受眾是非程序員,業(yè)務(wù)員或者最終用戶脚猾。
DSL 最大的設(shè)計原則就是簡單葱峡,通過簡化語言中的元素,降低使用者的負擔(dān)婚陪;無論是 Regex族沃、SQL 還是 HTML 以及 CSS频祝,其說明文檔往往只有幾頁泌参,非常易于學(xué)習(xí)和掌握。但是常空,由此帶來的問題就是沽一,DSL 中缺乏抽象的概念,比如:模塊化漓糙、變量以及方法等铣缠。
擴展閱讀:DevOps 漫談系列
- Kanban 看板管理實踐
- DevOps 漫談:基礎(chǔ)設(shè)施部署和配置管理
- Linux 容器安全的十重境界
- 工程師的自我修養(yǎng):全英文技術(shù)學(xué)習(xí)實踐
DevOps 實踐的本質(zhì)是文化
- 學(xué)習(xí)力-團隊生命之根
- 帶領(lǐng)團隊翻譯書籍
- Don’t make me think
- 凡是被很多人不斷重復(fù)的好習(xí)慣,要將其自動化整合到工具