一、簡介
當伺服器數量達到一定的規模時,僅依靠人為完成批量部署伺服器個資源的配置,運維工作将變得繁瑣且容易出錯,為了解決這一問題,我們應該怎麼辦呢?我們可以引入一批工具,這批工具可編寫相應的manifests代碼,運作它便可以自動完成所有的工作,目前比較流行的運維工具主要有:puppet,ansible, slackstack等,在這我們主要以puppet來展開話題。在一些大型網際網路企業中,運維自動化管理着幾百甚至上千台伺服器,它可以針對多台伺服器進行統一操作,例如部署統一軟體、進行統一上線維護等,而且能夠快速完成上線部署,減少人力及人力誤操作風險。
二、Puppet的工作原理
puppet的目的是讓系統管理者隻集中于要管理的目标伺服器,而忽略實作的細節。puppet既可以在單機上使用,也可以C/S結構使用,在大規模部署puppet的情況下,通常我們會使用C/S結構,在這種結構下,服務端運作puppet-master程式用戶端運作puppet-client服務程式
具體的工作流程圖如下所示:
對于puppet的的掌握,了解puppet的工作原理是一個必要的的階段,隻有在了解了puppet的工作原理後才能更好應用puppet,下面讓我們一起了解學習
puppet的工作原理:
說到puppet的工作原理,不得不從以下四個方面來說到,如下所示:
(1)定義:使用Puppet特定的語言定義基礎配置資訊。通常我們把這些資訊寫在Modules中。
(2)模闆:在配置執行之前檢測代碼,但并不真正執行。
(3)執行:定義的配置自動部署。檢測并記錄下所發生變化的部分。
(4)報告:将期待的變化、實際發生的變化及任何修改發送給報告系統。
如下所示為puppet的工作資料流示意圖
資料流說明:
1.首先所有的節點(Node)Node節點将Facts和本機資訊發送給Master
2.Master告訴Node節點應該如何配置,将這些資訊寫入Catalog後傳給Node。
3.Node節點在本機進行代碼解析驗證并執行,将結果回報給Master。
4.Master通過API将資料發給分析工具。報告完全可以通過開放API或與其他系統內建。
整個資料流的走向是基于SSL安全協定的,如下圖所示:
模闆檔案處理過程說明如下:
Puppet通過編譯Manifest中的内容 (即模闆中内容),将編譯好的代碼存入Catalog。在執行前先進行代碼的驗證,再執行,完成最開始所定義好的狀态。代碼編譯過程如圖所示:
如下所示為整個puppet自動部署過程中agent和master的詳細的互動過程:
過程說明:
1. Puppet用戶端Agent将節點名與facts資訊發送給Master。
2. Puppet服務端Master通過分類判斷請求的用戶端是誰,它将要做什麼。這個判斷是通過site.pp中包含的Node.pp配置檔案定義的。
3. Puppet服務端Master将所需要的Class類資訊進行編譯後存入Catalog并發送給Puppet用戶端Agent,到此完成第一次互動。
4. Puppet用戶端Agent對Catalog進行代碼驗證(文法檢查及錯誤檢查)并執行。主要是代碼的驗證,并将執行過程的資訊及結果寫入日志。
5. Puppet用戶端Agent最終達到最開始所定義的狀态,并且将結果及任何執行資料通過開放API的形式發送給Puppet服務端Master。
以上就是puppet的工作原理需要注意是:因為整個過程中都是基于ssl實作的,是以首要的是保證agent和master間可以基于ssl通訊!
三、puppet常用資源及配置執行個體
執行個體一: 建立centos使用者為普通使用者,且uid為4000,gid為3000,所屬組為centos,附加組為mygrp
執行個體二:此manifests代碼為安裝httpd包,為其提供配置檔案,并且啟動服務
執行個體三:每三分鐘同步下系統時間,寫入定時任務
執行個體四:puppet之if條件判斷
執行個體五:puppet之case語句
四、puppet類與繼承
puppet中命名的代碼子產品,經常需要被使用,如如重寫則代碼備援,使用定義一組通用目标的資源,可在puppet全局調用,就能解決這類問題,類可以被繼承,也可以包含子類。
類的文法格式有兩種,調用類的方法常用的有三種,可以在類中傳遞參數等靈活的操作,如以下執行個體:
類的繼承:子類可繼承父類的資源屬性,同時可定義父類不存在的額資源屬性,一個父類可同時被多個子類所繼承
五、puppet模闆(此内容不過多解釋,需自行加強)
模闆是一個按照約定的、預定的結構存放了多個檔案或子目錄的目錄,目錄裡面的這些檔案或子目錄必須遵循一定的格式的命名規範,puppet會在配置的路徑下查找所需的資源子產品。子產品的名稱通常是隻能以小寫字母開頭,可以包含小寫字母,數字下劃線,但是不能使用main和settings。
子產品的組成部分:
manifests/:資源清單
init.pp:必須定義一個類,類名必須與子產品名相同;
files/:靜态檔案
templates/:模闆檔案
lib/: 插件目錄,常用于存儲自定義的facts以及自定義類型
spec/:類似于tests目錄,存儲lib/目錄下插件的使用幫助和範例;
tests/:目前子產品的使用幫助或使用範例檔案;
總結:
運維工具有很多例如:
Puppet,Ansible,slackstack等,puppet還是一個很好用的自動化運維工具,大大減輕的運維人員的重複操作,提高了工作效率,在運維過程中可根據業務需求選擇不同的運維工具,在伺服器數量不是很大的情形下可使用輕量級的ansible,在伺服器數量達到一定的規模時使用重量級的puppet相對來說效率更高。當面臨有得選擇的時候想起一句話:籮蔔白菜各有所愛,适合自己專注、精通一個運維工具比全會那麼一點,解決問題更有優勢。
來源:http://blog.51cto.com/mageedu/1889711
文末福利 || 免費領:運維大神速成秘籍(300頁幹貨,基礎、進階、高端,全方位linux技能整理)