天天看點

10分鐘快速入門運維工具-Puppet

一、簡介

當伺服器數量達到一定的規模時,僅依靠人為完成批量部署伺服器個資源的配置,運維工作将變得繁瑣且容易出錯,為了解決這一問題,我們應該怎麼辦呢?我們可以引入一批工具,這批工具可編寫相應的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。在執行前先進行代碼的驗證,再執行,完成最開始所定義好的狀态。代碼編譯過程如圖所示:

10分鐘快速入門運維工具-Puppet

如下所示為整個puppet自動部署過程中agent和master的詳細的互動過程:

10分鐘快速入門運維工具-Puppet

過程說明:

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

10分鐘快速入門運維工具-Puppet

執行個體二:此manifests代碼為安裝httpd包,為其提供配置檔案,并且啟動服務

10分鐘快速入門運維工具-Puppet

執行個體三:每三分鐘同步下系統時間,寫入定時任務

10分鐘快速入門運維工具-Puppet

執行個體四:puppet之if條件判斷

10分鐘快速入門運維工具-Puppet

執行個體五:puppet之case語句

10分鐘快速入門運維工具-Puppet
10分鐘快速入門運維工具-Puppet

四、puppet類與繼承

puppet中命名的代碼子產品,經常需要被使用,如如重寫則代碼備援,使用定義一組通用目标的資源,可在puppet全局調用,就能解決這類問題,類可以被繼承,也可以包含子類。

類的文法格式有兩種,調用類的方法常用的有三種,可以在類中傳遞參數等靈活的操作,如以下執行個體:

10分鐘快速入門運維工具-Puppet
10分鐘快速入門運維工具-Puppet

類的繼承:子類可繼承父類的資源屬性,同時可定義父類不存在的額資源屬性,一個父類可同時被多個子類所繼承

10分鐘快速入門運維工具-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

10分鐘快速入門運維工具-Puppet

文末福利 || 免費領:運維大神速成秘籍(300頁幹貨,基礎、進階、高端,全方位linux技能整理)

繼續閱讀