我通過伯樂在線翻譯了一個Puppet簡明教程,一共分為四部分,這是第一部分。
原文地址:http://blog.jobbole.com/87679/
本文由伯樂在線-Wing翻譯,黃利民校稿。未經許可,禁止轉載!英文出處:Manue Kiessling。歡迎加入翻譯組。
關于 PuppetPuppet 是一種 linux、Unix、Windows 平臺的集中配置管理系統,使用自有的 Puppet 描述語言,可管理配置文件、用戶、cron任務、軟件包、系統服務等。Puppet把這些系統實體稱之為資源,其設計目標是簡化對這些資源的管理以及妥善處理資源之間的依賴關系。
在這一系列中,作者提供了一個可操作的全面教程,來逐步解釋如何使用 Puppet 搭建一個集中式管理的 Linux 服務器基礎結構。
目標讀者我相信有一類Linux系統管理員會從這個系列教程中收獲最多,他們已經在管理一個小規模的服務器系統網絡,想知道如何擴大現有的基礎結構,并且為管理新增系統付出的的時間和精力,不會和新增系統的數目成正比?;蛟S你目前在管理5個服務器系統,你可以問一下自己有沒有更好的方法,可以在不增加人手的情況下,來管理50個服務器系統?;蛘吣阋呀浡犝f過集中式配置管理和Puppet, 并且渴望嘗試一下。
先決條件如果你的電腦安裝了Linux、Windows 或者 Mac OS X 桌面操作系統,擁有至少4G內存,16G可用磁盤空間,并且CPU可以運行虛擬機,那就足夠了。所有你要做的事情和需要的信息,我會在這個系列課程中為你說明。
開始我無需說服你使用Puppet實現基于工具的配置管理,既然你能讀到這里,你可能已經想要使用它了,所以讓我們馬上開始吧。
我承諾這是一個易上手的全面的教程,為此,我們需要準備一個環境,這樣我們可以不僅可以討論如何使用Puppet,而且能夠創建一個雖然很小但是真實的服務器基礎結構,在這個基礎結構中,我們會運行一個Puppet服務器,它會管理一個Puppet客戶端。換句話說,我們需要兩個Linux虛擬機。
在這個教程中,我愿意使用兩個Ubuntu 12.04 LTS PRecise Pangolin系統,這只是因為我對這個Linux發行版本最有經驗。如果你使用更新版本的Ubuntu或者Debian 7.0 Wheezy,那么這里描述的步驟應該不會有很大的區別。
我們要做的第一件事情是從Oracle網站下載安裝VirtualBox。這是一個免費的虛擬機管理軟件,我們可以使用它來運行上面提到的兩個虛擬Ubuntu系統。在寫這篇教程時,VirtualBox的最新發布版本是4.3.8-92456,你可以前往http://download.virtualbox.org/virtualbox/4.3.8/,然后根據使用的操作系統,來下載VirtualBox-4.3.8-92456-Win.exe,VirtualBox-4.3.8-92456-OSX.dmg, 或者VirtualBox-4.3.8-92456-Linux_amd64.run。一旦下載完成后,你就可以使用默認選項進行安裝了。
一旦將VirtualBox安裝到你的電腦后,你就需要下載Ubuntu 12.04 LTS 64位服務器版本的安裝媒介了,你可以前往http://releases.ubuntu.com/12.04/,然后選擇64-bit PC (AMD64) server install CD鏈接來進行下載,我們會使用這個ISO來安裝兩個虛擬機。
一旦將ISO文件完全下載到你的電腦后,你可以打開VirtualBox,在Machine菜單下選擇New…。
我們開始安裝虛擬機,這個虛擬機會被當做Puppet服務器,因此在彈出窗口中,我們將虛擬機的名字設置為puppetserver。接下來將Type設置為Linux,將Version設置為Ubuntu(64bit)。 將內存大小設置為512M就足夠了。讓VirtualBox來為虛擬機創建一個硬盤文件(將大小設置為8G就足夠了)。
現在你就可以啟動最新創建的虛擬機了。VirtualBox會向你詢問安裝媒介,這里需要指向你已經下載完畢的Ubuntu ISO文件的路徑。
VirtualBox就會啟動虛擬機并引導進入Ubuntu的安裝CD,選擇English作為安裝過程中使用的語言,然后選擇Install Ubuntu Server繼續安裝。
在安裝過程中,你應該進行如下設置:
一旦第一個虛擬機的安裝完成后,啟動它并進入。然后,我們創建第二個虛擬機,這個虛擬機是我們的puppet客戶端。你可以參考安裝第一個虛擬機時的處理方式,但其中有一個例外:在VirtualBox內部安裝Ubuntu的過程中,將第二臺虛擬機的名字設置為puppetclient,而不是puppetserver。
在完成安裝后,你可以像操作第一臺虛擬機那樣,啟動并進入第二臺虛擬機。這時你會看到兩個VirtualBox的窗口,都在運行Ubuntu 12.04, 都向你提示輸入登錄信息。接下來,我們需要對VirtualBox進行一些配置,因此你需要登陸到兩臺虛擬機(用戶名:ubuntu,密碼:ubuntu),然后通過命令sudo poweroff來關閉它們。
網絡因為我們要建立一個Puppet服務器和客戶端,所以這兩臺虛擬機需要通過網絡彼此通信。同時,如果能夠從我們自己的電腦連接到這兩臺虛擬機,也會比較方便,這樣我們可以通過SSH的方式連接到虛擬機,而不是通過一個很小的不易用的VirtualBox控制臺。最后還有重要的一點,這兩臺虛擬機需要能夠連接到互聯網,這樣才可以安裝相關軟件。
為了實現這些,我們需要兩個虛擬的網絡,一個Host-only網絡和一個NAT網絡。這兩臺虛擬機則各需要有兩個以太網適配器,其中eth0用來連接到Host-only網絡,eth1用來連接到NAT網絡。
Host-only網絡允許這兩臺虛擬機可以彼此連接,也允許我們可以使用自己的電腦連接到這兩臺虛擬機上。NAT網絡則允許這兩臺虛擬機可以訪問互聯網。
VirtualBox本身已經建立了這兩種網絡。選擇File->Preference,然后找到Network,其中NAT Networks選項卡中雖然沒有列出任何網絡,但其實一直會存在一個可用的網絡,因此我們不需要再額外配置一個。然后切換到Host-only Networks選項卡。我們需要確保有一個名為vboxnet0的網絡是可用的。點擊在列表旁邊的小螺絲刀圖標,在彈出的窗口中,需要確認Adapter和DHCP Server的配置如下所示。
在Host-only網絡中,我們自己的電腦的IP地址被自動設置為192.168.56.1,我們的puppetserver虛擬機應該設置為192.168.56.2,puppetclient虛擬機應該設置為192.168.56.3。
為了做到如上配置,我們需要在兩個虛擬機內打開Settings對話框,找到Network,然后將Adapter 1綁定到Host-only Adapter,并將Name設置為vboxnet0。然后將Adapter 2綁定到NAT(注意:不是NAT Network?。_@些配置在兩臺虛擬機上必須保持一致。
現在啟動兩臺虛擬機并使用ubuntu用戶信息登錄系統。我們需要在兩臺虛擬機內編輯/etc/network/interfaces文件來配置網絡接口。對于puppetserver來說,該文件如下所示。
/etc/network/interfaces on puppetserver
12345678910 | auto lo iface lo inet loopback auto eth0 iface eth0 inet static
address 192.168.56.2
netmask 255.255.255.0 auto eth1 iface eth1 inet dhcp |
對于puppetclient來說,該文件如下所示。
/etc/network/interfaces on puppetclient
12345678910 | auto lo iface lo inet loopback auto eth0 iface eth0 inet static
address 192.168 . 56.3
netmask 255.255 . 255.0 auto eth1 iface eth1 inet dhcp |
如你所見,這兩臺虛擬機的配置中,唯一不同的地方就是IP地址。通過如上配置,我們的虛擬機就可以通過eth1來訪問互聯網,并通過eth0中設置的靜態IP地址來訪問彼此。
最后一步,我們需要將兩臺虛擬機的名字放到兩臺虛擬機的hosts文件中,這樣我們就可以通過名字而不是IP地址來訪問它們。puppetserver虛擬機上的etc/hosts文件內容如下所示。
/etc/hosts on puppetserver
12345678910 | 127.0 . 0.1 localhost 127.0 . 1.1 puppetserver 192.168 . 56.3 puppetclient # The following lines are desirable for IPv6 capable hosts :: 1 ip6-localhost ip6-loopback fe00:: 0 ip6-localnet ff00:: 0 ip6-mcastprefix ff02:: 1 ip6-allnodes ff02:: 2 ip6-allrouters |
puppetclient虛擬機上的/etc/hosts文件內容如下所示。
/etc/hosts on puppetclient
12345678910 | 127.0 . 0.1 localhost 127.0 . 1.1 puppetclient 192.168 . 56.2 puppetserver # The following lines are desirable for IPv6 capable hosts :: 1 ip6-localhost ip6-loopback fe00:: 0 ip6-localnet ff00:: 0 ip6-mcastprefix ff02:: 1 ip6-allnodes ff02:: 2 ip6-allrouters |
在重啟兩臺虛擬機后,你應該能夠從puppetserver虛擬機上成功運行ping puppetclient命令,反過來也可以從puppetclient虛擬機上成功連接到puppetserver虛擬機,同樣你也應該能夠在自己的電腦上成功運行ping 192.168.56.2和ping 192.168.56.3。
搭建Puppet服務器現在,我們已經建立了Puppet服務器和Puppet客戶端的虛擬機,在虛擬機上安裝了Ubuntu,并配置好了網絡并正在運行,我們可以開始搭建Puppet服務器系統了。
Ubuntu軟件庫為我們提供了將服務器系統變為Puppet服務器所需的全部內容,我們不需要手動安裝任何軟件或者操作外部軟件包。
為了安裝必要的軟件包,我們需要使用ubuntu用戶登錄到puppetserver虛擬機,然后運行如下命令。
On the puppetserver VM
12 | ~# <strong>sudo apt- get update ~# <strong>sudo apt- get install puppetmaster |
我們不需要做其他步驟了,現在Puppet服務器可以使用一個合理的默認配置來運行了。
搭建Puppet客戶端建立Puppet客戶端(或者用Puppet術語,代理)并在puppetclient虛擬機上運行它,和建立Puppet服務器并沒有太大的區別。首先我們需要安裝Puppet客戶端軟件包。
On the puppetclient VM
12 | ~# sudo apt- get update ~# sudo apt- get install puppet |
然后,我們需要編輯etc/puppet/puppet.conf文件,來告訴Puppet代理Puppet服務器的域名,為此我們需要在該文件中添加一行:server=puppetserver。
/etc/puppet/puppet.conf on puppetclient
12345678910111213141516 | [main] server=puppetserver logdir=/ var /log/puppet var dir=/ var /lib/puppet ssldir=/ var /lib/puppet/ssl rundir=/ var /run/puppet factpath=$ var dir/lib/facter templatedir=$confdir/templates prerun_command=/etc/puppet/etckeeper-commit-pre postrun_command=/etc/puppet/etckeeper-commit-post [master] # These are needed when the puppetmaster is run by passenger # and can safely be removed if webrick is used. ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY |
這樣設置后,客戶端就可以連接到puppetserver虛擬機上的Puppet master進程了,但它還不能真正和服務器進行通信,因為它還沒有在已驗證并允許的客戶端列表里面。為了實現這一點,我們需要發起從客戶端到服務器的第一個連接。
在 puppetclient VM
1 | ~# sudo puppet agent --verbose --no-daemonize --onetime |
這會向Puppet master進程發起一個連接,這個進程會監聽puppetserver虛擬機上的8140端口。這個連接的輸出會很詳細,然后客戶端(代理)就不再繼續以后臺daemon的方式運行。同時,它只會運行一次,也就是說,當這個連接關閉后,代理進程也會結束。
如果所有的配置都正確,那么第一次運行時的輸出如下所示。
在 puppetclient VM 上,運行 Puppet 代理之后,
1234 | info: Creating a new SSL key for puppetclient info: Creating a new SSL certificate request for puppetclient info: Certificate Request fingerprint (md5): 20 : 74 :A7:BD: 69 :5D: 50 :8D:6A: 79 : 67 :6E:DC:5E: 41 :E0 Exiting; no certificate found and waitforcert is disabled |
這個看上去似乎像是一個錯誤,但它實際上不是。客戶端已經通過這次運行讓服務器知道了它的信息了,但是服務器還沒有接受這個客戶端。下一步,我們必須簽署puppetclient虛擬機已經創建的SSL認證請求,并將其發送給服務器。我們可以通過如下命令在服務器上查看那些還沒有被簽署的認證請求列表。
在 puppetserver VM 上
~#sudo puppet cert --list
這個命令會打印如下的列表。
在 puppetserver VM 上
"puppetclient" (20:74:A7:BD:69:5D:50:8D:6A:79:67:6E:DC:5E:41:E0)
現在我們可以簽署這個請求,這樣我們就允許客戶端在接下來的連接中可以收到服務器的信息。
在 puppetserver VM 上
1234 | ~# sudo puppet cert --sign puppetclient notice: Signed certificate request for puppetclient notice: Removing file Puppet::SSL::CertificateRequest puppetclient at '/var/lib/puppet/ssl/ca/requests/puppetclient.pem' |
切換回puppetclient虛擬機,我們現在能夠初始化一個指向服務器的完整連接了。
在 puppetserver VM 上
12345678 | ~# sudo puppet agent --verbose --no-daemonize --onetime info: Caching certificate for puppetclient info: Caching certificate_revocation_list for ca info: Caching catalog for puppetclient info: Applying configuration version '1395687915' info: Creating state file / var /lib/puppet/state/state.yaml notice: Finished catalog run in 0.02 seconds |
就是這樣——我們的Puppet基礎結構已經完全建好并開始運行了。但是,在這個基礎結構還并不能做任何事情。我們的目標是通過運行在puppetserver虛擬機上的Puppet master,來管理puppetclient虛擬機上的配置。但是我們目前還沒有定義任何信息來觸發客戶端的配置改動。這就是我們要在使用Puppet來構建可管理的服務器基礎結構: 第二部分會涉及的內容。
新聞熱點
疑難解答