天天看點

ansible puppet saltstack三款自動化運維工具的對比

一、基礎介紹

ansible基礎介紹可參考:http://kaliarch.blog.51cto.com/8966921/1971185

puppet基礎介紹可參考:http://kaliarch.blog.51cto.com/8966921/1973736

saltstack基礎介紹可參考:http://kaliarch.blog.51cto.com/8966921/1975219

二、技術特性比較

名稱 Puppet SaltStack Ansible
開發語言 Ruby Python Python
用戶端
二次開發 不支援 支援 支援
通信驗證
加密方式 标準SSL協定 AES加密 OpenSSH
平台支援 AIX,BSD,HP-UX,Linux,Mac OS X,Solaris,Windows BSD,Linux,Mac OS X,Solaris,Windows AIX,BSD,HP-UX,Linux,Mac OS X,Solaris
配置檔案格式 Ruby文法格式 YAML YAML
Web UI 提供 提供 提供(商業版本)
指令執行 不支援(配置子產品可實作) 支援 支援

三、優缺點對比

名稱 優勢 劣勢 成本
Puppet
  • 子產品由Ruby或Ruby子集編寫
  • push指令可以即可觸發變更
  • Web界面生成處理報表、資源清單、實時節點管理
  • 代理運作端進行詳細、深入的報告和對節點進行配置
  • 相對其他工具較複雜,需學習Puppet的DSL或Ruby
  • 安裝過程缺少錯誤校驗和産生錯誤報表
  • 開源軟體免費
  • SaltStack企業版每年内個節點花費約¥100
Saltstack
  • 狀态檔案可用簡單YAML配置子產品或複雜的Python/PyDSL腳本
  • 與用戶端可以基于SSH或在被管節點安裝代理
  • Web界面可看到運作的工作、minion狀态、事件日志、可在用戶端執行指令
  • 擴充能力極強
  • Web界面像毒藥競争産品不穩定與相對不完善
  • 缺乏生成深度報告的能力
  • 開源軟體免費
  • SaltStack企業版每年内個節點花費約¥150,随着數量增加相應的會有折扣
Ansible
  • 子產品可以用任何語言開發
  • 備管節點不需要安裝代理軟體
  • 有Web管理界面、可配置使用者、組、資源清單和執行Playbook
  • 安裝、運作極其簡單
  • 對備管理節點為Windows有待加強
  • Web管理界面是内置的Ansible的一部分
  • 需導入資源清單
  • 執行效率較低
  • 開源版本免費
  • Ansible Tower小于10台被管理節點免費
  • 超過10太後沒年每台需支付¥100~$250的支援服務費用

四、推薦場景

4.1 Puppet

  Puppet也許是四款工具中最深入人心的。就可用操作、子產品和使用者界面而言,它是最全面的。Puppet呈現了資料中心協調的全貌,幾乎涵蓋每一個運作系統,為各大作業系統提供了深入的工具。初始設定比較簡單,隻需要在需要加以管理的每個系統上安裝主伺服器和用戶端代理軟體。

  指令行接口(CLI)簡單直覺,允許通過puppet指令下載下傳和安裝子產品。然後,需要對配置檔案進行更改,好讓子產品适合所需的任務;應接到指令的用戶端與主伺服器聯系時,會更改配置檔案,或者用戶端通過立即觸發更改配置檔案的推送(push)來進行更改。

  還有一些子產品可以提供和配置雲伺服器執行個體和虛拟伺服器執行個體。所有子產品和配置都使用基于Ruby的Puppet專屬語言或者Ruby本身建構而成,因而除了系統管理技能外,還需要程式設計專業知識。

  Puppet企業版擁有最全面的Web使用者界面,允許使用主伺服器上的預制子產品和菜單(cookbook),實時控制被管理的節點。Web使用者界面很适合用于管理,但是不允許對子產品進行諸多配置。報告工具非常完善,提供了詳細資訊,以便了解代理軟體運作如何、已做出什麼樣的變更。

4.2 Ansible

  Ansible極其類似Salt,而不太類似Puppet或Chef。Ansible關注的重點是力求精簡和快速,而且不需要在節點上安裝代理軟體。是以,Ansible通過SSH執行所有功能。Ansible基于Python;相比之下,Puppet和Chef基于Ruby。

  Ansible可以通過Git軟體庫克隆,安裝到Ansible主伺服器上。安裝完畢後,需要管理的節點被添加到Ansible配置環境,SSH授權密鑰被附加到每個節點上,這與運作Ansible的使用者有關。一旦完成了這步,Ansible主伺服器可以通過SSH與節點進行通信,執行所有必要的任務。為了與預設情況下不允許根SSH通路的作業系統或發行版協同運作,Ansible接受sudo登入資訊,以便在那些系統上以根使用者的身份運作指令。

  Ansible可以使用Paramiko(基于SSH2協定的Python實作)或标準SSH用于通信,不過還有一種加速模式,允許更快速、更大規模的通信。

  針對確定服務在運作,或者觸發更新和重新啟動之類的簡單任務,Ansible可以從指令行來運作,不需要使用配置檔案。至于比較複雜的任務,Ansible配置通過名為Playbook的配置檔案中的YAML文法來加以處理。Playbook還可以使用模闆來擴充其功能。

  Ansible有一大批子產品,可用于管理各種系統以及亞馬遜彈性計算雲(EC2)和OpenStack等雲計算基礎設施。可以用幾乎任何一種語言來編寫自定義Ansible子產品,隻要子產品輸出是有效的JSON。

  Ansible的Web使用者界面以AnsibleWorks AWX的形式出現,但AWX與CLI并不直接聯系在一起。這意味着,除非進行了同步過程,否則CLI裡面的配置元素不會出現在Web使用者界面中。你可以使用那個内置的同步工具,讓兩者保持一緻,但需要按照預定計劃運作同步工具。

4.3 SaltStack

  Salt類似Ansible,因為它也是基于CLI的工具,采用了推送方法實作用戶端通信。它可以通過Git或通過程式包管理系統安裝到主伺服器和用戶端上。用戶端會向主伺服器提出請求,請求在主伺服器上得到接受後,就可以控制該用戶端了。

  Salt可以通過普通的SSH與用戶端進行通信,但如果使用名為minion的用戶端代理軟體,可以大大增強可擴充性。此外,Salt含有一個異步檔案伺服器,可以為用戶端加快檔案服務速度,這完全是Salt注重高擴充性的一個展現。

  與Ansible一樣,你可以直接通過CLI,向用戶端發出指令,比如啟動服務或安裝程式包;你也可以使用名為state的YAML配置檔案,處理比較複雜的任務。還有“pillar”,這些是放在集中地方的資料集,YAML配置檔案可以在運作期間通路它們。

  你可以直接通過CLI,向用戶端請求配置資訊,比如核心版本或網絡接口方面的詳細資訊。隻要使用名為“grain”的庫存元素,就可以描述用戶端;這樣一來,管理者可以輕松向某一種類型的伺服器發出指令,不需要依賴已配置群組。比如說,隻要使用一個CLI指令,你就可以向運作某個核心版本的每個用戶端發送指令。

  與Puppet、Chef和Ansible一樣,Salt也提供了大量的子產品,以處理特定的軟體、作業系統和雲服務。自定義子產品可以用Python或PyDSL來編寫。除了Unix管理外,Salt的确提供Windows管理功能,但它還是更擅長管理Unix和Linux系統。

  Salt的Web使用者界面Halite非常新,功能不如其他系統的Web使用者界面來得全面。它提供了事件日志和用戶端狀态的視圖,能夠在用戶端上運作指令,但除此之外乏善可陳。

  Salt的較大優點在于可擴充性和彈性。你可以有多個級别的主伺服器。上遊主伺服器可以控制下遊主伺服器及其用戶端。另一個優點在于對等系統,讓用戶端可以向主伺服器提出問題,然後主伺服器從其他伺服器得到答案,提供全面資訊。如果需要在實時資料庫中查詢資料,以便完成用戶端的配置,這個優點就很友善。

繼續閱讀