DevOps 漫談:選擇基礎設施部署和配置管理工具

Ansible vs. Chef vs. Fabric vs. Puppet vs. SaltStack

在生產環境中工作,常常意味著連續部署和遍布全球的基礎設施。如果您的基礎架構是分散式和基於雲的,同時您需要在大量伺服器上頻繁部署大量類似的服務,如果此時有一種方法可以自動配置和維護以上所有內容將是您的一大福音。

部署管理工具(Deployment management tools)和配置管理工具(configuration management tools)是為此目的而設計的。它們使您能夠使用「食譜」(recipes),「劇本」 (playbooks),模板(templates)或任何術語來簡化整個環境中的自動化和編排,以提供標準、一致的部署。

在選擇工具時請記住幾點注意事項。首先是了解工具的模型。有些工具採用主控模式(master-client model),它有一個集中控制點(master)與分散式部署的伺服器進行通信,其他部分則可以在更本地的層面上運行。另一個考慮因素是你的環境構成。有些工具是採用不同的語言編寫的,對於特定的操作系統或設置可能會有所不同。確保您選擇的工具與您的環境完美配合,充分利用團隊的特定技能可以為您節省很多麻煩。

1. Ansible

?Ansible是一種開源工具,用於以可重複的方式將應用程序部署到遠程節點和配置伺服器。它為您提供了基於推送模型(push model )推送多層應用程序和應用程序組件的通用框架,您也可以根據需要將其設置為 master-client 模式。 Ansible 建立在可用於各種系統上部署應用程序的劇本(playbook)。

何時使用它 :對您來說最重要的是快速,輕鬆地啟動和運行,並且您不想在遠程節點或受管伺服器上安裝代理(Agent)。如果您的需求重點更多地放在系統管理員身上,專註於精簡和快速,請考慮 Ansible 。

價格:免費的開源版本,Ansible Tower 的付費套餐每年 5000 美元(最多可容納100個節點)。

贊成的理由:

  • 基於 SSH , 不需要在遠程節點安裝任何代理
  • 學習曲線平緩、使用 YAML
  • Playbook 結構簡單,結構清晰
  • 具有變數註冊功能,可以使前一個任務作為後一個任務的變數
  • 代碼庫精簡

反對的理由:

  • 相較其他編程語言的工具功能有限。
  • 通過 DSL 實現其邏輯,這意味著需要經常查看文檔直到您學會為止
  • 即使是最基本功能也需要變數註冊,這可能使簡單任務變得複雜
  • 內省(Introspection)很差。例如很難在劇本中看到變數的值
  • 輸入,輸出和配置文件格式之間缺乏一致性
  • 性能存在一定瓶頸

2. Chef

?Chef 是一個配置管理開源工具,用戶群專註面向開發者。Chef 作為 master-client 模式運行,需要一個單獨的工作站來控制 master 。Chef 基於 Ruby 開發,純 Ruby 可以支持大多數元素。Chef 的設計是透明的,並遵循給定的指示,這意味著你必須確保你的指示是清楚的。

何時使用它:在考慮 Chef 之前,需要確保你熟悉 Git ,因為它需要配置 Git ,你必須編寫 Ruby 代碼。Chef 適合以開發為中心(development-focused )的團隊和環境。對於尋求更成熟異構環境解決方案的企業來說,這是一件好事。

價格:提供免費的開源版本,標準版和高級版計劃以每年節點為單位定價。 Chef Automate 的價格為每個節點 137 美元,或者採用 Hosted Chef 每個節點每年節省72 美元。

贊成的理由:

  • 豐富的模塊和配置配方(recipes)
  • 代碼驅動的方法為您提供更多的配置控制和靈活性
  • 以 Git 為中心賦予 Chef 強大的版本控制功能
  • 『Knife』工具(使用 SSH 從工作站部署代理)減輕了安裝負擔

反對的理由:

  • 如果您還不熟悉 Ruby 和面向過程編程,學習曲線會非常陡峭
  • 這不是一個簡單的工具,可能需要維護大量的代碼庫和複雜的環境
  • 不支持推送功能

3. Fabric

Fabric 是一個基於 Python 的應用程序部署工具。Fabric 的主要用途是在多個遠程系統上運行任務,但它也可以通過插件的方式進行擴展,以提供更高級的功能。 Fabric 將配置您的操作系統,進行操作系統/伺服器管理,自動化部署您的應用。

?

何時使用它:如果您剛剛開始進入部署自動化領域,Fabric 是一個良好的開端。如果您的環境至少包含一點 Python,它都會有所幫助。

價格:免費

贊成的理由:

  • 擅長部署以任何語言編寫的應用程序。它不依賴於系統架構,而是依賴於操作系統和軟體包管理器
  • 相比其他工具更簡單,更易於部署
  • 與 SSH 進行了廣泛的整合,以實現基於腳本的流水線

反對的理由:

  • Fabric 是單點設置(通常是運行部署的機器)
  • 使用 PUSH 模型,因此不如其他工具那樣適合流水線部署模型
  • 雖然它是用於在大多數語言中部署應用程序的絕佳工具,但它確實需要運行Python,所以您的環境中必須至少有一個適用於 Fabric 的 Python 環境

4. Puppet

?Puppet 長期依賴是全面配置管理領域的標準工具之一。Puppet 是一個開源工具,但是考慮到它已經存在了多長時間,它已經在一些最大和最苛刻的環境中進行了部署和驗證。 Puppet 基於 Ruby 開發,但使用更接近 JSON 的領域專用語言(Domain Specific Language,DSL)。Puppet 採用master-client 模式運行,並採用模型驅動(model-driven)的方法。 Puppet 將工作設計為一系列依賴關係列表,根據您的設置,這可以使事情變得更容易或更容易混淆。

何時使用它: 如果穩定性和成熟度對您來說是最關鍵的因素,Puppet 是一個不錯的選擇。對於具有異構環境的大型企業和涉及多種技能範圍的 DevOps 團隊而言而言,這是一件好事。

價格:Puppet 分為免費的開源版本和付費的企業版本,商業版每年每個節點 120 美元(提供批量折扣)。

贊成的理由:

  • 通過 Puppet Labs 建立了完善的支持社區
  • 具有最成熟的介面,幾乎可以在所有操作系統上運行
  • 安裝和初始設置簡單
  • 最完整的 Web UI
  • 強大的報表功能

反對的理由:

  • 對於更高級的任務,您需要使用基於 Ruby 的 CLI(這意味著您必須了解Ruby)
  • 純 Ruby 版本的支持正在縮減(而不是那些使用 Puppet 定製 DSL 的版本)
  • Puppet 代碼庫可能會變得龐大,新人需要更多的幫助
  • 與代碼驅動方法相比,模型驅動方法意味著用戶的控制更少

5. Saltstack

?SaltStack(或 Salt)是一種基於 CLI 的工具,可以將其設置為 master-client 模型或非集中模型。 Salt 基於Python 開發,提供了 PUSH 和 SSH 兩種方法與客戶端通訊。 Salt 允許對客戶端和配置模板進行分組,以簡化對環境的控制。

何時使用它: 如果可擴展性和彈性是一個大問題,則 Salt 是一個不錯的選擇。對系統管理員來說,Salt 提供的可用性非常重要。

價格:提供免費的開源版本,以及基於年度/節點訂閱的 SaltStack Enterprise 版本。具體的價格沒有在他們的網站上列出,據說每個節點每年的起步價為 150 美元。

贊成的理由:

  • 一旦你渡過了入門階段,就可以簡單地組織和使用
  • DSL 功能豐富,不需要邏輯和狀態
  • 輸入,輸出和配置非常一致,全部所有 YAML (一個可讀性高,用來表達數據序列的格式)
  • 內省(Introspection)非常好。很容易看到 Salt 內部發生了什麼
  • 強大的社區
  • 很高的可擴展性和靈活性

反對的理由:

  • 對於新用戶來說,非常難以配置,學習曲線陡峭
  • 在入門級別而言,文檔很難理解
  • Web UI 比同領域的其他工具更新、更輕量
  • 對非 Linux 操作系統沒有很好的支持

Ansible vs. Chef vs. Fabric vs. Puppet vs. SaltStack

您使用的配置管理或部署自動化工具取決於您的環境需求和偏好。 Chef 和 Puppet 是一些較老的、更成熟的選項,它們適用於那些重視成熟性和穩定性而非簡單性的大型企業和環境。 Ansible 和 SaltStack 是尋求快速和簡約解決方案人士的理想選擇,同時在不需要支持某些特殊功能或具有大量操作系統的環境中工作。Fabric 對於小型環境和那些正在尋求更低門檻和入門級解決方案的人來說是一個很好的工具。

WordBook

YAML

YAML 語言(發音 /?j?m?l/ )實質上是一種通用的數據串列化格式。基本語法規則如下:

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進時不允許使用Tab鍵,只允許使用空格。
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
  • 表示行注釋

YAML 支持的數據結構:

  • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 數組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):單個的、不可再分的值
  • YAML 語言教程

DSL|Domain Specific Language,領域專用語言

DSL的目標受眾是非程序員,業務員或者最終用戶。

DSL 最大的設計原則就是簡單,通過簡化語言中的元素,降低使用者的負擔;無論是 Regex、SQL 還是 HTML 以及 CSS,其說明文檔往往只有幾頁,非常易於學習和掌握。但是,由此帶來的問題就是,DSL 中缺乏抽象的概念,比如:模塊化、變數以及方法等。

  • 領域專用語言(DSL)迷思
  • 談談 DSL 以及 DSL 的應用(以 CocoaPods 為例)

擴展閱讀:DevOps 漫談系列

  • Kanban 看板管理實踐
  • DevOps 漫談:基礎設施部署和配置管理
  • Linux 容器安全的十重境界
  • 工程師的自我修養:全英文技術學習實踐

DevOps 實踐的本質是文化

  • 學習力-團隊生命之根
  • 帶領團隊翻譯書籍
  • Don』t make me think
  • 凡是被很多人不斷重複的好習慣,要將其自動化整合到工具

更多精彩內容掃碼關注公眾號,RiboseYims Blog:https://riboseyim.github.io


推薦閱讀:

Python 項目的部署,目前互聯網公司有哪些成熟的方案?
乾貨整理 | 容器是 DevOps 的必由之路——標準化帶來的 DevOps(上)
DevOps發展的九個趨勢
華為軟體開發雲如何實現DevOps落地?

TAG:DevOps | saltstack | puppet |