一、基礎介紹
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 |
|
|
|
Saltstack |
|
|
|
Ansible |
|
|
|
四、推薦場景
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的較大優點在于可擴充性和彈性。你可以有多個級别的主伺服器。上遊主伺服器可以控制下遊主伺服器及其用戶端。另一個優點在于對等系統,讓用戶端可以向主伺服器提出問題,然後主伺服器從其他伺服器得到答案,提供全面資訊。如果需要在實時資料庫中查詢資料,以便完成用戶端的配置,這個優點就很友善。