ansible基礎-理解篇
1. 介紹
要說現在的部署工具,ansible可以說家喻戶曉了。
ansible是一個開源軟體,用於軟體供應、配置管理、應用部署。ansible可以通過SSH、remote PowerShell、其他API進行通訊(from Wikipedia)。
因工作中有幸能接觸到puppet和ansible,對兩種部署工具也有了一定了解,而且這周參加了紅帽Automation with Ansible培訓與考試,學習的過程中感觸良多,現總結下筆者對兩種部署工具的理解,供大家參考。
2. ansible與puppet的對比
ansible和puppet之強大隻有使用後才能體會得到。
通過使用這兩種工具,給我的感覺,感性的概括下:ansible就像一把瑞士軍刀,靈活,簡單,快捷,比較適合中小規模叢集管理;puppet就像一個成熟,穩定,功能齊全但略顯笨重的大型武器。因為能通過一定手段橫向擴充套件master,所以對叢集規模適用性更加廣泛。
關於puppet-master的高可用和橫向擴充套件方法,可參考餘興超大佬的部落格https://www.cnblogs.com/yuxc/p/3147320.html
在部署openstack上,後端服務我們使用的puppet部署,本著儘量避免自己造輪子的原則,核心元件基本用的社群現成的程式碼,自己寫一個module去呼叫openstack核心模組作為統一出口。前端cmp(cloud manage platform)使用ansible部署,考慮到我們的cmp是由自己定製開發的,部署程式碼也是全部自己編寫。
2.1 共同點
有過一些瞭解和使用後,會發現這兩個部署工具有著很多相同之處。畢竟他們的作用與目的都是相同的,都是為了實現編排部署順序與配置管理。
- 系統基礎變數都使用fact獲取(獲取的方式不同)
- 執行方式都是server端實現編排,然後拷貝指令碼或catalog到目的主機去執行
- 受管服務的配置檔案都可以採用模版的方式進行管理
2.2 異同點
如果說puppet和ansible最大的區別就是架構設計上的區別,前者是c/s架構,後者是Serverless架構。也就是說puppet需要部署master和agent服務,而ansible只要有python環境和ssh就可以使用了,這也可以說是puppet的劣勢。
其它區別:
- 程式語言不同,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))
歡迎大家關注我的公眾號: