Puppet安装配置 这里选择两台机器实验 1环境 A:关闭selinux,清空iptables 设置hostname [iyunv@web9 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.130 web9.com 192.168.0.131 web10.com [iyunv@web9 ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=web9.com [iyunv@web10 ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=web10.com B:安装ntpdate,并建立自动同步时间的任务计划 yum -y install ntp [iyunv@web9 ~]# crontab -l */10 * * * * ntpdate time.windows.com > /dev/null 2>&1 2安装 A:服务器端: [iyunv@web9 opt]# ls facter-1.7.2-1.el6.x86_64.rpm rh puppet-2.7.26-1.el6.noarch.rpm ruby-augeas-0.4.1-3.el6.x86_64.rpm puppet-server-2.7.26-1.el6.noarch.rpm ruby-shadow-2.2.0-2.el6.x86_64.rpm [iyunv@web9 opt]# yum -y local install *.rpm B:agent端 [iyunv@web10 ~]# ls puppet-2.7.26-1.el6.noarch.rpm ruby-augeas-0.4.1-3.el6.x86_64.rpm facter-1.7.2-1.el6.x86_64.rpm ruby-shadow-2.2.0-2.el6.x86_64.rpm [iyunv@web10 ~]# yum -y local install *.rpm C:可选的网络yum D:服务端启动 service puppetmaster start Chkconfig puppetmaster on Ps aux | grep puppet E:agent客户端 [iyunv@web10 ~]# cat /etc/puppet/puppet.conf listen = true server = web9.com runinterval = 10 //主动更新,每隔10s Service puppet start Chkconfig puppet on 3配置认证 Puppet cert list --all //如果签发证书,会本行前面一个+ [iyunv@web9 opt]# puppet agent --test --server web9.com //生成服务器的客户端 Puppet cert sign web9.com //签名 注意:这个web9.com与list 列出的名字相同 Puppet cert clean web10.com //删除指定证书 Puppet cert clean --all //删除所有证书 删除所有证书后 客户端需要做的是 rm -rf /var/lib/puppet/ssl/* /etc/init.d/puppet restart 这样服务器在使用 命令 puppet cert list --all 时才会显示web10的认证信息 4配置自动认证 服务端删除客户端证书 puppet cert clean web10.com 客户端删除ssl相关文件 rm -rf /var/lib/puppet/ssl/* [iyunv@web9 puppet]# cat /etc/puppet/puppet.conf [main] autosign = true 服务端创建自动签发的配置文件 vim /etc/puppet/autosign.con //加入以下内容 *.com 服务端重启puppetmaster服务 /etc/init.d/puppetmaster restart 客户端重启puppet服务 /etc/init.d/puppet restart 服务端 Puppet cert list --all //可以看到web10.com已经签名 如果客户端不重启puppet服务,也可以通过命令来自动签发 Puppet agent --test --server web9.com 5测试证书 服务器端编辑配置文件 Vim /etc/puppet/manifests/site.pp //添加如下内容 node default { file {“/tmp/123.txt”: content => “test,test”; } } 说明:如果不配置该文件,则客户端不会同步任何数据 客户端上稍等一会(每隔10s会自动执行服务端上的任务),或者 直接命令行:puppet agent --test --server web9.com 这样在客户端的/tmp/下会有个123.txt文件,内容为test,test 可以查看日志来获知有没有创建成功 服务器:cat /etc/puppet/manifests/site.pp 客户端:less /var/log/messages 或者用抓包方法:tcpdump -nn host 192.168.0.130 6 配置模块 模块是puppet的配置单元,模块里面会包含类和资源。同步文件、远程执行命令、cron等 叫做资源,都是通过模块来实现的。 服务器端创建目录 mkdir /etc/puppet/modules/testm这个目录的名字也作为模块名字,然后继续创建模块对应的子目录mkdir /etc/puppet/modules/{files,manifests,templates}files里面的 文件,可以留空,manifests里面的文件是配置文件,templates里面是模块文件,可以为空 创建配置文件 vim /etc/puppet/modules/testm/manifests/init.pp //内容为 class testm{ file {“/tmp/2.txt”: owner => “root”, group => “root”, mode => 0400, source => “puppet://$puppetserver/modules/testm/1.txt” } } 说明:类名字叫做testm,类下面定义了一个资源file,名字叫做/tmp/2.txt,owner,group,mode定义文件的属主、数组以及权限,source定义这个文件从哪里获取。$puppetserver一会 也要定义一下,这里指的是puppet server服务器上/etc/puppet/modules/testm/files/1.txt 定义主配置文件 vim /etc/puppet/manifests/site.pp //内容如下 $puppetserver=’web9.com’ node ‘web10.com’{ //此处的web10.com还是根据list而来的 include testm } 说明:$puppetserver定义服务端的主机名,node后面为客户端主机名 这里定义该客户端要加载的模块 配置完成后,在客户端执行命令: puppet agent --test --server=web9.com //如果客户端上启动了puppet服务, 不用执行这命令,他也会自动同步的 7文件或目录资源 上面的模块其实只是同步了一个文件而已,那么想要同步一个目录如何做?我们可以 通过实现同步一个目录来做一个包发布系统。比如在一台机器上编译安装好了apache 那么就可以通过这样的模块把这个Apache目录整个分发到其他机器上。 模块配置文件如下: vim /etc/puppet/modules/testm/manifests/init.pp class apache{ file {“/usr/local/apache2”: owner => “root”, group => “root”, source => “puppet://$puppetserver/modules/apache/apache2”, recurse => true, //表示递归,没有这个不能同步目录 purge => true //表示清除,保证了服务器删除某个文件,客户端亦如此。 } vim /etc/puppet/manifests/site.pp $puppetserver='web9.com' node 'web10.com' { include testm include apache //加入主配置文件 } //tail -f /var/log/messages 查看动态的日志 8远程执行命令 vim /etc/puppet/modules/testm/manifests/init.pp exec {“123”: //资源的一个名字 unless => “test -f /tmp/test.txt”, //与onlyif相反 path => [“/bin”,”/usr/bin”,”/usr/sbin”], //系统环境变量,命令在哪里找 command => “touch /tmp/test.txt” } 9 计划任务 vim /etc/puppet/modules/testm/manifests/init.pp cron {“testcrontab”: command => “/sbin/ntpdate time.windows.com”, user => “root”, minute => “*/10”, //minute,hour,monthday,month,weekday monthday => “10-15”, #ensure => “absent” //设置为absent(缺席的)为删除该任务,不设置则为建立 }
|