Puppet的基本安装部署,很不错的puttet入门级文章,供大家学习参考。
一、安装ruby
1、服务器端:
因为配置nagios要使用storconfig,需要安装ruby 1.8.7以上版本,因为rhel5自带为1.8.5,所以需要源码安装。
注意:如果之前yum安装了ruby:
(如果已经安装了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.
安装puppet
服务器端:
打开相应的iptables端口8140
客户端:
客户端指定运行时的参数:
vi /etc/puppet/puppet.conf
添加相应配置
[main]
server=master.puppet.com
runinterval=600 (每10分钟运行一次)
这里我们仅需要写这两个参数,确保client可以正确连接到server。以后我们会将这个配置文件由puppet来统一管理,只需要在master上修改,即可同步到所有的client上,而且修改后自动重启client的puppet服务,以使修改生效。
参考:关于可选的参数
http://docs.puppetlabs.com/references/stable/configuration.html#certname
查看当前值:
puppet --genconfig
启动:
服务器端:
service puppetmasterd start
客户端:
service puppet 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 --list
批准证书
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执行的第一个文件
default,默认节点,除了指定的节点,剩余的节点都会执行。
例如:
这样的配置文件,client1.puppet.com不会执行default里面的内容。
即:一个client只能存在于一个node中。
可以通过在node default中使用if 判断来选择生效的node
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中添加下面的配置
[agent]
listen = true
将监听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