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是一个配置管理工具,在当我们修改了配置时去启用该服务是比较合理的通用做法。