學習不迷茫:Ansible要如何學至精通

曾經有個Linux運維,後來他累了

在真正開始聊Ansible以前,我想先給各位講個假故事。mysql

小安很早之前就是一名Linux運維工程師,他的基礎很紮實,經常使用工具和公司涉及的服務以及公司的運維流程都比較熟悉,好比他能熟練地使用Shell腳本去作一些平常的運維管理,Shell腳本不方便的時候也能寫寫PHP和Perl腳原本給本身的工做添一點色彩。因爲這時公司環境比較小,小安管理的資源也比較少,因此那時候的運維工做對於小安來講,絕大多數時候就是打開遠程鏈接工具(好比Xshell),點開他須要維護的幾臺主機的ssh鏈接,在這幾個窗口上敲敲命令就能夠了,工做仍是蠻順利的。sql

後來公司擴張了,小安要管理的主機逐漸變多,小安仍然用着老方法去運維,期間倒也沒有出什麼問題,公司的業務仍然是正常的。可是,如今的小安已經累覺不愛了,每次拿到新主機,不管是測試機仍是生產機都要上去初始化配置一番,每次版本發佈時也要點點點、敲敲敲,此外還有不少很簡單但卻無法省略的操做。若是隻是幾臺主機,並不會有什麼枯燥的感受,可是小安面對的是多批主機,每批主機上執行同一類操做,他常常須要在大量主機之間切換,這種日子他看不到盡頭,並且小安已經意識到公司擴張以後再也抽不出時間來學習新技能,他不想將有限的時間花在這些無謂的操做上,他不想收到HR的辭退消息,他不想......shell

小安以爲很累,累的緣由並非運維工做的內容有多難、背鍋的次數是否是在增長等等,真正戰勝他的是單調和枯燥。單調和枯燥不只戰勝了小安,還戰勝了小明、小白、小難過、小傷心等大批大批的優秀運維同胞們。這些簡單但卻無聊的部署和維護,小安和各位同胞們都只想作一次,對此他們有共同的呼聲:"曾經體驗好過終生陪伴,不然就珍愛生命遠離運維"。框架

後來,配置管理工具出現了,小安看到了將來,終於不用每次都切換到各個主機上去作這些無聊、簡單又不可省略的重複配置和管理操做了。less

小安比較了幾個比較出名的配置管理工具,他決定選擇Ansible,他以爲Ansible是一個集大成者,使用方便又簡單——他又愛了。運維

三分鐘內我要Ansible的全部資料

我趕忙去百度上Google了一下Ansible的資料,對它作個簡介。ssh

Ansible是一個基於Python開發的配置管理和應用部署工具,如今也在自動化管理領域大放異彩。它融合了衆多老牌運維工具的優勢,Pubbet和Saltstack能實現的功能,Ansible基本上均可以實現。ide

Ansible能批量配置、部署、管理一大堆的主機。好比之前須要切換到每一個主機上執行的一或多個操做,使用Ansible只需在固定的一臺Ansible控制節點上去完成全部主機的操做。工具

例如,下面的操做(看不懂不要緊)表示將Ansible所在主機上的/etc/my.cnf文件拷貝到mysql主機組內的全部主機的/etc/目錄下,mysql主機組能夠是單臺主機,也能夠是不少臺主機,這能夠由用戶本身來定義。學習

$ ansible mysql -m copy -a "src=/etc/my.cnf dest=/etc/"

其實,固定在一臺主機上去控制其它主機,經過ssh工具或一些基於ssh二次開發的簡單工具也能實現,但Ansible吸引人的地方在於它提供的playbook能批量整合不一樣主機上執行的不一樣任務,同時還提供一些額外的機制讓用戶能夠去協調這些任務的執行策略。

學習不迷茫:Ansible要如何學至精通

Ansible是基於模塊工做的,它只是提供了一種運行框架,它自己沒有完成任務的能力,真正執行操做的是Ansible的模塊,好比copy模塊用於拷貝文件到遠程主機上,service模塊用於管理服務的啓動、中止、重啓等。這有點像Shell,Shell自身提供的操做是頗有限的,可是它提供了一個很友好的平臺讓實現各類功能的命令得以執行。Ansible自身能夠類比於Shell自身,Ansible的各類模塊能夠類比於Shell下各類命令。

Ansible其中一個比較鮮明的特性是Agentless,即無Agent的存在,它就像普通命令同樣,並不是C/S軟件,也只需在某個做爲控制節點的主機上安裝一次Ansible便可,一般它基於ssh鏈接來控制遠程主機,遠程主機上不須要安裝Ansible或其它額外的服務。

Ansible的另外一個比較鮮明的特性是它的絕大多數模塊都具有冪等性(idempotence)。所謂冪等性,指的是屢次操做或屢次執行不影響結果。好比算術運算時數值加0是冪等的,不管加多少次結果都不會改變,而數值加1是非冪等的,每次加1結果都會改變。再好比執行systemctl stop xxx命令來中止服務,當發現要中止的目標服務已經處於中止狀態,它什麼也不會作,因此屢次中止的結果仍然是中止,不會改變結果,它是冪等的,而systemctl restart xxx是非冪等的。Ansible的不少模塊在執行時都會先判斷目標節點是否要執行任務,因此,能夠放心大膽地讓Ansible去執行任務,重複執行某個任務絕大多數時候不會產生任何反作用。

如何學習並學好Ansible

Ansible做爲一個自動化管理工具,它的用法能夠很是簡單,只需學幾個基本的模塊,就像ssh命令同樣去使用,就能完成一些簡單的批量配置管理功能。

它的用法也能夠很是難,須要學習大量Ansible自身的知識,並且還須要學習Ansible中涉及到的額外知識。比較悲催的是Ansible的知識體系比較龐大,它的知識板塊也比較零散,想要構建一個比較完善的Ansible知識體系確實稍有難度,這也每每會讓咱們對深刻Ansible無處下手甚至產生迷茫感,相信很多學習過Ansible的人對此應該都有所體會。

其實,Ansible的知識雖多,但這些知識點自己是死的,須要什麼功能學什麼功能就能夠,總有一天能夠吞下絕大多數的知識點。但這並不夠,實際的環境是很是靈活且複雜的,使用Ansible去管理配置時,須要關注不少任務流程和邏輯,若是編寫的任務沒有邏輯,使用Ansible極可能會讓你知道一口大鍋從天而降是一種什麼樣的體驗,因此須要去協調Ansible中的各個任務,協調各個任務是Ansible的另外一難點。

最後一個難點,我我的認爲是寫出適合本身公司環境的可複用(即一次編寫屢次使用)的playbook或role。這要求熟悉如何應對各類需求和邏輯,對知識點也瞭然於心,這須要很強的綜合能力。

因此要掌握Ansible,須要:

1. 系統性地學習Ansible,從而構建本身的Ansible知識體系
- (1).學基本用法和經常使用模塊  
- (2).學Ansible涉及到的額外知識,如YAML和JinJa2  
- (3).學習零散但卻重要的邊角知識點,好比`delegate_to`、`run_once`  
- (4).瞭解一些高級玩法或不多用的上的功能
2. 真實應用Ansible去配置管理各種服務並協調好任務邏輯,保證Ansible的執行邏輯不會影響業務

總結起來,就是一句在座的各位聽了估計會很想打人的廢話:理論和實踐相結合

雖然確實是廢話,但倒是真理,學習老是離不開理論和實踐的,缺了任何一環,都會遇到難點和瓶頸。對Ansible的學習也如此,想要經過Ansible來釋放本身,並讓Ansible完美地執行各個任務,不只要求Ansible的功力要達到必定層次,還須要實際的經驗來理解任務邏輯。

爲了達到理論和實踐相結合的目標,須要你我雙方共同的努力。

對於我而言,爲了讓各位不打我,我會盡最大的努力,安排好本專欄中知識點的出場順序(正如人生的出場順序,知識點的出場順序也很重要),同時輔以一些我精心挑選的經典案例來解釋用法、適用場景併爲你們詳細解說任務之間的邏輯,從而讓各位按部就班地逐步掌握Ansible的知識點,最終讓你們系統性地掌握Ansible,並熟悉Ansible的正確使用姿式。

對於各位而言,要深刻掌握Ansible,須要本身去練習、測試、並記下屬於本身的筆記(杜絕徹底拷貝粘貼),我能提供給各位的是知識的展示和引導,缺乏了各位本身的練習本身的筆記,這一切都是空話。

最後,感謝各位的支持和訂閱,也祝各位可以學有所成,能升職加薪,還有,能吃得起豬肉。
專欄《一步到位玩兒轉Ansible》正式上線,搶200個早鳥優惠名額>>>https://blog.51cto.com/cloumn/detail/83

相關文章
相關標籤/搜索