环境介绍:
系统:Centos6.2_x86_64 基于最小化安装
puppet版本:puppet-server-3.0.2
服务器端: monitor.yooke.com 192.168.56.101
客户端: node1.yooke.com 192.168.56.102
node2.yooke.com 192.168.56.103
安装前的环境配置:
1、服务器端和客户端主机名必须为FQDN格式域名,并添加hosts解析
2、服务器端和客户端的时间同步
3、uname -r 命令执行结果与主机名相同
4、为避免不必要的麻烦,关闭selinux和iptables,或设置好相关规则
一、服务器端安装
1、安装官方yum源包后就可以通过yum自动解决依赖关系
rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
2、通过yum安装puppet-server
yum -y install puppet-server
3、启动服务并设置开机启动
service puppetmaster start
chkconfig puppetmaster on
二、客户端的安装配置
1、安装官方yum源包后就可以通过yum自动解决依赖关系
rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-6.noarch.rpm
2、通过yum安装puppet
yum -y install puppet
3、修改puppet配置文件
vi /etc/puppet/puppet.conf ==> 在[agent]段内添加
server = monitor.yooke.com
4、启动服务并设置开机启动
service puppet start
chkconfig puppet on
三、证书申请与配置自动签署
1、如果按照上面客户端的安装步骤来安装的话,在客户端启动puppet服务时,会自动向服务端发送证书申请,可在服务端通过如下命令查看:
[root@monitor ~]# puppet cert list --all
XXXXXXXXX1XXXXXXXXXXXXXXX
可以看到有两个证书申请,一个是monitor.yooke.com即服务端自己的,另一个是node1.yooke.com即客户端的,服务端的证书前边有个“+”说明该证书已经签署给该主机,服务端会在第一次启动服务时生成一个自签证书。
如果没有查看到客户端的证书申请,可在客户端手动执行:puppet agent --server monitor.yooke.com 提交证书申请。
2、给客户端签署证书
在服务端执行如下命令:
[root@monitor ~]# puppet cert --sign node1.yooke.com
XXXXXXXXXXXXXX2XXXXXXXXXXXXXXXXX
也可以通过:puppet cert --sign --all 来签署所有的未签署的证书申请
再次执行查看证书命令;
[root@monitor ~]# puppet cert list --all
XXXXXXXXXXXXXXX3XXXXXXXXXXXXXXXXXXXXXX
可以看到node1.yooke.com的证书已经成功签署
3、配置自动签署证书
自动签署证书只需要在/etc/puppet目录下创建autosign.conf文件即可
[root@monitor ~]# vi /etc/puppet/autosign.conf ==> 添加如下
*.yooke.com
这样就可以自动签署来自于yooke.com域的证书申请
4、删除已签署的证书
可能在现实环境中由于种种原因,原来的证书无法使用时,需要删除证书从新申请,可通过以下步骤删除
A> 在服务端执行:puppet cert --clean node1.yooke.com
B> 在服务端执行:service puppetmaster restart
C> 在客户端执行:rm -rf /var/lib/puppet/ssl
四、测试客户端
1、现在可以测试下客户端与服务端的通信了
[root@node1 ~]# puppet agent --test
XXXXXXXXXXXXXX4XXXXXXXXXXXXXXXXXXXXXXXX
可以看到成功通过测试,现在还没有执行具体的内容。
2、测试下和服务端同步文件
A>在服务端创建资源定义文件:
[root@monitor ~]# vi /etc/puppet/manifests/site.pp ==> 内容如下
XXXXXXXXXXXXXXXX5XXXXXXXXXXXXXXXXXXXXXX
B>创建相关目录和文件:
[root@monitor ~]# mkdir -p /etc/puppet/modules/test/files
[root@monitor ~]# cp /etc/fstab /etc/puppet/modules/test/files
C>在客户端执行同步:
[root@node1 ~]# puppet agent --test
XXXXXXXXXXXXXXXXXXXXX6XXXXXXXXXXXXXXXXXXXXXX
D>验证结果:
[root@node1 ~]# ll /tmp/
XXXXXXXXXXXXXXXXXXXXXX7XXXXXXXXXXXXXXXXXXXXXX
成功通过测试!
说明:资源文件的语法等其他内容会在后续的其他文章中解释,现在只做下基本的测试。
五、配置由服务端发起同步
1、在客户端修改配置文件/etc/puppet/puppet.conf使puppet能够监听端口
[root@node1 ~]# vi /etc/puppet/puppet.conf ==> 在[agent]段添加如下行
listen = true
2、编辑认证配置文件/etc/puppet/auth.conf
[root@node1 ~]# vi /etc/puppet/auth.conf ==> 在path / 之前添加如下
path /run
method save
allow monitor.yooke.com
添加在最后两行path / 之前。
3、在客户端重启puppet服务
[root@node1 ~]# service puppet restart
通过命令可以查看到监听了8139端口
[root@node1 ~]# netstat -tnlp
XXXXXXXXXXXXXXXX8XXXXXXXXXXXXXXXXXXXXXXXX
4、新增个资源文件测试
A>在服务端编译资源定义文件:
[root@monitor ~]# vi /etc/puppet/manifests/site.pp ==> 内容如下:
XXXXXXXXXXXXXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXX
B>在服务器端执行同步命令
[root@monitor ~]# puppet kick --host node1.yooke.com
XXXXXXXXXXXXXXXXXXXXXX10XXXXXXXXXXXXXXXXXXXXXX
最上边的两条警告可以暂时不用管他,其他的输出可以看到成功完成
C>在客户端验证
XXXXXXXXXXXXXXXXXXXXXXX11XXXXXXXXXXXXXXXXXXXXX
成功通过测试!
六、其他
1、puppet的3.0以后的版本与之前的版本命令差别很大,下边给出一个与之前版本命令的参照表:
+-----------------------------------+
| 旧命令 | 新命令 |
|puppetmasterd | puppet master |
|puppetd | puppet agent |
|puppet | puppet apply |
|puppetca | puppet cert |
|ralsh | puppet resource |
|puppetrun | puppet kick |
|puppetqd | puppet queue |
|filebucket | puppet filebucket |
|puppetdoc | puppet doc |
|pi | puppet describe |
+-----------------------------------+
这样看起来也比较清晰统一。
2、puppet的工作完全是基于主机名的, 所以在环境配置完成后不要随便更改主机名。
3、通信的报错大部分都是因为证书不匹配、时间同步或者主机名的问题,排错时一定要细心查看。
4、由于客户端可能要安装很多,所以我自己写了个客户端的安装脚本,服务端的主机名定义为一个变量,可根据自己情况进行修改,我这里安装客户端时使用了yum -y localinstall packages/*.rpm ,是提前把安装客户端时依赖的软件都放在与脚本同一目录的叫packages的目录中,这样即时客户端不能联网也可以顺利安装,脚本内容如下:
#!/bin/bash
# install the puppet client
SERVER=monitor.yooke.com
#HNAME=node2.yooke.com
read -p "Please input the hostname for FQDN format: " HNAME
echo -e "You are input the hostname is: \033[31m$HNAME\033[0m ,are you sure?"
read -p "Input [y|n]: " COS
[[ $COS != "y" ]] && echo "Exit install ..." && exit
# sync time
echo -e "\nStarting sync the time,please wait ...\n"
for I in {1..3};do
if /usr/sbin/ntpdate 210.72.145.44 &> /dev/null ;then
echo -e "\033[32mntpdate sync success!\033[0m"
break
elif [ $I -eq 3 ];then
echo "ntpdate sync failed!"
else
echo "sync time failed,try agin ...$I"
fi
let I++
done
# configure hostname
sed -i "s/HOSTNAME=.*/HOSTNAME=$HNAME/" /etc/sysconfig/network
# install packages
echo -e "\nStarting install puppet client,please wait ...\n"
mv /etc/yum.repos.d /etc/yum.repos.d.temp &> /dev/null
yum -y localinstall packages/*.rpm &> /dev/null &&
chkconfig puppet on
if [ $? -eq 0 ];then
echo -e "\033[32mpuppet client already install complete!\033[0m"
mv /etc/yum.repos.d.temp /etc/yum.repos.d &> /dev/null
else
echo -e "\033[31mpuppet install failed!\033[0m"
mv /etc/yum.repos.d.temp /etc/yum.repos.d &> /dev/null
exit
fi
# configure puppet client
cat >> /etc/puppet/puppet.conf << EOF
server = $SERVER
listen = true
EOF
cat >> /tmp/temp_puppet.txt << EOF
path /run
method save
allow $SERVER
EOF
sed -i '/^# of/r/tmp/temp_puppet.txt' /etc/puppet/auth.conf
rm -f /tmp/temp_puppet.txt
# end
cat << EOF
+---------------------------------------+
| Script run end,if no error |
| Please reboot system ... |
+---------------------------------------+
EOF
执行脚本注意:1、安装客户端需要的软件包放在与脚本相同目录的packages目录中。
2、脚本没有修改hosts文件,因此应根据实际情况添加hosts文件解析。
添加自定义的挂载点:
编辑fileserver.conf文件添加:
[san]
path /mnt/san/data
使用方法:
source => "puppet:///san/XXX" 实际路径:/mnt/san/data/XXX"
还可以添加allow、deny参数来拒绝或允许某些客户端从这里获取数据。
使用httpd+passenger处理客户端请求
创建httpd的配置文件:
cp /usr/share/puppet/ext/rack/files/apache2.conf /etc/httpd/conf.d/rack.conf
编辑该文件修改如下内容:
SSLCertificateFile /var/lib/puppet/ssl/certs/puppet.server.cihi.cn.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet.server.cihi.cn.pem
SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
二猛原创