环境 CentOS 6 x64
服务端:puppet.test.org
客户端:apache01.test.org
服务端和客户端统一使用官方源,即目前的puppet 2.7版本
- rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-5.noarch.rpm
客户端安装
- # yum install puppet
设置固定IP,主机名为apache01.test.org,并在host文件中解析
编辑/etc/sysconfig/puppet,去掉两行注释,内容如下
- PUPPET_SERVER=puppet.test.org
- PUPPET_PORT=8140
在/etc/puppet/puppet.conf 的【main】部分加上如下内容
- server = puppet.test.org
(鉴于不断爆发的人品,我加上了上面的内容来指定服务端。有些童鞋没加也能测试成功。)
服务端
设置固定IP,主机名为puppet.test.org,并在hosts文件中解析
安装服务端
- #yum install puppet-server
编辑/etc/puppet/puppet.conf,添加如下内容
- [master]
- autosign = true
- masterport = 8140
新建文件/etc/puppet/autosign.conf,内容如下
- *.test.org
autosign会有一些安全问题,在起初大规模部署时比较省力,部署后应该弃用。之后添加的个别的机器用puppet cert -s xxx来手动认证。
namespaceauth.conf文件,并根据情况修改,这里是“allow *.test.org”
- #cp /usr/share/doc/puppet-2.7.18/examples/etc/puppet/namespaceauth.conf /etc/puppet
建立一个简单的测试任务,创建文件/etc/puppet/manifests/site.pp,内容如下
- file { "/etc/sudoers":
- owner => root,
- group => root,
- mode => 400,
- }
启动服务
- chkconfig puppetmaster on
- /etc/init.d/puppetmaster start
关闭防火墙或者打开8140端口
测试结果
- [root@apache01 ~]# puppet agent --test
- info: Creating a new SSL key for apache01.test.org
- info: Caching certificate for ca
- info: Creating a new SSL certificate request for apache01.test.org
- info: Certificate Request fingerprint (md5): 48:6F:F0:37:91:87:44:17:D9:94:5F:38:06:E0:3B:28
- info: Caching certificate for apache01.test.org
- info: Caching certificate_revocation_list for ca
- info: Caching catalog for apache01.test.org
- info: Applying configuration version '1342493716'
- notice: /File[/etc/sudoers]/mode: mode changed '0440' to '0400'
- info: Creating state file /var/lib/puppet/state/state.yaml
- notice: Finished catalog run in 0.02 seconds
测试成功!
说明一下,保持时间一致是一个重要前提,建议使用ntp,最好是内网的ntp服务器。
puppet的文件服务
puppet经常需要做文件服务,目前只支持puppet自有的协议,即puppet://
使用方法,依然以sudoers为例
- file { "/etc/sudoers":
- owner => root,
- group => root,
- mode => 400,
- source => "puppet:///files/sudoers",
- }
客户端会定期检查sudoers的md5,如果发生变更,则用服务器上的文件覆盖本地文件。
puppet的文件服务很像rsync,都是用[方括号]表示一个类,然后export出去
fileserver.conf 默认全是注释,添加下面的内容
- [files]
- path /etc/puppet/files
- alllow 192.168.1.0/24
邮件报告(可选)
每次客户端执行完任务会报告给服务端,服务端可以将报告通过邮件发给指定的地址
在服务端配置puppet.conf
- [master]
- reports = store,tagmail
创建文件/etc/puppet/tagmail.conf,多个邮件地址用逗号分隔,内容如下
- all: admin@test.org,root@localhost
all指所有消息,也可以是其他标签,比如err,info等,不细讲。
注:该功能需要sendmail或postfix支持,实现方式简单有效,适合小规模场合,如果客户端很多会比较麻烦,后面文章会讲到puppet-dashboard 。
有时候由于更换主机名,我们需要重新配置认证:
(1)、首先在客户端删除 rm -rf /var/lib/puppet/ssl/文件夹
(2)、然后在服务器端删除客户端的证书:puppetca --clean apache01.test.org
(3)、然后再在客户端执行puppetd --test 即可!
puppet 支持客户端与服务端版本不一致,但是要注意两点
1、服务端版本大于等于客户端版本
2、版本差距不要太大,建议不要跨大版本号
3、不建议编译安装puppet,这会在后期维护时相当麻烦
注:
DNS解析由ipa-server包办,也就是内网DNS,见另一篇博文。否则请在/etc/hosts文件中单独解析。