1. 程式人生 > >ansible基礎-理解篇

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))

 

歡迎大家關注我的公眾號: