Version:1.0
Author: ipcpu
Date: 2011-6-1
Puppet是一款开源的工具,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等,实现自动化部署。
工作原理
Puppet使用C/S方式工作,开发语言ruby,中心服务器称为puppet master,用做管理安装配置功能,安装在各个节点的客户端软件称为puppetd,用于接收服务器编译过后配置文件,将配置应用于节点。
puppet的传输使用XML_RPC web service,使用https协议,监听端口8140。
默认情况下,客户端每半小时向服务端问询一次,确定服务端的配置是否更新或者改变,如果改变,服务器将重新编译配置文件,并将更新的配置应用于客户端。如果需要,配置更新也可由服务端发出,强制客户端更新。客户端与服务器端采用证书方式对通讯进行加密。
编译安装
1. 安装ruby
Puppet使用ruby开发,所以先装好ruby。RDoc是用来使用puppet的帮助文件。
#yum install ruby rdoc
2. 安装facter
它的作用是收集主机的一些资料,比如CPU,主机IP等,facter把收集到值发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件。
# tar zxvf facter-latest.tgz
# cd facter-1.5.8
# /usr/local/bin/ruby install.rb
2. 下载安装puppet主程序
# wget http://puppetlabs.com/downloads/puppet/puppet-latest.tar.gz
# tar zxvf puppet-2.6.3.tar.gz
# cd puppet-2.6.3
# /usr/local/bin/ruby install.rb
假如我们的构架如下图所示:
接下来我们分成两部分,一部分是服务端的设定,一部分是客户端的设定。
4. 服务端的设定
a) 修改/etc/hosts文件
加入
116.61.61.2 s07.ipcpu.com
不加可不可以?可以。只要这个域名DNS解析到客户端即可。
b) 拷贝源文件
#mkdir /etc/puppet
#cp conf/auth.conf /etc/puppet/
#cp conf/redhat/fileserver.conf /etc/puppet/
#cp conf/redhat/puppet.conf /etc/puppet/
#cp conf/redhat/server.init /etc/init.d/puppetmaster
#chmod +x /etc/init.d/puppetmaster
#chkconfig --add puppetmaster
#chkconfig puppetmaster on
#mkdir -p /etc/puppet/manifests
c) 创建puppet帐号
# puppetmasterd –mkusers(执行中可能会出一些错误,基本上以前安装或创建过puppet用户的原因,执行就是让它自动去 /var/lib/puppet下创建一些目录)
#cat /etc/passwd #确认系统生成puppet用户
保证/var/lib/puppet/rrd目录存在且属主是puppet,如果没有则这行以下语句
#mkdir /var/lib/puppet/rrd && chown puppet.puppet /var/lib/puppet/rrd
d) 启动服务
加入site.pp
#cd /etc/puppet/manifests
#vim site.pp //启动时必须要有
file { "/tmp/testfile":
ensure => present,
owner => "root",
group => "root",
mode => 644,
}
第一次启动时puppet会自动创建所需的文件,包括一系列证书文件等
#service puppetmaster start
服务端会占用8140端口。
5. 客户端的设定
a) 修改/etc/hosts文件
加入
116.61.61.1 server.ipcpu.com
b) 复制配置文件
#mkdir /etc/puppet
#cp conf/auth.conf /etc/puppet/
#cp conf/namespaceauth.conf /etc/puppet/
#cp conf/redhat/puppet.conf /etc/puppet/
#cp conf/redhat/client.init /etc/init.d/puppet
#chmod +x /etc/init.d/puppet
#chkconfig --add puppet
#chkconfig puppet on
c) 创建puppet帐号
# puppetd –mkusers
如果报错也可以使用puppetmasterd –mkusers来生成用户,但会出现常见错误1,后面有解决办法
确认存在puppet账户和下面目录权限
#mkdir –r /var/lib/puppet/rrd &&chown puppet.puppet /var/lib/puppet/rrd
d) 编辑配置文件
#vim /etc/puppet/puppet.conf
加入:
server=server.ipcpu.com
listen = true
#vim /etc/puppet/namespaceauth.conf
[fileserver]
allow *
[puppetmaster]
allow *
[puppetrunner]
allow *
[puppetbucket]
allow *
[puppetreports]
allow *
[resource]
allow *
e) 启动客户端服务
#service puppet start
客户端会占用8139端口。
6. 对客户端进行证书签名
客户端的证书必须经过服务端的签名,这也是为了安全性考虑。
在服务端列出客户端:
#puppetca –list
s07.ipcpu.com
#puppetca -s –a
对列出的所有证书签名
如果服务端列不出客户端名称,可以在客户端使用puppetd –server server.ipcpu.com –test主动请求。
7. 验证
如果出现/tmp/testfile,说明配置成功。
8. 参考资料:
http://hi.baidu.com/qq5910225/blog/item/c310d418a56a1fe9ae5133f6.html
http://hi.baidu.com/fiber212121/blog/item/de0a92024c0a831f4afb51cb.html
http://opkeep.com/system/linux/puppet-man.html
http://www.wenzizone.cn/?p=363
http://hi.baidu.com/fiber212121/blog/item/de0a92024c0a831f4afb51cb.html
9. 常见错误:
1. err: Could not retrieve catalog from remote server: certificate verify failed
结局方法:同步时间并且删除客户端/var/lib/puppet/ssl目录下的文件
YUM方式安装
1. 安装EPEL
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
2. 安装puppet
服务器端: yum install puppet-server
客户端: yum install puppet
3. 配置服务器端
#more /etc/hosts //host文件中写入所有client和master
192.168.8.10 AS-1
192.168.8.11 AS-2
#cd /etc/puppet/manifests
#vim site.pp //启动时必须要有
file { “/tmp/testfile”:
ensure => present,
owner => “root”,
group => “bin”,
mode => 644,
}
#service puppetmaster start //启动puppet服务端
4. 配置客户端
#vim /etc/puppet/puppet.conf
在[puppetd]段中加入:
server=AS-1
listen = true
#vim namespaceauth.conf
[fileserver]
allow *
[puppetmaster]
allow *
[puppetrunner]
allow *
[puppetbucket]
allow *
[puppetreports]
allow *
[resource]
allow *
#service puppet start
5. 签名证书
在服务端执行
#puppetca –list //在客户端服务启动后,我就在服务端看到了客户端的信息
as-2
#puppetca –sign as-2 将as-2加入签名证书
6. 测试:
在客户端执行:
#ls /tmp
如果出现 testfile,说明配置成功。