1. <rp id="zsypk"></rp>

      2. 實用文檔>Puppet使用方法總結(jié)參考

        Puppet使用方法總結(jié)參考

        時間:2022-06-08 08:38:09

        Puppet使用方法總結(jié)參考

        Puppet使用方法總結(jié)參考

        Puppet使用方法總結(jié)參考

          1. 概述

          puppet是一個開源的軟件自動化配置和部署工具,它使用簡單且功能強大,正得到了越來越多地關(guān)注,現(xiàn)在很多大型IT公司均在使用puppet對集群中的軟件進行管理和部署,如google利用puppet管理超過6000臺地mac桌面電腦(2007年數(shù)據(jù))。

          本文主要介紹puppet安裝方法,設(shè)計架構(gòu)及使用方法。

          2. 設(shè)計架構(gòu)

          puppet是基于c/s架構(gòu)的。服務(wù)器端保存著所有對客戶端服務(wù)器的配置代碼,在puppet里面叫做manifest. 客戶端下載manifest之后,可以根據(jù)manifest對服務(wù)器進行配置,例如軟件包管理,用戶管理和文件管理等等。

          如上圖所示,puppet的工作流程如下:(1)客戶端puppetd調(diào)用facter,facter探測出主機的一些變量,例如主機名,內(nèi)存大小,ip地址等。pupppetd 把這些信息通過ssl連接發(fā)送到服務(wù)器端; (2)服務(wù)器端的puppetmaster 檢測客戶端的主機名,然后找到manifest里面對應(yīng)的node配置, 并對該部分內(nèi)容進行解析,facter送過來的信息可以作為變量處理,node牽涉到的代碼才解析,其他沒牽涉的代碼不解析。解析分為幾個階段,語法檢查,如果語法錯誤就報錯。如果語法沒錯,就繼續(xù)解析,解析的結(jié)果生成一個中間的“偽代碼”,然后把偽代碼發(fā)給客戶端;(3)客戶端接收到“偽代碼”,并且執(zhí)行,客戶端把執(zhí)行結(jié)果發(fā)送給服務(wù)器;(4)服務(wù)器端把客戶端的執(zhí)行結(jié)果寫入日志。

          puppet工作過程中有兩點值得注意,第一,為了保證安全,client和master之間是基于ssl和證書的,只有經(jīng)master證書認證的client可以與master通信;第二,puppet會讓系統(tǒng)保持在你所期望的某種狀態(tài)并一直維持下去,如檢測某個文件并保證其一直存在,保證ssh服務(wù)始終開啟,如果文件被刪除了或者ssh服務(wù)被關(guān)閉了,puppet下次執(zhí)行時(默認30分鐘),會重新創(chuàng)建該文件或者啟動ssh服務(wù)。

          3. 軟件安裝

          不推薦使用apt-get命令進行安裝,因為該命令下載的puppet存在bug。可直接從源代碼進行安裝,需要安裝的軟件有ruby,facter和puppet。

          3.1 安裝步驟

          編輯/etc/host以修改主機名,因為puppet是基于證書的,證書中包含主機名;

          在master和slave上依次安裝ruby、facter和puppet,安裝facter和puppet時,要使用ruby install.rb。

          3.2 安裝后的目錄結(jié)構(gòu)

          (1) 安裝目錄

          安裝目錄默認存為/etc/puppet,該目錄下的manifests存放manifest文件。

          其他可執(zhí)行文件在/user/sbin下,主要有:

          puppet: 用于執(zhí)行用戶所寫?yīng)毩⒌膍ainfests文件,如:

          puppet -l /tmp/manifest.log manifest.pp

          puppetd: 運行在被管理主機上的客戶端程序,如:

          puppet –server servername –waitforcert 60

          puppetmasterd:運行在管理機上的服務(wù)器程序,如:

          puppetmasterd –debug

          puppetca puppet認證程序,主要用于對slave的證書進行認證,如:

          查看需認證的slave:puppetca –list

          對這些slave進行認證:puppetca -s –a

          puppetrun 用于連接客戶端,強制運行本地配置文件,如:

          puppetrun -p 10 –host host1 –host host2 -t remotefile -t webserver

          (2) 配置文件

          puppet.conf

          Puppet的主配置文件,如果是root用戶,配置文件為/etc/puppet/puppet.conf,普通用戶,配置文件為:~user/.puppet/puppet.conf

          具體配置參數(shù),參見:

          http://docs.puppetlabs.com/references/stable/configuration.html#configuration-files

          fileserver.conf

          puppet文件服務(wù)器的配置文件。用path配置文件路徑,allow/deny配置訪問權(quán)限,具體參見:http://docs.puppetlabs.com/guides/file_serving.html

          3.3 驗證安裝是否成功

          選定一個slave與master進行驗證,假設(shè)slave的host為slave00,master的host為masterhost,在slave00上輸入:

          puppetd –test –server servername

          然后在masterhost上查看待認證的slave:

          puppetca –list

          如果沒問題的話,此時可以看到slave00,對該slave的證書進行簽名:

          puppetca -s -a

          這樣slave00通過了證書驗證,可以與master進行進一步交互了。

          在masterhost的/etc/puppet/manifests目錄下編寫site.pp文件,內(nèi)容如下:

          node default {

          file {

          “/tmp/test”:

          content=>”hellon”,

          mode => 0644;

          }

          }

          同時在slave00上輸入:puppetd –test –server servername, 查看slave00的/tmp文件夾,生成了一個新文件test,里面的內(nèi)容是hello,該文件的權(quán)限是-rw-r—r—。這樣,便證明puppet安裝成功,如果出現(xiàn)錯誤,查看第六節(jié)。

          4. 配置腳本編寫

          本節(jié)介紹puppet的配置腳本編寫方法,主要是指puppet的manifest編寫方法。puppet把需要管理的內(nèi)容抽象成為資源,每種資源有不同的屬性,因此puppet語言就是描述這些資源的屬性以及資源之間關(guān)系的語言。

          為了便于管理,puppet將資源模塊化,即每個功能模塊的manifest單獨放在一個目錄下。每個模塊包含一個主要的manifest文件(init.pp,它是模塊的入口,類似于C語言中的main函數(shù)),里面包含若干個class對該模塊的資源進行封裝,常見的資源有file,package,service等,每種資源由自己的屬性,如file有屬性name,owner,mode等。

          本節(jié)主要介紹puppet中manifest的編寫方法,將依次介紹資源屬性,資源,節(jié)點管理,函數(shù)和模塊的編寫方法。

          4.1 資源屬性

          資源屬性有兩種,一種是資源專屬屬性,另一種是資源共同屬性,對于資源專屬屬性,將在下一節(jié)介紹;而資源共同屬性是所有資源共有的屬性,主要有:

          before

          用于控制不同對象(資源)的執(zhí)行順序關(guān)系,表示某個對象(資源)在另一個對象之后發(fā)生(require與之相反,它表示之前發(fā)生)。如:

          file { “/var/nagios/configuration”:

          source => “…”,

          recurse => true,

          before => Exec["nagios-rebuid"]

          }

          exec { “nagios-rebuild”:

          command => “/usr/bin/make”,

          cwd => “/var/nagios/configuration”

          }

          這段代碼保證用make編譯之前,所有代碼都是最新的。也可以before多個資源,如:

          before => [ File["/usr/local"], File["/usr/local/scripts"] ]

          subscribe

          檢測某個資源,當它發(fā)生變化時,該資源會重新加載,如:

          class nagios {

          file { “/etc/nagios/nagios.conf”:

          source => “puppet://server/module/nagios.conf”,

          alias => nagconf # just to make things easier for me

          }

          service { nagios:

          ensure => running,

          subscribe => File[nagconf]

          }

          }

          當檢測到文件nagconf被修改時,服務(wù)nagios會相應(yīng)的更新。需要注意的是,目前支持subscribe的資源只有exec,service和mount。

          更多資料,參見:http://docs.puppetlabs.com/references/latest/metaparameter.html

          4.2 資源

          常用的資源主要有以下幾個:

          file:文件管理

          package:軟件包管理

          service:系統(tǒng)服務(wù)管理

          cron:配置定期任務(wù)

          exec:運行shell命令

          (1) file資源

          更詳細資料,可參見:http://puppet.wikidot.com/file

          (2) package資源

          更詳細資料,可參見:http://puppet.wikidot.com/package

          (3) service資源

          更詳細資料,可參見:http://puppet.wikidot.com/srv

          (4) exec資源

          更詳細資料,可參見:http://puppet.wikidot.com/exec

          (5) cron資源

          更詳細資料,可參見:http://puppet.wikidot.com/cron

          4.3 節(jié)點管理

          puppet如何區(qū)分不同的客戶端,并且給不同的服務(wù)端分配manifest呢?puppet使用node資源做這件事情,node 后面跟客戶端的主機名,例如:

          node ‘ slave00 ‘ {

          include ssh

          }

          node ‘ slave11 ‘ {

          $networktype=”tele”

          $nagioscheckport=”80,22,3306″

          include apache, mysql, php

          }

          資源node中可使用變量,也可直接通過include把其他manifest包含進來。

          更詳細資料,可參見:http://docs.puppetlabs.com/references/latest/type.html

          4.4 類和函數(shù)

          類可以把多個相關(guān)的資源定義在一起,組成一個類。類可以繼承,具體參見:http://docs.puppetlabs.com/guides/language_guide.html#resource-collections

          函數(shù)(在puppet中稱為“defination”)可以把多個資源包裝成一個資源,或者把一個資源包裝成一個模型,便于使用。例如,在debian里面管理一個apache虛擬機非常簡單,把一個虛擬主機的配置文件放到/etc/sites-available/里面,然后做一個符號鏈接到/etc/sites-enabled目錄。 你可以為你每個虛擬主機復(fù)制同樣的配置代碼,但是如果你使用下面的代碼就會更好和更簡單:

          define virtual_host($docroot, $ip, $order = 500, $ensure = “enabled”) {

          $file = “/etc/sites-available/$name.conf”

          # The template fills in the docroot, ip, and name.

          file { $file:

          content => template(“virtual_host.erb”),

          notify => Service[apache]

          }

          file { “/etc/sites-enabled/$order-$name.conf”:

          ensure => $ensure ? {

          enabled => $file,

          disabled => absent

          }

          }

          }

          然后,你就可以使用這個定義來管理一個apache虛擬主機,如下面代碼所示:

          virtual_host { “reductivelabs.com”:

          order => 100,

          ip => “192.168.0.100″,

          docroot => “/var/www/reductivelabs.com/htdocs”

          }

          4.5 模塊

          一個模塊就是一個/etc/puppet/modules目錄下面的一個目錄和它的子目錄,在puppet的主文件site.pp里面用import modulename可以插入模塊。新版本的puppet可以自動插入/etc/puppet/modules目錄下的模塊。引入模塊,可以結(jié)構(gòu)化代碼,便于分享和管理。例如關(guān)于apache的所有配置都寫到apache模塊下面。一個模塊目錄下面通常包括三個目錄:files,manifests,templates。manifests 里面必須要包括一個init.pp的文件,這是該模塊的初始(入口)文件,導(dǎo)入一個模塊的時候,會從init.pp開始執(zhí)行?梢园阉械拇a都寫到init.pp里面,也可以分成多個pp文件,init 再去包含其他文件。files目錄是該模塊的文件發(fā)布目錄,puppet提供一個文件分發(fā)機制,類似rsync的模塊。templates 目錄包含erb模型文件,這個和file資源的template屬性有關(guān)。

          puppet安裝好以后,modules目錄是沒有的,自己建立一個就行,然后在里面可以新增加你的模塊。

          5. 編程實例

          5.1 Hello World

          本節(jié)介紹了一個非常簡單的編程實例:一個slave從master中獲取其manifest,該maniftest要求slave依次做以下工作:安裝gcc,創(chuàng)建文件夾/home/dxc/test,下載文件hello.c程序,編譯hello.c。

          (1) 代碼結(jié)構(gòu)組織

          Master上代碼的目錄結(jié)構(gòu)如下:

          |– auth.conf

          |– fileserver.conf #puppet文件服務(wù)器配置文件

          |– manifests #puppet主文件所在目錄

          | |– modules.pp #puppet各個模塊匯總

          | |– nodes #各個slave要處理的模塊

          | | `– execHello.pp #hello模塊對應(yīng)由那些slave處理

          | `– site.pp #puppet主文件(入口文件)

          |– modules #puppet的各個模塊所在文件

          | `– hello #hello模塊

          | |– files #該模塊對應(yīng)的文件資源,可能是要發(fā)送給slave的配置文件等

          | | `– hello.c

          | `– manifests #模塊的manifest文件

          | `– init.pp #模塊入口文件

          `– ssl #puppet的證書文件目錄

          (2) 程序執(zhí)行流程

          代碼調(diào)用順序是:

          Slave發(fā)起連接請求 à site.pp à nodes àmodules à init.pp

          首先,slave向發(fā)起master連接請求,進行證書驗證;

          接著,證書驗證通過后,master會直接找到入口文件manifests目錄下的site.pp文件,該文件可能包含一些全局變量,參數(shù)缺省值(當各個模塊沒有設(shè)置這些參數(shù)時,它們的缺省值)以及其它pp文件的調(diào)用(在該例子中,會調(diào)用modules.pp和nodes下的各個pp文件);

          然后,master通過nodes下的各個pp文件定位到該slave要執(zhí)行的模塊(init.pp是各個模塊的入口),匯總這些模塊代碼返回給slave;

          最后,slave根據(jù)master發(fā)過來的manifest,配置信息。

          (3) 代碼解釋

          直接在此處下載代碼。

          5.2 一個更復(fù)雜的實例

          本節(jié)介紹了一個更為復(fù)雜的某個公司正在使用實例,puppet代碼布局與上一個實例一致,只不過該實例涉及到更多模塊,更復(fù)雜的依賴管理。代碼具體內(nèi)容本節(jié)就不解釋了,具體參見代碼。

          6. 可能遇到的問題

          Q: puppet的證書機制

          A: puppet證書問題是初學(xué)者最容易遇到的問題,這里講一下怎么處理。puppet服務(wù)器端在安裝或者首次啟動的時候,會自動生產(chǎn)一個根證書和服務(wù)器證書,證書和主機名相關(guān),因此如果證書生成后友改了主機名,那就會出問題。 puppet客戶端在首次啟動的時候,也會自動生成證書;但是這個證書需要得到puppet服務(wù)器端的簽名才行,因此;puppet客戶端第一次連接服務(wù)器的時候,會發(fā)送一個證書請求;服務(wù)器端需要對這個證書進行簽名。puppet客戶端在下次連接服務(wù)器的時候就會下載簽名好的證書。

          Q:Ubuntu下面的證書出錯,怎么解決?

          A:本方法是提供給初學(xué)者的測試環(huán)境,生成環(huán)境不建議這么做。首先在puppetmaster(服務(wù)器端)刪除/var/lib/puppet/ssl目錄;然后啟動puppetmasterd;然后在客戶端也刪除/var/lib/puppet/ssl目錄。把puppetmaster機器的主機名和對應(yīng)的ip地址寫入客戶端機器的/etc/hosts。

          然后執(zhí)行:puppetd –test –server server.example.com. 把server.example.com替

          換成你自己的服務(wù)器主機名。 執(zhí)行這個命令,會有提示信息,不用理會。

          然后登錄到puppetmaster服務(wù)器機器,執(zhí)行puppetca –list 命令,看看是否有客戶端的證書請求;如果沒有,請檢查前面的步驟是執(zhí)行正確,以及網(wǎng)絡(luò)連接是否正常。 如果puppetca –list 能看到請求,那么執(zhí)行puppetca -s -a 命令;對所有的證書請求簽名。最后回到puppet客戶端機器,執(zhí)行

          puppetd –test –server server.example.com.

          就能建立連接了,如果你的site.pp寫好了.就可以測試puppet了。

          補充:如果客戶端和服務(wù)器端的時間不一致也會導(dǎo)致證書認證失敗,因此出現(xiàn)證書問題的時候需要檢查兩臺機器的時間是否一致,如果不一致用date命令或者ntpdate命令讓兩臺機器的時間一致。

          Q:出現(xiàn)錯誤[Puppet Users] err: Could not retrieve catalog; skipping run

          A:可能是由于安裝了兩個版本的ruby或者facter的原因,解決方案見:

          7. 總結(jié)

          隨著服務(wù)器集群規(guī)模越來越大,自動化配置和部署這些服務(wù)器能夠使管理變得非常容易并大大減小管理部署成本,因而得到IT公司的高度重視。

          本文檔介紹了puppet,一種新型的軟件自動化配置和部署工具。本文主要內(nèi)容涉及puppet的架構(gòu),安裝和使用方法,并給出了兩個使用實例。

          在大規(guī)模的生成環(huán)境中,如果只有一臺puppetmaster會忙不過來的,因為puppet是用ruby寫的,ruby是解析型語言,每個客戶端來訪問,都要解析一次,當客戶端多了就忙不過來,所以需要擴展成一個服務(wù)器組。puppetmaster可以看作一個web服務(wù)器,實際上也是由ruby提供的web服務(wù)器模塊來做的。因此可以利用web代理軟件來配合puppetmaster做集群設(shè)置,

        【Puppet使用方法總結(jié)參考】相關(guān)文章:

        適合春季吃的海鮮總結(jié)參考01-17

        期中教學(xué)檢查參考總結(jié)(精選15篇)12-09

        關(guān)于 期貨報告范文參考03-07

        《狼》教案參考(通用8篇)10-05

        《秋水》教案參考(通用8篇)10-28

        風(fēng)的觀測教案設(shè)計參考04-20

        交班報告書寫規(guī)范參考04-07

        《關(guān)雎》教學(xué)設(shè)計參考(通用11篇)03-25

        文明單位創(chuàng)建計劃參考范文05-12

        師徒帶教計劃參考(精選12篇)07-19

        用戶協(xié)議
        99热这里只有精品国产7_欧美色欲色综合色欲久久_中文字幕无码精品亚洲资源网久久_91热久久免费频精品无码
          1. <rp id="zsypk"></rp>