1、服务器端:
因为配置nagios要使用storconfig,需要安装ruby 1.8.7以上版本,因为rhel5自带为1.8.5,所以需要源码安装。
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz
- tar -xczf ruby-1.8.7-p352.tar.gz
-
./configure --prefix=/usr/local/ruby
-
make
-
make install
-
ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby (必须)
注意:如果之前yum安装了ruby:
- yum erase ruby*
-
mv /usr/lib/ruby /tmp
(如果已经安装了puppet,再安装一次即可,记得安装之前要备份)
关于`require': no such file to load -- puppet/application/master
原因:卸载了yum的ruby
因为puppet会将很多的文件拷贝到ruby安装目录下的lib文件夹,所以卸载了ruby,puppet安装的文件也被删除了,再次安装puppet即可
可以看到在安装puppet所作的操作:
- chmod 0644 /usr/local/ruby/lib/ruby/site_ruby/1.8/puppet/rails/inventory_node.rb
-
lib/puppet/rails/host.rb -> /usr/local/ruby/lib/ruby/site_ruby/1.8/puppet/rails/host.rb
2、客户端:
yum 安装即可
- yum install ruby ruby-devel ruby-ri
二、安装puppet
1、可以使用epel库里带的rpm版本(不推荐)。
- yum install puppet-server
2、使用源码安装
先安装facter
factor:The only prerequisite for Puppet that doesn’t come as part of the Ruby standard library is facter, which is also developed by Puppet Labs.
- wget http://downloads.puppetlabs.com/facter/facter-1.6.0.tar.gz
-
tar -xvzf facter-1.6.0.tar.gz
-
cd facter-1.6.0
-
ruby install.rb
安装puppet
- wget http://downloads.puppetlabs.com/puppet/puppet-2.7.3.tar.gz
-
tar -xvzf puppet-2.7.3.tar.gz
-
cd puppet-2.7.3
-
ruby install.rb
服务器端:
-
useradd puppet
- cd puppet-2.7.3
-
cp conf/redhat/* /etc/puppet/
-
rm /etc/puppet/client.*
-
mv /etc/puppet/server.init /etc/init.d/puppetmasterd
- mv /etc/puppet/server.sysconfig /etc/sysconfig/puppetmaster
-
chmod 755 /etc/init.d/puppetmasterd
-
service puppetmasterd restart
打开相应的iptables端口8140
客户端:
- useradd puppet
- cd puppet-2.7.3
- rm /etc/puppet/server.*
- mv conf/redhat/puppet.conf /etc/puppet/
- mv conf/redhat/client.init /etc/init.d/puppet
-
chmod 755 /etc/init.d/puppet
客户端指定运行时的参数:
vi /etc/puppet/puppet.conf
-
添加相应配置
-
[main]
-
server=master.puppet.com
- runinterval=600 (每10分钟运行一次)
这里我们仅需要写这两个参数,确保client可以正确连接到server。以后我们会将这个配置文件由puppet来统一管理,只需要在master上修改,即可同步到所有的client上,而且修改后自动重启client的puppet服务,以使修改生效。
参考:关于可选的参数
启动:
服务器端:
- service puppetmasterd start
客户端:
客户端的运行报告在服务器端:/var/lib/puppet/reports/
每次运行会生产一个报告,报告文件名为:/var/lib/puppet/reports/hy18.uniqlick.com/201108020948.yaml
一个以运行时的utc时间为文件名的文件,即当前时间-8小时
这个报告很难看懂,后面将部署puppet dashboard,以图形的方式显示这些报告,方便查看。
三、关于DNS及hosts
对于基本的使用,仅仅需要为服务器端配置一个dns,使客户端可以解析服务器端的ip就可以了。
如果需要通过服务器端推送,需要使用puppet kick命令。这就需要服务器端能够解析所有的客户端。将客户端加到hosts文件里即可。
客户端连接服务器时使用的是自己的fqdn,执行facter,检查输出中的fqdn是否是你期望的,如果不是,修改hostname。编辑/etc/sysconfig/network并执行hostname 主机名,立即生效。
四、审批证书
1、客户端申请证书
首先检查是否可以连接到服务器端的8140端口。
- telnet master.puppet.com 8140
端口通畅,ok,执行下面的命令:
- puppetd --server master.puppet.com --test --waitforcert 60
执行后,不要关闭终端。
2、服务器端审批证书
查看待审证书
批准证书
- puppetca -s client1.puppet.com
注意:生成证书时,主机名会写入证书,所以证书生成后,如果更改主机名,证书就失效了。
解决办法:其实申请证书的过程就是服务器端生成证书,并发送到客户端的过程。
删除掉服务器端的客户机证书 rm -f /var/lib/puppet/ssl/ca/signed/主机名.pem
或者:puppetca --clean xx.xx.xxx
客户端删除掉ssl目录/var/lib/puppet/ssl
重新申请证书即可。
五、测试
1、服务器端:
vi /etc/puppet/manifests/site.pp
该文件定义puppet相关的变量和默认配置,是puppet执行的第一个文件
- node default {
-
file{"/tmp/temp1.txt":content =>"test puppet,ok";}
-
}
default,默认节点,除了指定的节点,剩余的节点都会执行。
例如:
- node default {
-
file{"/tmp/temp1.txt":content =>"test puppet,ok";}
-
}
-
node client1.puppet.com {
-
file{"/tmp/2.txt":content =>"test2,ok";}
-
}
这样的配置文件,client1.puppet.com不会执行default里面的内容。
即:一个client只能存在于一个node中。
可以通过在node default中使用if 判断来选择生效的node
- $hostgroup = [ '1.1.1.1','2.1.1.1',]
-
-
node default {
-
-
if ( $ipaddress in $hostgroup){
- include cacti::iostat
-
}
2、客户端:
- puppetd --server master.puppet.com --test
正确的话,你将会看到创建的文件。
六、服务器端控制客户端立即执行
使用puppet kick
1、服务器端需要能解析client的IP
解决:将客户端的IP和fqdn写到服务器端的hosts里即可。或者使用内网的DNS。
2、服务器端:
保证/etc/puppet/namespaceauth.conf存在,文件可以为空。
这其实是一个bug,可以通过puppet kick -h看到
Additionally, due to a known bug, you must make sure a
namespaceauth.conf file exists in puppet agent's $confdir. This file
will not be consulted, and may be left empty.
3、客户端
puppet.conf中添加下面的配置
将监听8139端口,确保iptables打开相应的端口。
否则:Host client1.puppet.com failed: Connection refused - connect(2)
在path /之前加上 path /run,如下
- path /run
- method save
- allow master.puppet.com
- # this one is not stricly necessary, but it has the merit
- # to show the default policy which is deny everything else
- path /
- auth any
否则:Error 403 on SERVER: Forbidden request
测试:
puppet kick -d --host client1.puppet.com
Triggering client1.puppet.com
Getting status
status is success
client1.puppet.com finished with exit code 0
Finished