簡介
Puppet是開源的基於Ruby的系統配置管理工具,puppet是一個C/S結構, 當然,這里的C可以有很多,因此,也可以說是一個星型結構. 所有的puppet客戶端同一個服務器端的puppet通訊. 每個puppet客戶端每半小時(可以設置)連接一次服務器端, 下載最新的配置文件,並且嚴格按照配置文件來配置服務器. 配置完成以后,puppet客戶端可以反饋給服務器端一個消息. 如果出錯,也會給服務器端反饋一個消息.
工作流程
(1)客戶端puppetd調用facter,facter探測出主機的一些變量,例如主機名,內存大小,ip地址等。pupppetd 把這些信息通過ssl連接發送到服務器端;
(2)服務器端的puppetmaster 檢測客戶端的主機名,然后找到manifest里面對應的node配置, 並對該部分內容進行解析,facter送過來的信息可以作為變量處理,node牽涉到的代碼才解析,其他沒牽涉的代碼不解析。解析分為幾個階段,語法檢查,如果語法錯誤就報錯。如果語法沒錯,就繼續解析,解析的結果生成一個中間的“偽代碼”,然后把偽代碼發給客戶端;
(3)客戶端接收到“偽代碼”,並且執行,客戶端把執行結果發送給服務器;
(4)服務器端把客戶端的執行結果寫入日志。
准備
|
Master |
Agent |
系統 |
Centos 6.6 |
Centos 6.6 |
ip(自設) |
192.168.2.40 |
192.168.2.42 |
主機名(自設) |
master.kisspuppet.com |
agent.kisspuppt.com |
|
|
|
|
|
|
|
|
|
安裝
Puppet 不在 CentOS 的基本源中,需要加入 PuppetLabs 提供的官方源:
wget http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm yum install puppetlabs-release-6-1.noarch.rpm yum update
Master端
yum install -y ruby facter puppet-server # 啟動 service puppet start service puppetmaster start # 設置開機自啟動 chkconfig puppet on chkconfig puppetmaster on
Agent端
yum install -y ruby facter puppet 啟動 service puppet start 設置開機自啟動 chkconfig puppet on 配置 vim /etc/puppet/puppet.conf 添加下面一行 server=master.kisspuppet.com 重啟puppet service puppet restart
Agent申請證書
Master自動簽發證書設置
設置master自動簽發所有的證書,我們只需要在/etc/puppet目錄下創建 autosign.conf文件。(不需要修改 /etc/puppet/puppet.conf文件,因為我默認的autosign.conf 文件的位置沒有修改)
[ root @ master ~ ] # cat > / etc / puppet / autosign . conf < < EOF > * . redking . com > EOF [ root @ master ~ ] # service puppetmaster restart Stopping puppetmaster: [ OK ] Starting puppetmaster: [ OK ] [ root @ master ~ ] #
這樣就會對所有來自fisteam2.com的機器的請求,都自動簽名。Agent需要向服務器端發出請求, 讓服務器對客戶端進行管理. 這其實是一個證書簽發的過程. 第一次運行 puppet 客戶端的時候會生成一個 SSL 證書並指定發給 Puppet 服務端, 服務器端如果同意管理客戶端,就會對這個證書進行簽發,可以用這個命令來簽發證書,由於我們已經在客戶端設置了server地址,因此不需要跟服務端地址
Agent向Master請求認證
輸入下列命令就可以申請證書了
[ root @ agent1 ~ ] # puppet agent --test
由於我配置的自動簽發證書,所以直接就簽發了,在服務端執行下列命令進行查看是否認證成功。
[ root @ master ~ ] # puppet cert list --all
測試
現在可以在服務端寫個小例子來測試一下。這個例子作用很簡單,用來在客戶端的 /tmp 目錄下新建一個 helloworld.txt 文件,內容為 hello, world. 在Master端編寫代碼:
# vi /etc/puppet/manifests/site.pp node default { file { "/tmp/helloworld.txt": content => "hello, world"; } }
在Agent端上執行 puppet,運行成功后會在 /tmp 看到新生成的 helloworld.txt:
$ puppet agent --test --server=master.vpsee.com warning: peer certificate won't be verified in this SSL session info: Caching certificate for client.vpsee.com info: Caching certificate_revocation_list for ca info: Caching catalog for client.vpsee.com info: Applying configuration version '1330668451' notice: /Stage[main]//Node[default]/File[/tmp/helloworld.txt]/ensure: defined content as '{md5}e4d7f1b4ed2e42d15898f4b27b019da4' info: Creating state file /home/vpsee/.puppet/var/state/state.yaml notice: Finished catalog run in 0.03 seconds
查看Agent端
$ cat /tmp/helloworld.txt hello, world
這樣就說明puppet能夠正常運行。