1. 介紹
要說如今的部署工具,ansible能夠說家喻戶曉了。html
ansible是一個開源軟件,用於軟件供應、配置管理、應用部署。ansible能夠經過SSH、remote PowerShell、其餘API進行通信(from Wikipedia)。前端
因工做中有幸能接觸到puppet和ansible,對兩種部署工具也有了必定了解,並且這周參加了紅帽Automation with Ansible培訓與考試,學習的過程當中感觸良多,現總結下筆者對兩種部署工具的理解,供你們參考。 python
2. ansible與puppet的對比
ansible和puppet之強大隻有使用後才能體會獲得。
編程
經過使用這兩種工具,給個人感受,感性的歸納下:ansible就像一把瑞士軍刀,靈活,簡單,快捷,比較適合中小規模集羣管理;puppet就像一個成熟,穩定,功能齊全但略顯笨重的大型武器。由於能經過必定手段橫向擴展master,因此對集羣規模適用性更加普遍。 後端
關於puppet-master的高可用和橫向擴展方法,可參考餘興超大佬的博客https://www.cnblogs.com/yuxc/p/3147320.htmlruby
在部署openstack上,後端服務咱們使用的puppet部署,本着儘可能避免本身造輪子的原則,核心組件基本用的社區現成的代碼,本身寫一個module去調用openstack核心模塊做爲統一出口。前端cmp(cloud manage platform)使用ansible部署,考慮到咱們的cmp是由本身定製開發的,部署代碼也是所有本身編寫。架構
2.1 共同點
有過一些瞭解和使用後,會發現這兩個部署工具備着不少相同之處。畢竟他們的做用與目的都是相同的,都是爲了實現編排部署順序與配置管理。less
- 系統基礎變量都使用fact獲取(獲取的方式不一樣)
- 執行方式都是server端實現編排,而後拷貝腳本或catalog到目的主機去執行
- 受管服務的配置文件均可以採用模版的方式進行管理
2.2 異同點
若是說puppet和ansible最大的區別就是架構設計上的區別,前者是c/s架構,後者是Serverless架構。也就是說puppet須要部署master和agent服務,而ansible只要有python環境和ssh就可使用了,這也能夠說是puppet的劣勢。ssh
其它區別:編程語言
- 編程語言不一樣,puppet使用ruby而ansible使用python
- 通訊協議不一樣,puppet使用ssl加密協議而ansible使用ssh協議
- 任務執行順序規則不一樣,puppet資源執行順序默認是無序的,而ansible默認是按照task定義順序執行
2.3 好與壞
ansible的優點:
- Serverless架構使ansible拿來即用,不須要再想辦法部署server和agent,減小了準備階段的時間成本
- CLI更加豐富,ansible能夠對指定主機或主機組進行批量的命令行操做,很是靈活,而puppet不能
- 不用過於關心任務的執行順序,由於task的書寫順序就是執行順序,而puppet要對每一個資源執行順序進行指定
- 學習成本低,ansible的語法很通俗易懂,現有的core module已經夠用了,而puppet須要對ruby有必定了解才能寫type和provider
- 使用python和ssh協議給ansible帶來了很大優點,由於這兩個東西在流行的操做系統上是默認安裝的
- ansible在社區的活躍度要比puppet高不少,例如openstack-ansible openshift-ansible項目等
上面說到puppet C/S架構的劣勢,在工做中這裏遇到一個痛點,在擴容計算節點時,老是要用ansible部署下puppet-agent服務和配置,對於部署agent的時間成本,我以爲ansible是有絕對優點的。
puppet優點:
- 執行結果的日誌輸出更加完善,ansible的報錯是真的不太友好
- 自定義方法更加靈活,可使用custom resource加template共同管理配置文件。若是擅長ruby能夠在module裏定義不少靈活的自定義資源,相似於配置nova.conf的nova_conf資源
- 變量存儲位置比較集中,除了facter就是hieradate文件夾內,而ansible定義變量的位置比較多,這就要考慮優先級的問題,關於變量優先級,後序的文章「ansible基礎-變量」會詳細闡述
- puppet是比較老牌的部署工具,發展比較成熟,尤爲是官檔寫的真心不錯,有些企業早年使用了puppet並有了必定規模後,就不太願意投入時間和人力替換到其餘部署工具
3. ansible系列寫做計劃
接下來,在長達幾周的時間裏,筆者會根據「紅帽DO407 Automation with Ansible」課程大綱和工做經驗,總結和擴展下ansible相關的基礎知識,列表以下:
- ansible基礎-安裝與配置
- ansible基礎-playbooks
- ansible基礎-變量
- ansible基礎-task控制
- ansible基礎-Jinja2模版
- ansible基礎-roles
- ansible基礎-加密
- ansible基礎-優化
4. 參考連接
-
紅帽DO407 Automation with Ansible 教材
-
(https://www.cnblogs.com/yuxc/p/3147320.html)
-
(https://docs.puppet.com)
-
(https://docs.ansible.com/ansible/devel/user_guide/intro.html)
-
(https://en.wikipedia.org/wiki/Ansible_(software))
歡迎你們關注個人公衆號: