一、基礎介紹
ansible基礎介紹可參考:http://www.linuxidc.com/Linux/2017-12/149671.htm
puppet基礎介紹可參考:http://www.linuxidc.com/Linux/2017-12/149672.htm
saltstack基礎介紹可參考:http://www.linuxidc.com/Linux/2017-12/149675.htm
二、技術特性比較
名稱 |
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的較大優點在於可擴展性和彈性。你可以有多個級別的主服務器。上游主服務器可以控制下游主服務器及其客戶端。另一個優點在於對等系統,讓客戶端可以向主服務器提出問題,然后主服務器從其他服務器得到答案,提供全面信息。如果需要在實時數據庫中查詢數據,以便完成客戶端的配置,這個優點就很方便。