- Ansible vs. Chef vs. Fabric vs. Puppet vs. SaltStack
在生產(chǎn)環(huán)境中工作,常常意味著連續(xù)部署和遍布全球的基礎(chǔ)設(shè)施。如果您的基礎(chǔ)架構(gòu)是分散式和基于云的,同時(shí)您需要在大量服務(wù)器上頻繁部署大量類似的服務(wù),如果此時(shí)有一種方法可以自動(dòng)配置和維護(hù)以上所有內(nèi)容將是您的一大福音。
部署管理工具(Deployment management tools)和配置管理工具(configuration management tools)是為此目的而設(shè)計(jì)的。它們使您能夠使用“食譜”(recipes),“劇本” (playbooks),模板(templates)或任何術(shù)語來簡(jiǎn)化整個(gè)環(huán)境中的自動(dòng)化和編排,以提供標(biāo)準(zhǔn)、一致的部署。
在選擇工具時(shí)請(qǐng)記住幾點(diǎn)注意事項(xiàng)。首先是了解工具的模型。有些工具采用主控模式(master-client model),它有一個(gè)集中控制點(diǎn)(master)與分布式部署的服務(wù)器進(jìn)行通信,其他部分則可以在更本地的層面上運(yùn)行。另一個(gè)考慮因素是你的環(huán)境構(gòu)成。有些工具是采用不同的語言編寫的,對(duì)于特定的操作系統(tǒng)或設(shè)置可能會(huì)有所不同。確保您選擇的工具與您的環(huán)境完美配合,充分利用團(tuán)隊(duì)的特定技能可以為您節(jié)省很多麻煩。
1. Ansible
Ansible是一種開源工具,用于以可重復(fù)的方式將應(yīng)用程序部署到遠(yuǎn)程節(jié)點(diǎn)和配置服務(wù)器。它為您提供了基于推送模型(push model )推送多層應(yīng)用程序和應(yīng)用程序組件的通用框架,您也可以根據(jù)需要將其設(shè)置為 master-client 模式。 Ansible 建立在可用于各種系統(tǒng)上部署應(yīng)用程序的劇本(playbook)。
何時(shí)使用它 :對(duì)您來說最重要的是快速,輕松地啟動(dòng)和運(yùn)行,并且您不想在遠(yuǎn)程節(jié)點(diǎn)或受管服務(wù)器上安裝代理(Agent)。如果您的需求重點(diǎn)更多地放在系統(tǒng)管理員身上,專注于精簡(jiǎn)和快速,請(qǐng)考慮 Ansible 。
價(jià)格:免費(fèi)的開源版本,Ansible Tower 的付費(fèi)套餐每年 5000 美元(最多可容納100個(gè)節(jié)點(diǎn))。
贊成的理由:
- 基于 SSH , 不需要在遠(yuǎn)程節(jié)點(diǎn)安裝任何代理
- 學(xué)習(xí)曲線平緩、使用 YAML
- Playbook 結(jié)構(gòu)簡(jiǎn)單,結(jié)構(gòu)清晰
- 具有變量注冊(cè)功能,可以使前一個(gè)任務(wù)作為后一個(gè)任務(wù)的變量
- 代碼庫精簡(jiǎn)
反對(duì)的理由:
- 相較其他編程語言的工具功能有限。
- 通過 DSL 實(shí)現(xiàn)其邏輯,這意味著需要經(jīng)常查看文檔直到您學(xué)會(huì)為止
- 即使是最基本功能也需要變量注冊(cè),這可能使簡(jiǎn)單任務(wù)變得復(fù)雜
- 內(nèi)省(Introspection)很差。例如很難在劇本中看到變量的值
- 輸入,輸出和配置文件格式之間缺乏一致性
- 性能存在一定瓶頸
2. Chef
Chef 是一個(gè)配置管理開源工具,用戶群專注面向開發(fā)者。Chef 作為 master-client 模式運(yùn)行,需要一個(gè)單獨(dú)的工作站來控制 master 。Chef 基于 Ruby 開發(fā),純 Ruby 可以支持大多數(shù)元素。Chef 的設(shè)計(jì)是透明的,并遵循給定的指示,這意味著你必須確保你的指示是清楚的。
何時(shí)使用它:在考慮 Chef 之前,需要確保你熟悉 Git ,因?yàn)樗枰渲?Git ,你必須編寫 Ruby 代碼。Chef 適合以開發(fā)為中心(development-focused )的團(tuán)隊(duì)和環(huán)境。對(duì)于尋求更成熟異構(gòu)環(huán)境解決方案的企業(yè)來說,這是一件好事。
價(jià)格:提供免費(fèi)的開源版本,標(biāo)準(zhǔn)版和高級(jí)版計(jì)劃以每年節(jié)點(diǎn)為單位定價(jià)。 Chef Automate 的價(jià)格為每個(gè)節(jié)點(diǎn) 137 美元,或者采用 Hosted Chef 每個(gè)節(jié)點(diǎn)每年節(jié)省72 美元。
贊成的理由:
- 豐富的模塊和配置配方(recipes)
- 代碼驅(qū)動(dòng)的方法為您提供更多的配置控制和靈活性
- 以 Git 為中心賦予 Chef 強(qiáng)大的版本控制功能
- 'Knife'工具(使用 SSH 從工作站部署代理)減輕了安裝負(fù)擔(dān)
反對(duì)的理由:
- 如果您還不熟悉 Ruby 和面向過程編程,學(xué)習(xí)曲線會(huì)非常陡峭
- 這不是一個(gè)簡(jiǎn)單的工具,可能需要維護(hù)大量的代碼庫和復(fù)雜的環(huán)境
- 不支持推送功能
3. Fabric
Fabric 是一個(gè)基于 Python 的應(yīng)用程序部署工具。Fabric 的主要用途是在多個(gè)遠(yuǎn)程系統(tǒng)上運(yùn)行任務(wù),但它也可以通過插件的方式進(jìn)行擴(kuò)展,以提供更高級(jí)的功能。 Fabric 將配置您的操作系統(tǒng),進(jìn)行操作系統(tǒng)/服務(wù)器管理,自動(dòng)化部署您的應(yīng)用。
何時(shí)使用它:如果您剛剛開始進(jìn)入部署自動(dòng)化領(lǐng)域,F(xiàn)abric 是一個(gè)良好的開端。如果您的環(huán)境至少包含一點(diǎn) Python,它都會(huì)有所幫助。
價(jià)格:免費(fèi)
贊成的理由:
- 擅長(zhǎng)部署以任何語言編寫的應(yīng)用程序。它不依賴于系統(tǒng)架構(gòu),而是依賴于操作系統(tǒng)和軟件包管理器
- 相比其他工具更簡(jiǎn)單,更易于部署
- 與 SSH 進(jìn)行了廣泛的整合,以實(shí)現(xiàn)基于腳本的流水線
反對(duì)的理由:
- Fabric 是單點(diǎn)設(shè)置(通常是運(yùn)行部署的機(jī)器)
- 使用 PUSH 模型,因此不如其他工具那樣適合流水線部署模型
- 雖然它是用于在大多數(shù)語言中部署應(yīng)用程序的絕佳工具,但它確實(shí)需要運(yùn)行Python,所以您的環(huán)境中必須至少有一個(gè)適用于 Fabric 的 Python 環(huán)境
4. Puppet
Puppet 長(zhǎng)期依賴是全面配置管理領(lǐng)域的標(biāo)準(zhǔn)工具之一。Puppet 是一個(gè)開源工具,但是考慮到它已經(jīng)存在了多長(zhǎng)時(shí)間,它已經(jīng)在一些最大和最苛刻的環(huán)境中進(jìn)行了部署和驗(yàn)證。 Puppet 基于 Ruby 開發(fā),但使用更接近 JSON 的領(lǐng)域?qū)S谜Z言(Domain Specific Language,DSL)。Puppet 采用master-client 模式運(yùn)行,并采用模型驅(qū)動(dòng)(model-driven)的方法。 Puppet 將工作設(shè)計(jì)為一系列依賴關(guān)系列表,根據(jù)您的設(shè)置,這可以使事情變得更容易或更容易混淆。
何時(shí)使用它: 如果穩(wěn)定性和成熟度對(duì)您來說是最關(guān)鍵的因素,Puppet 是一個(gè)不錯(cuò)的選擇。對(duì)于具有異構(gòu)環(huán)境的大型企業(yè)和涉及多種技能范圍的 DevOps 團(tuán)隊(duì)而言而言,這是一件好事。
價(jià)格:Puppet 分為免費(fèi)的開源版本和付費(fèi)的企業(yè)版本,商業(yè)版每年每個(gè)節(jié)點(diǎn) 120 美元(提供批量折扣)。
贊成的理由:
- 通過 Puppet Labs 建立了完善的支持社區(qū)
- 具有最成熟的接口,幾乎可以在所有操作系統(tǒng)上運(yùn)行
- 安裝和初始設(shè)置簡(jiǎn)單
- 最完整的 Web UI
- 強(qiáng)大的報(bào)表功能
反對(duì)的理由:
- 對(duì)于更高級(jí)的任務(wù),您需要使用基于 Ruby 的 CLI(這意味著您必須了解Ruby)
- 純 Ruby 版本的支持正在縮減(而不是那些使用 Puppet 定制 DSL 的版本)
- Puppet 代碼庫可能會(huì)變得龐大,新人需要更多的幫助
- 與代碼驅(qū)動(dòng)方法相比,模型驅(qū)動(dòng)方法意味著用戶的控制更少
5. Saltstack
SaltStack(或 Salt)是一種基于 CLI 的工具,可以將其設(shè)置為 master-client 模型或非集中模型。 Salt 基于Python 開發(fā),提供了 PUSH 和 SSH 兩種方法與客戶端通訊。 Salt 允許對(duì)客戶端和配置模板進(jìn)行分組,以簡(jiǎn)化對(duì)環(huán)境的控制。
何時(shí)使用它: 如果可擴(kuò)展性和彈性是一個(gè)大問題,則 Salt 是一個(gè)不錯(cuò)的選擇。對(duì)系統(tǒng)管理員來說,Salt 提供的可用性非常重要。
價(jià)格:提供免費(fèi)的開源版本,以及基于年度/節(jié)點(diǎn)訂閱的 SaltStack Enterprise 版本。具體的價(jià)格沒有在他們的網(wǎng)站上列出,據(jù)說每個(gè)節(jié)點(diǎn)每年的起步價(jià)為 150 美元。
贊成的理由:
- 一旦你渡過了入門階段,就可以簡(jiǎn)單地組織和使用
- DSL 功能豐富,不需要邏輯和狀態(tài)
- 輸入,輸出和配置非常一致,全部所有 YAML (一個(gè)可讀性高,用來表達(dá)數(shù)據(jù)序列的格式)
- 內(nèi)省(Introspection)非常好。很容易看到 Salt 內(nèi)部發(fā)生了什么
- 強(qiáng)大的社區(qū)
- 很高的可擴(kuò)展性和靈活性
反對(duì)的理由:
- 對(duì)于新用戶來說,非常難以配置,學(xué)習(xí)曲線陡峭
- 在入門級(jí)別而言,文檔很難理解
- Web UI 比同領(lǐng)域的其他工具更新、更輕量
- 對(duì)非 Linux 操作系統(tǒng)沒有很好的支持
Ansible vs. Chef vs. Fabric vs. Puppet vs. SaltStack
您使用的配置管理或部署自動(dòng)化工具取決于您的環(huán)境需求和偏好。 Chef 和 Puppet 是一些較老的、更成熟的選項(xiàng),它們適用于那些重視成熟性和穩(wěn)定性而非簡(jiǎn)單性的大型企業(yè)和環(huán)境。 Ansible 和 SaltStack 是尋求快速和簡(jiǎn)約解決方案人士的理想選擇,同時(shí)在不需要支持某些特殊功能或具有大量操作系統(tǒng)的環(huán)境中工作。Fabric 對(duì)于小型環(huán)境和那些正在尋求更低門檻和入門級(jí)解決方案的人來說是一個(gè)很好的工具。
WordBook
YAML
YAML 語言(發(fā)音 /?j?m?l/ )實(shí)質(zhì)上是一種通用的數(shù)據(jù)串行化格式。基本語法規(guī)則如下:
- 大小寫敏感
- 使用縮進(jìn)表示層級(jí)關(guān)系
- 縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格。
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可
- # 表示行注釋
YAML 支持的數(shù)據(jù)結(jié)構(gòu):
對(duì)象:鍵值對(duì)的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
純量(scalars):?jiǎn)蝹€(gè)的、不可再分的值
DSL|Domain Specific Language,領(lǐng)域?qū)S谜Z言
DSL的目標(biāo)受眾是非程序員,業(yè)務(wù)員或者最終用戶。
DSL 最大的設(shè)計(jì)原則就是簡(jiǎn)單,通過簡(jiǎn)化語言中的元素,降低使用者的負(fù)擔(dān);無論是 Regex、SQL 還是 HTML 以及 CSS,其說明文檔往往只有幾頁,非常易于學(xué)習(xí)和掌握。但是,由此帶來的問題就是,DSL 中缺乏抽象的概念,比如:模塊化、變量以及方法等。
擴(kuò)展閱讀:DevOps 漫談系列
- Kanban 看板管理實(shí)踐
- DevOps 漫談:基礎(chǔ)設(shè)施部署和配置管理
- Linux 容器安全的十重境界
- 工程師的自我修養(yǎng):全英文技術(shù)學(xué)習(xí)實(shí)踐
DevOps 實(shí)踐的本質(zhì)是文化
- 學(xué)習(xí)力-團(tuán)隊(duì)生命之根
- 帶領(lǐng)團(tuán)隊(duì)翻譯書籍
- Don’t make me think
- 凡是被很多人不斷重復(fù)的好習(xí)慣,要將其自動(dòng)化整合到工具