用Puppet搭建易管理的服務(wù)器基礎(chǔ)架構(gòu)_第1頁(yè)
用Puppet搭建易管理的服務(wù)器基礎(chǔ)架構(gòu)_第2頁(yè)
用Puppet搭建易管理的服務(wù)器基礎(chǔ)架構(gòu)_第3頁(yè)
用Puppet搭建易管理的服務(wù)器基礎(chǔ)架構(gòu)_第4頁(yè)
用Puppet搭建易管理的服務(wù)器基礎(chǔ)架構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、用 Puppet 搭建易管理的服務(wù)器基礎(chǔ)架構(gòu)關(guān)于 PuppetPuppet 是一種 Linux、Unix、Windows 平臺(tái)的集中配置管理系統(tǒng),使用自有的 Puppet 描述語(yǔ)言,可管理配置文件、用戶(hù)、cron任務(wù)、軟件包、系統(tǒng)服務(wù)等。Puppet把這些系統(tǒng)實(shí)體稱(chēng)之為資源,其設(shè)計(jì)目標(biāo)是簡(jiǎn)化對(duì)這些資源的管理以及妥善處理資源之間的依賴(lài)關(guān)系。在這一系列中,作者提供了一個(gè)可操作的全面教程,來(lái)逐步解釋如何使用 Puppet 搭建一個(gè)集中式管理的 Linux 服務(wù)器基礎(chǔ)結(jié)構(gòu)。目標(biāo)讀者我相信有一類(lèi)Linux系統(tǒng)管理員會(huì)從這個(gè)系列教程中收獲最多,他們已經(jīng)在管理一個(gè)小規(guī)模的服務(wù)器系統(tǒng)網(wǎng)絡(luò),想知道如何擴(kuò)大現(xiàn)有的

2、基礎(chǔ)結(jié)構(gòu),并且為管理新增系統(tǒng)付出的的時(shí)間和精力,不會(huì)和新增系統(tǒng)的數(shù)目成正比?;蛟S你目前在管理5個(gè)服務(wù)器系統(tǒng),你可以問(wèn)一下自己有沒(méi)有更好的方法,可以在不增加人手的情況下,來(lái)管理50個(gè)服務(wù)器系統(tǒng)?;蛘吣阋呀?jīng)聽(tīng)說(shuō)過(guò)集中式配置管理和Puppet, 并且渴望嘗試一下。先決條件如果你的電腦安裝了Linux、Windows 或者 Mac OS X 桌面操作系統(tǒng),擁有至少4G內(nèi)存,16G可用磁盤(pán)空間,并且CPU可以運(yùn)行虛擬機(jī),那就足夠了。所有你要做的事情和需要的信息,我會(huì)在這個(gè)系列課程中為你說(shuō)明。 開(kāi)始我無(wú)需說(shuō)服你使用Puppet實(shí)現(xiàn)基于工具的配置管理,既然你能讀到這里,你可能已經(jīng)想要使用它了,所以讓我們馬上

3、開(kāi)始吧。我承諾這是一個(gè)易上手的全面的教程,為此,我們需要準(zhǔn)備一個(gè)環(huán)境,這樣我們可以不僅可以討論如何使用Puppet,而且能夠創(chuàng)建一個(gè)雖然很小但是真實(shí)的服務(wù)器基礎(chǔ)結(jié)構(gòu),在這個(gè)基礎(chǔ)結(jié)構(gòu)中,我們會(huì)運(yùn)行一個(gè)Puppet服務(wù)器,它會(huì)管理一個(gè)Puppet客戶(hù)端。換句話(huà)說(shuō),我們需要兩個(gè)Linux虛擬機(jī)。在這個(gè)教程中,我愿意使用兩個(gè) Ubuntu 12.04 LTS Precise Pangolin 系統(tǒng),這只是因?yàn)槲覍?duì)這個(gè)Linux發(fā)行版本最有經(jīng)驗(yàn)。如果你使用更新版本的Ubuntu或者Debian 7.0 Wheezy,那么這里描述的步驟應(yīng)該不會(huì)有很大的區(qū)別。我們要做的第一件事情是從Or

4、acle網(wǎng)站下載安裝VirtualBox。這是一個(gè)免費(fèi)的虛擬機(jī)管理軟件,我們可以使用它來(lái)運(yùn)行上面提到的兩個(gè)虛擬Ubuntu系統(tǒng)。在寫(xiě)這篇教程時(shí),VirtualBox的最新發(fā)布版本是4.3.8-92456,你可以前往/virtualbox/4.3.8/ ,然后根據(jù)使用的操作系統(tǒng),來(lái)下載VirtualBox-4.3.8-92456-Win.exe, VirtualBox-4.3.8-92456-OSX.dmg, 或者 VirtualBox-4.3.8-92456-Linux_amd64.run。一旦下載完成后,

5、你就可以使用默認(rèn)選項(xiàng)進(jìn)行安裝了。一旦將VirtualBox安裝到你的電腦后,你就需要下載Ubuntu 12.04 LTS 64位服務(wù)器版本的安裝媒介了,你可以前往  PC (AMD64) server install CD 鏈接來(lái)進(jìn)行下載,我們會(huì)使用這個(gè)ISO來(lái)安裝兩個(gè)虛擬機(jī)。一旦將ISO文件完全下載到你的電腦后,你可以打開(kāi)VirtualBox,在Machine菜單下選擇New。我們開(kāi)始安裝虛擬機(jī),這個(gè)虛擬機(jī)會(huì)被當(dāng)做Puppet服務(wù)器,因此在彈出窗口中,我們將虛擬機(jī)的名字設(shè)置為puppetserver。接下來(lái)將Type設(shè)置為L(zhǎng)inux,將Version設(shè)置為Ubuntu(6

6、4bit)。 將內(nèi)存大小設(shè)置為512M就足夠了。讓VirtualBox來(lái)為虛擬機(jī)創(chuàng)建一個(gè)硬盤(pán)文件(將大小設(shè)置為8G就足夠了)?,F(xiàn)在你就可以啟動(dòng)最新創(chuàng)建的虛擬機(jī)了。VirtualBox會(huì)向你詢(xún)問(wèn)安裝媒介,這里需要指向你已經(jīng)下載完畢的Ubuntu ISO文件的路徑。VirtualBox就會(huì)啟動(dòng)虛擬機(jī)并引導(dǎo)進(jìn)入U(xiǎn)buntu的安裝CD,選擇English作為安裝過(guò)程中使用的語(yǔ)言,然后選擇Install Ubuntu Server繼續(xù)安裝。在安裝過(guò)程中,你應(yīng)該進(jìn)行如下設(shè)置:· 語(yǔ)言:English· 國(guó)家:選擇你的國(guó)家· Locale:en_US.UTF-8· 鍵

7、盤(pán):選擇最適合你需要的鍵盤(pán)布局· 默認(rèn)用戶(hù):ubuntu,密碼ubuntu· 加密home目錄:No· 時(shí)區(qū):選擇你所在的時(shí)區(qū)· 分區(qū):Guided use entire disk· 當(dāng)被詢(xún)問(wèn)需要安裝哪些包時(shí),只選擇OpenSSH server。· 將grub安裝進(jìn)MBR· 將系統(tǒng)時(shí)鐘設(shè)置為UTC· 不要自動(dòng)安裝安全更新。一旦第一個(gè)虛擬機(jī)的安裝完成后,啟動(dòng)它并進(jìn)入。然后,我們創(chuàng)建第二個(gè)虛擬機(jī),這個(gè)虛擬機(jī)是我們的puppet客戶(hù)端。你可以參考安裝第一個(gè)虛擬機(jī)時(shí)的處理方式,但其中有一個(gè)例外:在VirtualBox內(nèi)部安

8、裝Ubuntu的過(guò)程中,將第二臺(tái)虛擬機(jī)的名字設(shè)置為 puppetclient,而不是 puppetserver。在完成安裝后,你可以像操作第一臺(tái)虛擬機(jī)那樣,啟動(dòng)并進(jìn)入第二臺(tái)虛擬機(jī)。這時(shí)你會(huì)看到兩個(gè)VirtualBox的窗口,都在運(yùn)行Ubuntu 12.04, 都向你提示輸入登錄信息。接下來(lái),我們需要對(duì)VirtualBox進(jìn)行一些配置,因此你需要登陸到兩臺(tái)虛擬機(jī)(用戶(hù)名:ubuntu,密碼:ubuntu),然后通過(guò)命令sudo poweroff來(lái)關(guān)閉它們。網(wǎng)絡(luò)因?yàn)槲覀円⒁粋€(gè)Puppet服務(wù)器和客戶(hù)端,所以這兩臺(tái)虛擬機(jī)需要通過(guò)網(wǎng)絡(luò)彼此通信。同時(shí),如果能夠從我們自己的電腦連接

9、到這兩臺(tái)虛擬機(jī),也會(huì)比較方便,這樣我們可以通過(guò)SSH的方式連接到虛擬機(jī),而不是通過(guò)一個(gè)很小的不易用的VirtualBox控制臺(tái)。最后還有重要的一點(diǎn),這兩臺(tái)虛擬機(jī)需要能夠連接到互聯(lián)網(wǎng),這樣才可以安裝相關(guān)軟件。為了實(shí)現(xiàn)這些,我們需要兩個(gè)虛擬的網(wǎng)絡(luò),一個(gè)Host-only網(wǎng)絡(luò)和一個(gè)NAT網(wǎng)絡(luò)。這兩臺(tái)虛擬機(jī)則各需要有兩個(gè)以太網(wǎng)適配器,其中eth0用來(lái)連接到Host-only網(wǎng)絡(luò),eth1用來(lái)連接到NAT網(wǎng)絡(luò)。Host-only網(wǎng)絡(luò)允許這兩臺(tái)虛擬機(jī)可以彼此連接,也允許我們可以使用自己的電腦連接到這兩臺(tái)虛擬機(jī)上。NAT網(wǎng)絡(luò)則允許這兩臺(tái)虛擬機(jī)可以訪(fǎng)問(wèn)互聯(lián)網(wǎng)。VirtualBox本身已經(jīng)建立了這兩種網(wǎng)絡(luò)。選擇

10、File -> Preference,然后找到Network,其中NAT Networks選項(xiàng)卡中雖然沒(méi)有列出任何網(wǎng)絡(luò),但其實(shí)一直會(huì)存在一個(gè)可用的網(wǎng)絡(luò),因此我們不需要再額外配置一個(gè)。然后切換到Host-only Networks選項(xiàng)卡。我們需要確保有一個(gè)名為vboxnet0的網(wǎng)絡(luò)是可用的。點(diǎn)擊在列表旁邊的小螺絲刀圖標(biāo),在彈出的窗口中,需要確認(rèn)Adapter和DHCP Server的配置如下所示。在Host-only網(wǎng)絡(luò)中,我們自己的電腦的IP地址被自動(dòng)設(shè)置為,我們的puppetserver虛擬機(jī)應(yīng)該設(shè)置為,puppetc

11、lient虛擬機(jī)應(yīng)該設(shè)置為。為了做到如上配置,我們需要在兩個(gè)虛擬機(jī)內(nèi)打開(kāi)Settings對(duì)話(huà)框,找到Network,然后將Adapter 1綁定到Host-only Adapter,并將Name設(shè)置為vboxnet0。然后將Adapter 2綁定到NAT(注意:不是NAT Network?。?。這些配置在兩臺(tái)虛擬機(jī)上必須保持一致?,F(xiàn)在啟動(dòng)兩臺(tái)虛擬機(jī)并使用ubuntu用戶(hù)信息登錄系統(tǒng)。我們需要在兩臺(tái)虛擬機(jī)內(nèi)編輯/etc/network/interfaces文件來(lái)配置網(wǎng)絡(luò)接口。對(duì)于puppetserver來(lái)說(shuō),該文件如下所示。/etc/network/interfaces o

12、n puppetserver12345678910auto loiface lo inet loopback auto eth0iface eth0 inet static    address     netmask  auto eth1iface eth1 inet dhcp對(duì)于 puppetclient 來(lái)說(shuō),該文件如下所示。/etc/network/interfaces on puppetclient123456789

13、10auto loiface lo inet loopback auto eth0iface eth0 inet static    address     netmask  auto eth1iface eth1 inet dhcp如你所見(jiàn),這兩臺(tái)虛擬機(jī)的配置中,唯一不同的地方就是IP地址。通過(guò)如上配置,我們的虛擬機(jī)就可以通過(guò)eth1來(lái)訪(fǎng)問(wèn)互聯(lián)網(wǎng),并通過(guò)eth0中設(shè)置的靜態(tài)IP地址來(lái)訪(fǎng)問(wèn)彼此。最后一步,我們需要將兩臺(tái)虛擬機(jī)的名字放到兩臺(tái)虛擬機(jī)的

14、hosts文件中,這樣我們就可以通過(guò)名字而不是IP地址來(lái)訪(fǎng)問(wèn)它們。puppetserver虛擬機(jī)上的etc/hosts文件內(nèi)容如下所示。/etc/hosts on puppetserver12345678910       localhost       puppetserver    puppetclient # The following lines are desirab

15、le for IPv6 capable hosts:1     ip6-localhost ip6-loopbackfe00:0 ip6-localnetff00:0 ip6-mcastprefixff02:1 ip6-allnodesff02:2 ip6-allrouterspuppetclient虛擬機(jī)上的/etc/hosts文件內(nèi)容如下所示。/etc/hosts on puppetclient12345678910       localhost

16、0;      puppetclient    puppetserver # The following lines are desirable for IPv6 capable hosts:1     ip6-localhost ip6-loopbackfe00:0 ip6-localnetff00:0 ip6-mcastprefixff02:1 ip6-allnodesff02:2 ip6-allrouters在重啟兩臺(tái)虛擬機(jī)后,你應(yīng)該能

17、夠從puppetserver虛擬機(jī)上成功運(yùn)行ping puppetclient命令,反過(guò)來(lái)也可以從puppetclient虛擬機(jī)上成功連接到puppetserver虛擬機(jī),同樣你也應(yīng)該能夠在自己的電腦上成功運(yùn)行 ping  和 ping 。搭建Puppet服務(wù)器現(xiàn)在,我們已經(jīng)建立了Puppet服務(wù)器和Puppet客戶(hù)端的虛擬機(jī),在虛擬機(jī)上安裝了Ubuntu,并配置好了網(wǎng)絡(luò)并正在運(yùn)行,我們可以開(kāi)始搭建Puppet服務(wù)器系統(tǒng)了。Ubuntu軟件庫(kù)為我們提供了將服務(wù)器系統(tǒng)變?yōu)镻uppet服務(wù)器所需的全部?jī)?nèi)容,我們不需要手動(dòng)

18、安裝任何軟件或者操作外部軟件包。為了安裝必要的軟件包,我們需要使用ubuntu用戶(hù)登錄到puppetserver虛擬機(jī),然后運(yùn)行如下命令。On the puppetserver VM12# <strong>sudo apt-get update# <strong>sudo apt-get install puppetmaster我們不需要做其他步驟了,現(xiàn)在Puppet服務(wù)器可以使用一個(gè)合理的默認(rèn)配置來(lái)運(yùn)行了。搭建Puppet客戶(hù)端建立Puppet客戶(hù)端(或者用Puppet術(shù)語(yǔ),代理)并在puppetclient虛擬機(jī)上運(yùn)行它,和建立Puppet服務(wù)器并沒(méi)有太大的區(qū)別。首

19、先我們需要安裝Puppet客戶(hù)端軟件包。On the puppetclient VM12# sudo apt-get update# sudo apt-get install puppet然后,我們需要編輯etc/puppet/puppet.conf文件,來(lái)告訴Puppet代理Puppet服務(wù)器的域名,為此我們需要在該文件中添加一行:server=puppetserver。/etc/puppet/puppet.conf on puppetclient12345678910111213141516mainserver=puppetserverlogdir=/var/log/puppetvardi

20、r=/var/lib/puppetssldir=/var/lib/puppet/sslrundir=/var/run/puppetfactpath=$vardir/lib/factertemplatedir=$confdir/templatesprerun_command=/etc/puppet/etckeeper-commit-prepostrun_command=/etc/puppet/etckeeper-commit-post master# These are needed when the puppetmaster is run by passenger# and can

21、safely be removed if webrick is used.ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY這樣設(shè)置后,客戶(hù)端就可以連接到puppetserver虛擬機(jī)上的Puppet master進(jìn)程了,但它還不能真正和服務(wù)器進(jìn)行通信,因?yàn)樗€沒(méi)有在已驗(yàn)證并允許的客戶(hù)端列表里面。為了實(shí)現(xiàn)這一點(diǎn),我們需要發(fā)起從客戶(hù)端到服務(wù)器的第一個(gè)連接。在 puppetclient VM1# sudo puppet agent -verbose -no-daemonize -oneti

22、me這會(huì)向Puppet master進(jìn)程發(fā)起一個(gè)連接,這個(gè)進(jìn)程會(huì)監(jiān)聽(tīng)puppetserver虛擬機(jī)上的8140端口。這個(gè)連接的輸出會(huì)很詳細(xì),然后客戶(hù)端(代理)就不再繼續(xù)以后臺(tái)daemon的方式運(yùn)行。同時(shí),它只會(huì)運(yùn)行一次,也就是說(shuō),當(dāng)這個(gè)連接關(guān)閉后,代理進(jìn)程也會(huì)結(jié)束。如果所有的配置都正確,那么第一次運(yùn)行時(shí)的輸出如下所示。在 puppetclient VM 上,運(yùn)行 Puppet 代理之后,1234info: Creating a new SSL key for puppetclientinfo: Creating a new SSL certificate request for puppetc

23、lientinfo: Certificate Request fingerprint (md5): 20:74:A7:BD:69:5D:50:8D:6A:79:67:6E:DC:5E:41:E0Exiting; no certificate found and waitforcert is disabled這個(gè)看上去似乎像是一個(gè)錯(cuò)誤,但它實(shí)際上不是??蛻?hù)端已經(jīng)通過(guò)這次運(yùn)行讓服務(wù)器知道了它的信息了,但是服務(wù)器還沒(méi)有接受這個(gè)客戶(hù)端。下一步,我們必須簽署puppetclient虛擬機(jī)已經(jīng)創(chuàng)建的SSL認(rèn)證請(qǐng)求,并將其發(fā)送給服務(wù)器。我們可以通過(guò)如下命令在服務(wù)器上查看那些還沒(méi)有被簽署的認(rèn)證請(qǐng)求列表。在 p

24、uppetserver VM 上# sudo puppet cert -list這個(gè)命令會(huì)打印如下的列表。在 puppetserver VM 上"puppetclient" (20:74:A7:BD:69:5D:50:8D:6A:79:67:6E:DC:5E:41:E0)現(xiàn)在我們可以簽署這個(gè)請(qǐng)求,這樣我們就允許客戶(hù)端在接下來(lái)的連接中可以收到服務(wù)器的信息。在 puppetserver VM 上1234# sudo puppet cert -sign puppetclient notice: Signed certificate request for pu

25、ppetclientnotice: Removing file Puppet:SSL:CertificateRequest puppetclient at '/var/lib/puppet/ssl/ca/requests/puppetclient.pem'切換回puppetclient虛擬機(jī),我們現(xiàn)在能夠初始化一個(gè)指向服務(wù)器的完整連接了。在 puppetserver VM 上12345678# sudo puppet agent -verbose -no-daemonize -onetime info: Caching certificate for puppetcl

26、ientinfo: Caching certificate_revocation_list for cainfo: Caching catalog for puppetclientinfo: Applying configuration version '1395687915'info: Creating state file /var/lib/puppet/state/state.yamlnotice: Finished catalog run in 0.02 seconds就是這樣我們的Puppet基礎(chǔ)結(jié)構(gòu)已經(jīng)完全建好并開(kāi)始運(yùn)行了。但是,在這個(gè)基礎(chǔ)結(jié)構(gòu)還并不能做任何事情。我

27、們的目標(biāo)是通過(guò)運(yùn)行在puppetserver虛擬機(jī)上的Puppet master,來(lái)管理puppetclient虛擬機(jī)上的配置。但是我們目前還沒(méi)有定義任何信息來(lái)觸發(fā)客戶(hù)端的配置改動(dòng)。這就是我們要在使用Puppet來(lái)構(gòu)建可管理的服務(wù)器基礎(chǔ)結(jié)構(gòu): 第二部分會(huì)涉及的內(nèi)容。關(guān)于在第一部分中,我們已經(jīng)建立了兩個(gè)Linux系統(tǒng)虛擬機(jī):puppetserver 和 puppetclient。我們已經(jīng)實(shí)現(xiàn)了一個(gè)重要的里程碑:在虛擬機(jī)上分別安裝了Puppet服務(wù)器和Puppet客戶(hù)端軟件,并且在Puppet服務(wù)器端對(duì)Puppet客戶(hù)端進(jìn)行了認(rèn)證。接下來(lái)我們要在此基礎(chǔ)上,開(kāi)始通過(guò)在puppet

28、server虛擬機(jī)上的Puppet服務(wù)器,來(lái)配置puppetclient虛擬機(jī)系統(tǒng)。你好,Puppet我們以一個(gè)非?;镜氖纠_(kāi)始。在這個(gè)示例中,我們?yōu)閜uppetclient虛擬機(jī)建立一個(gè)非常簡(jiǎn)單的配置:在puppetclient虛擬機(jī)系統(tǒng)的/home/ubuntu目錄下創(chuàng)建一個(gè)名為helloworld.txt文件,文件的內(nèi)容是”Hello World!”。Puppet自帶一個(gè)功能強(qiáng)大的聲明式配置語(yǔ)言。我們使用這種語(yǔ)言來(lái)編寫(xiě)的內(nèi)容被稱(chēng)為清單(manifest)。Puppet清單是一個(gè)文件,它描述了目標(biāo)系統(tǒng)中的某些方面應(yīng)該是什么樣的。在這個(gè)系列教程中,我們會(huì)編寫(xiě)很多不同的清單:其中一些會(huì)在目標(biāo)

29、系統(tǒng)上創(chuàng)建一些文件;一些會(huì)創(chuàng)建用戶(hù)賬戶(hù);一些會(huì)安裝軟件包。清單會(huì)被應(yīng)用到目標(biāo)系統(tǒng)上。對(duì)Puppet來(lái)說(shuō),目標(biāo)系統(tǒng)被稱(chēng)為節(jié)點(diǎn)(node)。我們的puppetclient虛擬機(jī)系統(tǒng)就是這樣一個(gè)節(jié)點(diǎn)。我們已經(jīng)為它做了Puppet服務(wù)器認(rèn)證,這樣可以保證Puppet服務(wù)器來(lái)管理這個(gè)節(jié)點(diǎn)。但我們的服務(wù)器還沒(méi)有任何信息,可以用來(lái)管理這個(gè)節(jié)點(diǎn)。我們可以通過(guò)編寫(xiě)一個(gè)清單并將其放在節(jié)點(diǎn)上來(lái)改變它。為此,我們會(huì)創(chuàng)建一個(gè)非常簡(jiǎn)單的清單定義,這個(gè)定義會(huì)被放在puppetserver虛擬機(jī)系統(tǒng)的主清單文件中,文件的路徑是/etc/puppet/manifests/site.pp:/etc/puppet/manifest

30、s/site.pp on puppetserver12345678910node "puppetclient"    file "/root/helloworld.txt":    ensure => file,    owner  => "root",    group  => "root",   

31、 mode   => 0644   我們稍后會(huì)看到,清單可以通過(guò)模塊化的方式放到任意數(shù)目的不同文件中(這樣可以幫助我們針對(duì)大型復(fù)雜的站點(diǎn)建立清單結(jié)構(gòu))。但是一切都還是從site.pp開(kāi)始。我們來(lái)仔細(xì)分析一下這個(gè)最簡(jiǎn)化的清單,它包含兩部分:一個(gè)包含file定義的node,因?yàn)閒ile部分包含在node部分中,這樣file部分的定義產(chǎn)生的結(jié)果會(huì)應(yīng)用到名為puppetclient的節(jié)點(diǎn)上。通過(guò)在puppetclient虛擬機(jī)系統(tǒng)上運(yùn)行Puppet代理,我們可以很容易理解上面描述的內(nèi)容。On the puppetclient VM123

32、4# sudo puppet agent -verbose -no-daemonize -onetimeinfo: Caching catalog for puppetclientinfo: Applying configuration version '1395862307'notice: /Stagemain/Nodepuppetclient/File/home/ubuntu/helloworld.txt/ensure: creatednotice: Finished catalog run in 0.03 seconds或許這看上去沒(méi)有什么大驚小怪:puppetclien

33、t虛擬機(jī)上的Puppet代理聯(lián)系到puppetserver虛擬機(jī)上的Puppet master。然后它接收目錄,這個(gè)目標(biāo)就是在master上定義的所有和這個(gè)指定客戶(hù)端有關(guān)的清單。如果你感興趣的話(huà),這個(gè)目錄被存在一個(gè)yaml結(jié)構(gòu)中,它存儲(chǔ)在 /var/lib/puppet/client_yaml/catalog/puppetclient.yaml 中,這不僅僅是復(fù)制了我們的.pp清單,而是通過(guò)對(duì)清單進(jìn)行解析,生成的一個(gè)關(guān)于目標(biāo)配置信息的編譯版本。接下來(lái),Puppet代理開(kāi)始采取行動(dòng)當(dāng)且僅當(dāng)滿(mǎn)足以下條件才會(huì)采取行動(dòng):Puppet代理會(huì)比較清單中期望的狀況和目標(biāo)節(jié)點(diǎn)上清單的狀況,

34、如果其中有一些不同(如果目標(biāo)節(jié)點(diǎn)上找到的狀況并沒(méi)有同步到期望達(dá)到的狀況)那么代理就會(huì)做任何必需的操作來(lái)移除這些區(qū)別,來(lái)實(shí)現(xiàn)目標(biāo)狀況。在我們這個(gè)特定的示例中,代理知道在目標(biāo)節(jié)點(diǎn)的/home/ubuntu目錄下,應(yīng)該有一個(gè)名為helloworld.txt的文件,這個(gè)文件的所有者和所在組是ubuntu,用戶(hù)對(duì)該文件的訪(fǎng)問(wèn)權(quán)限是0644。然而,當(dāng)檢查本地系統(tǒng)時(shí),發(fā)現(xiàn)并沒(méi)有發(fā)現(xiàn)這個(gè)文件。代理會(huì)采取行動(dòng),來(lái)創(chuàng)建這個(gè)期待中的文件。我們可以通過(guò)再次運(yùn)行代理來(lái)驗(yàn)證這個(gè)行為:On the puppetclient VM1234# sudo puppet agent -verbose -no-daemonize -

35、onetimeinfo: Caching catalog for puppetclientinfo: Applying configuration version '1395862542'notice: Finished catalog run in 0.03 seconds如我們所見(jiàn),這次代理并沒(méi)有做任何事情,這是因?yàn)槟繕?biāo)節(jié)點(diǎn)的狀況已經(jīng)滿(mǎn)足了。那如果我們修改目標(biāo)節(jié)點(diǎn)上的狀況會(huì)怎么樣呢?讓我們來(lái)修改這個(gè)文件的訪(fǎng)問(wèn)模式:在 puppetclient VM 上# chmod 0640 /home/ubuntu/helloworld.txt然后再次運(yùn)行代理:在 puppet

36、client VM 上123456# sudo puppet agent -verbose -no-daemonize -onetime info: Caching catalog for puppetclientinfo: Applying configuration version '1395862307'notice: /Stagemain/Nodepuppetclient/File/home/ubuntu/helloworld.txt/ensure: creatednotice: Finished catalog run in 0.03 seconds代理注意

37、到了區(qū)別,然后通過(guò)修改文件訪(fǎng)問(wèn)模式來(lái)移除了這個(gè)區(qū)別。如果我們修改了文件的內(nèi)容,會(huì)發(fā)生什么呢?在 puppetclient VM 上# echo "This is a test" > /home/ubuntu/helloworld.txt這時(shí)運(yùn)行代理?在 puppetclient VM 上12345# sudo puppet agent -verbose -no-daemonize -onetime info: Caching catalog for puppetclientinfo: Applying configuration version &

38、#39;1395862542'notice: Finished catalog run in 0.03 seconds沒(méi)有發(fā)生任何事情。為什么?因?yàn)樵谇鍐沃?,我們沒(méi)有對(duì)文件內(nèi)容進(jìn)行任何描述。我們所做的是讓Puppet來(lái)保證這個(gè)指定名字的文件是存在的,并且這個(gè)文件的一些元數(shù)據(jù)(擁有者、用戶(hù)組、訪(fǎng)問(wèn)模式)應(yīng)該有指定設(shè)置。Puppet只會(huì)關(guān)心那些我們讓它去關(guān)心的事情。我們?cè)谥笆纠锌吹降男袨?,正好表明了Puppet哲學(xué)的核心。在我們的清單中,我們不告訴Puppet做什么,我們也不告訴它怎么去做,我們只告訴Puppet最終的結(jié)果應(yīng)該是什么樣子。這種哲學(xué)帶來(lái)了巨大的能量,因?yàn)樗鼘?duì)配置系統(tǒng)所需要

39、的繁重的工作進(jìn)行了抽象。它撫平了不同的操作系統(tǒng)帶來(lái)的差別??紤]下面一個(gè)場(chǎng)景,你有一個(gè)由不同的Linux系統(tǒng)構(gòu)成的網(wǎng)絡(luò):有些運(yùn)行Red Hat Linux,有些在運(yùn)行Ubuntu Linux。我們進(jìn)一步假設(shè)你希望在所有的系統(tǒng)上安裝htop包。如果我們需要告訴Puppet做什么和怎么做,那么我們不得不編寫(xiě)一個(gè)清單,它在Ubuntu上使用apt-get,在Red Hat上使用yum。相反,我們所需要放到清單中的內(nèi)容如下所示:123package "htop":  ensure => installed目標(biāo)節(jié)點(diǎn)中的puppet代理會(huì)去搞清楚如何做,才能實(shí)現(xiàn)

40、清單中描述的目標(biāo)場(chǎng)景。Red Hat系統(tǒng)中的代理會(huì)使用yum來(lái)安裝包,而Ubuntu系統(tǒng)中的代理則會(huì)使用apt-get。我們?cè)谏院髸?huì)回來(lái)討論包安裝,讓我們繼續(xù)之前的文件示例。通過(guò)Puppet來(lái)創(chuàng)建一個(gè)空文件,通常都不是特別有用當(dāng)然我們更喜歡部署一些帶內(nèi)容的文件。Puppet可以很容易做到:我們可以將文件放在puppetserver虛擬機(jī)上,然后通過(guò)Puppet將其傳輸?shù)絧uppetclient虛擬機(jī)上。首先,我們?cè)趐uppetserver虛擬機(jī)上創(chuàng)建源文件:在 puppetserver VM 上123# sudo -s# mkdir /etc/puppet/files# echo "

41、Hello World." &gt; /etc/puppet/files/helloworld.txt然后,我們需要允許Puppet客戶(hù)端來(lái)訪(fǎng)問(wèn)這個(gè)文件,為此,我們需要修改puppetserver虛擬機(jī)上的/etc/puppet/fileserver.conf文件,添加一個(gè)allow *語(yǔ)句:/etc/puppet/fileserver.conf on puppetserver123456789101112131415161718# This file consists of arbitrarily named sections/modules# defining where files are served from and to whom# Define a section 'files'# Adapt the allow/deny settings to your needs. Order# for allow/deny does not matter, allow always takes precedence# over deny files  path /etc/puppet/files &

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論