真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何正確的使用Puppet

今天就跟大家聊聊有關(guān)如何正確的使用Puppet,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站主營(yíng)尼瑪網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開發(fā)定制,尼瑪h5小程序設(shè)計(jì)搭建,尼瑪網(wǎng)站營(yíng)銷推廣歡迎尼瑪?shù)鹊貐^(qū)企業(yè)咨詢

1. 概述
puppet是一個(gè)開源的軟件自動(dòng)化配置和部署工具,它使用簡(jiǎn)單且功能強(qiáng)大,正得到了越來(lái)越多地關(guān)注,現(xiàn)在很多大型IT公司均在使用puppet對(duì)集群中的軟件進(jìn)行管理和部署,如google利用puppet管理超過(guò)6000臺(tái)地mac桌面電腦(2007年數(shù)據(jù))。
本文主要介紹puppet安裝方法,設(shè)計(jì)架構(gòu)及使用方法。
2. 設(shè)計(jì)架構(gòu)
puppet是基于c/s架構(gòu)的。服務(wù)器端保存著所有對(duì)客戶端服務(wù)器的配置代碼,在puppet里面叫做manifest. 客戶端下載manifest之后,可以根據(jù)manifest對(duì)服務(wù)器進(jìn)行配置,例如軟件包管理,用戶管理和文件管理等等。
如何正確的使用Puppet

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

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

3.  軟件安裝

不推薦使用apt-get命令進(jìn)行安裝,因?yàn)樵撁钕螺d的puppet存在bug。可直接從源代碼進(jìn)行安裝,需要安裝的軟件有ruby,facter和puppet。

3.1   安裝步驟

編輯/etc/host以修改主機(jī)名,因?yàn)閜uppet是基于證書的,證書中包含主機(jī)名;

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

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

(1)    安裝目錄

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

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

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

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

puppetd: 運(yùn)行在被管理主機(jī)上的客戶端程序,如:

puppet –server servername –waitforcert 60

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

puppetmasterd –debug

puppetca puppet認(rèn)證程序,主要用于對(duì)slave的證書進(jìn)行認(rèn)證,如:

查看需認(rèn)證的slave:puppetca –list

對(duì)這些slave進(jìn)行認(rèn)證:puppetca -s –a

puppetrun 用于連接客戶端,強(qiáng)制運(yùn)行本地配置文件,如:

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配置訪問(wèn)權(quán)限,具體參見:http://docs.puppetlabs.com/guides/file_serving.html

3.3   驗(yàn)證安裝是否成功

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

puppetd –test –server servername

然后在masterhost上查看待認(rèn)證的slave:

puppetca –list

如果沒問(wèn)題的話,此時(shí)可以看到slave00,對(duì)該slave的證書進(jìn)行簽名:

puppetca -s -a

這樣slave00通過(guò)了證書驗(yàn)證,可以與master進(jìn)行進(jìn)一步交互了。

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

代碼如下:


node default {
file {
“/tmp/test”:
content=>”hello\n”,
mode => 0644;
}
}


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

4.  配置腳本編寫

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

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

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

4.1   資源屬性

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

before

用于控制不同對(duì)象(資源)的執(zhí)行順序關(guān)系,表示某個(gè)對(duì)象(資源)在另一個(gè)對(duì)象之后發(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多個(gè)資源,如:

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

subscribe

檢測(cè)某個(gè)資源,當(dāng)它發(fā)生變化時(shí),該資源會(huì)重新加載,如:

代碼如下:


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]
}
}


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

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

4.2   資源

常用的資源主要有以下幾個(gè):

file:文件管理

package:軟件包管理

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

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

exec:運(yùn)行shell命令

(1)    file資源

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

(2)    package資源

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

(3)    service資源

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

(4)    exec資源

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

(5)    cron資源

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

4.3   節(jié)點(diǎn)管理

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

node ‘ slave00 ‘ {
include ssh
}
node ‘ slave11 ‘ {
$networktype=”tele”
$nagioscheckport=”80,22,3306″
include apache, MySQL, php
}
資源node中可使用變量,也可直接通過(guò)include把其他manifest包含進(jìn)來(lái)。

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

4.4   類和函數(shù)

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

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

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
}
}
}
然后,你就可以使用這個(gè)定義來(lái)管理一個(gè)apache虛擬主機(jī),如下面代碼所示:

virtual_host { “reductivelabs.com”:

order   => 100,

ip      => “192.168.0.100″,

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

}

4.5   模塊

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

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

5.  編程實(shí)例

5.1    Hello World

本節(jié)介紹了一個(gè)非常簡(jiǎn)單的編程實(shí)例:一個(gè)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各個(gè)模塊匯總

|   |– nodes         #各個(gè)slave要處理的模塊

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

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

|– modules     #puppet的各個(gè)模塊所在文件

|   `– hello   #hello模塊

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

|       |   `– hello.c

|       `– manifests   #模塊的manifest文件

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

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

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

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

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

首先,slave向發(fā)起master連接請(qǐng)求,進(jìn)行證書驗(yàn)證;

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

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

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

(3)    代碼解釋

直接在此處下載代碼。

5.2   一個(gè)更復(fù)雜的實(shí)例

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

6.  可能遇到的問(wèn)題

Q: puppet的證書機(jī)制

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

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

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

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

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

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

puppetd –test –server server.example.com.

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

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

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

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

https://projects.puppetlabs.com/issues/5279

7.  總結(jié)

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

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

在大規(guī)模的生成環(huán)境中,如果只有一臺(tái)puppetmaster會(huì)忙不過(guò)來(lái)的,因?yàn)閜uppet是用ruby寫的,ruby是解析型語(yǔ)言,每個(gè)客戶端來(lái)訪問(wèn),都要解析一次,當(dāng)客戶端多了就忙不過(guò)來(lái),所以需要擴(kuò)展成一個(gè)服務(wù)器組。puppetmaster可以看作一個(gè)web服務(wù)器,實(shí)際上也是由ruby提供的web服務(wù)器模塊來(lái)做的。因此可以利用web代理軟件來(lái)配合puppetmaster做集群設(shè)置,具體參見:http://puppet.wikidot.com/puppetnginx。

看完上述內(nèi)容,你們對(duì)如何正確的使用Puppet有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前題目:如何正確的使用Puppet
分享鏈接:http://weahome.cn/article/ggosgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部