Puppet是開源的基於Ruby的一種Linux、Unix平臺的集中配置管理工具,puppet是一個C/S結構, 當然,這裏的C可以有很多,因此,也可以說是一個星型結構. puppet使用自有的puppet描述語言,可管理配置文件、用戶、cron任務、軟件包、系統服務等。puppet把這些管理實體稱之爲資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關係。
Puppet 在部署時要求所有機器有完整的域名,如果沒有 DNS 服務器提供域名的話,可以在兩臺或多臺機器上設置主機名(注意要先設置主機名再安裝 Puppet,因啓動Puppet 時會把主機名寫入證書,客戶端和服務端通信需要這個證書)。
一、 安裝puppet
1) 修改服務器端主機名
#hostname server.f.com
#echo “10.0.211.5 server.f.com” >>/etc/hosts
#echo “102.168.202.80 client.f.com” >>/etc/hosts
#echo “HOSTNAME=server.f.com”>>/etc/sysconfig/netwo rk-scripts/ifconfigeth0
2) 修改客戶端主機名(這裏筆者做測試所以就部署了一臺agent客戶機)
#hostname client.f.com
#echo “102.168.202.80 client.f.com” >>/etc/hosts
#echo “102.168.202.80 client.f.com” >>/etc/hosts
#echo “HOSTNAME=client.f.com”>>/etc/sysconfig/netwo rk-scripts/ifconfigeth0
3) vi /etc/resolv.conf
#search localdomain #註釋掉這行,不然造成後面無法認證
4) Server端安裝程序
a)#使用yum安裝ruby運行環境
#yum install ruby ruby-libs ruby-rdoc
b)#安裝epel庫
rpm –Uvh
ftp://ftp.sunet.se/pub/Linux/distributions/yellowdog/yum/6.2/extras/RPMS/epel-release-5-3.noarch.rpm
c)安裝puppet相關程序
yum -y install puppet puppet-server facter
5) 客戶端程序agent安裝
a) #使用yum安裝ruby運行環境
#yum install ruby ruby-libs ruby-rdoc
b) #安裝epel庫
rpm –Uvh
ftp://ftp.sunet.se/pub/Linux/distributions/yellowdog/yum/6.2/extras/RPMS/epel-release-5-3.noarch.rpm
c) #安裝puppet相關程序
yum -y install puppet facter
二、 配置puppet
1.Server端配置
2. Agent端配置
Agent的配置主要是更改agent上的/etc/puppet/puppet.conf文件的第二部分的agent部分。
#vi /etc/puppet/puppet.conf
# 添加如下配置
server =server.f.com
runinterval = 3600
listen = true
三、 啓動puppet服務
在服務器和客戶端進行同步時間
#/sbin/ntpdate time.nist.gov
服務端主程序的啓動:
1) 第一次啓動時可以使用puppet master --verbose --no-daemon命令進行啓動,這樣我們可以看到這個啓動過程並能夠準確定位故障。
在這裏筆者使用service puppetmaster start命令啓動puppet主服務。
客戶端程序啓動:
2) service puppet start
四、 請求證書及證書授權
3)在客戶端執行如下命令請求服務端頒發證書
puppetd --test –server server.f.com
報錯如下(如果沒有報錯的同志這一部分就不要看啦,浪費時間)
/usr/lib/ruby/site_ruby/1.8/puppet/application/agent.rb:53:in `handle_serve': uninitialized constant Puppet::Network::Handler (NameError)
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:347:in `send'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:347:in `parse_options'
from /usr/lib/ruby/1.8/optparse.rb:1247:in `call'
from /usr/lib/ruby/1.8/optparse.rb:1247:in `order!'
from /usr/lib/ruby/1.8/optparse.rb:1205:in `catch'
from /usr/lib/ruby/1.8/optparse.rb:1205:in `order!'
from /usr/lib/ruby/1.8/optparse.rb:1279:in `permute!'
from /usr/lib/ruby/1.8/optparse.rb:1300:in `parse!'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:353:in `parse_options'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:302:in `run'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:420:in `hook'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:302:in `run'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:411:in `exit_on_fail'
from /usr/lib/ruby/site_ruby/1.8/puppet/application.rb:302:in `run'
from /usr/sbin/puppetd:4
博主懷疑是ruby版本的問題使用ruby –v 顯示ruby目前的版本爲1.8.5所以去ruby官網下載最新版本程序安裝包並安裝
#wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p327.tar.gz
#tar –zxvf ruby-1.9.3-p327.tar.gz
#cd ruby-1.9.3-p327
#./configure
#make && make install
問題解決再次執行puppetd --test –server server.f.com
4)服務器端查看是否有請求證書的客戶端服務器
puppetca –list
client.f.com (D1:8F:72:CA:DE:4B:65:C1:3D:FB:14:90:EA:87:7F:48)
5)服務器端簽名授權
puppetca –s client.f.com //只簽名指定的客戶端
#puppetca –s –a //對所有客戶端全部簽名
6)查看驗證簽名,注意前面的+號,說明已經簽名
[root@server ~]# puppetca -a --list
+ "client.f.com" (D1:8F:72:CA:DE:4B:65:C1:3D:FB:14:90:EA:87:7F:48)
+ "server.f.com" (B5:C6:D9:85:75:15:B9:9E:D6:60:13:D4:1D:C6:A7:65) (alt names: "DNS:puppet", "DNS:puppet.f.com", "DNS:server.f.com")
備註:也可以在puppetmaster端的puppet.conf加入這行:
autosign = true
服務端就自動簽證書
7)驗證證書是否正確
服務端:
md5sum /var/lib/puppet/ssl/ca/signed/client.f.com.pem
a87b73fddfce937dbfa7285b9819a8a7 /var/lib/puppet/ssl/ca/signed/client.f.com.pem
客戶端:
md5sum /var/lib/puppet/ssl/certs/client.f.com.pem
a87b73fddfce937dbfa7285b9819a8a7 /var/lib/puppet/ssl/certs/client.f.com.pem
自此說明我們的puppetmaster和客戶端的puppet已經建立通信啦。
8)出現修改主機名問題引起無法認證,需要重新申請證書,操作以下兩個步驟:
服務端:
m -rf /var/lib/puppet/ssl/ca/signed/client1.fcom.pem
客戶端:
rm -rf /var/lib/puppet/ssl/
五、 puppet統一配置管理功能測試
9)在服務端創建site模版文件
vim /etc/puppet/manifests/site.pp
node default {
file {"/tmp/fengzhanhai.txt":
content=>"good morning!\n";}
上面的代碼對默認連入的puppet客戶端執行一個操作,在/tmp目錄生成一個txt文件,內容是good morning! 並自動回車換行
10)初次創建pp文件,需要重啓puppetmaster
[root@server ~]# service puppetmaster restart
停止 puppetmaster: [確定]
啓動 puppetmaster: [確定]
11)客戶端請求新配置:
[root@client1 puppet-2.7.14]# puppetd --test --server server.f.com
可以去/tmp目錄下驗證是否創建了 /tmp/fengzhanhai.txt文件.
六、 個人建議
博主建議使用cron或者手動運行puppet比較符合公司業務需求,因爲puppet是一個配置管理工具,在當我們修改了配置時去啓用該服務是比較合理的通用做法。
文章源:http://blog.chinaunix.net/uid-7411781-id-3442504.html