一、安装puppet准备
//安装准备 ,两台机器都要操作 1. 两台机器 172.7.15.106 (server) 172.7.15.111 (client) 2. 关闭防火墙 setenforce 0 iptables -F 3. 设置hostname server : hostname(web9.lulu.com) --> vi /etc/sysconfig/network 将hostname定义进去 client : hostname (web10.lulu.com) --> vi /etc/sysconfig/network 将hostname定义进去 4. 编辑hosts文件 vi /etc/hosts //ADD 172.7.15.106 web9.lulu.com 172.7.15.111 web10.lulu.com 5. 两台机器都安装ntpdate yum install -y ntp 6. 建立自动同步时间的任务计划 crontab -e //ADD */10 * * * * ntpdate time.windows.com >/dev/null 2>&1
二 、安装puppet
//server (106) 操作 [root@web9 ~]# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm [root@web9 ~]# ls /etc/yum.repos.d/ //查看上一步是否安装成功 puppetlabs.repo [root@web9 ~]# yum install -y puppet-server [root@web9 ~]# service puppetmaster start [root@web9 ~]# chkconfig puppetmaster on //client (111)操作 [root@web10 ~]# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm [root@web10 ~]# yum install -y puppet [root@web10 ~]# vi /etc/puppet/puppet.conf //末尾增加 listen = true server = web9.lulu.com runinterval = 30 //主动更新,每隔30s [root@web10 ~]# service puppet start [root@web10 ~]# chkconfig puppet on
三、 配置认证
//server 端查看客户端证书列表 [root@web9 ~]# puppet cert list --all //如果签发的证书,会在行首代一个+ //client 端生成ssl证书 [root@web10 ~]# puppet agent --test --server web9.lulu.com //server 端签发指定客户端证书 [root@web9 ~]# puppet cert --sign web10.lulu.com //server 端可以删除指定客户端证书 [root@web9 ~]# puppet cert clean web10.lulu.com //删除所有证书 [root@web9 ~]# puppet cert clean --all
此处遇到的错误:
Exiting; no certificate found and waitforcert is disabled --> [root@web10 ~]# /etc/init.d/puppet stop [root@web10 ~]# rm -rf /var/lib/puppet/ssl/* [root@web10 ~]# /etc/init.d/puppet start
四、 配置自动签发证书
//server [root@web9 ~]# puppet cert clean web10.lulu.com //服务端删除客户端证书 //client [root@web10 ~]# rm -rf /var/lib/puppet/ssl/* //删除客户端ssl相关文件 */ //server [root@web9 ~]# vim /etc/puppet/autosign.conf //创建自动签发的配置文件 //ADD *.lulu.com [root@web9 ~]# /etc/init.d/puppetmaster restart //client [root@web10 ~]# /etc/init.d/puppet restart //server [root@web9 ~]# puppet cert list --all IF 客户端不重启puppet服务,也可以通过命令来自动签发 [root@web10 ~]# puppet agent --test --server web9.lulu.com
五、测试证书
//server [root@web9 ~]# vi /etc/puppet/manifests/site.pp /*配置了此文件,客户端才会同步数据*/ //ADD node default { file { "/tmp/123.txt" content => "test,test"; }} //client 1. 稍等一会儿 ---执行 {因为设置了每隔30s执行任务} 2. [root@web10 ~]# puppet agent --test --server web9.lulu.com [root@web10 ~]# ls /tmp/ 123.txt [root@web10 ~]# cat /tmp/123.txt test,test
六、定义模块
//server /*创建一个名为testm的模块*/ [root@web9 ~]# mkdir /etc/puppet/modules/testm /*在模块下创建子目录*/ [root@web9 ~]# cd /etc/puppet/modules/testm [root@web9 testm]# mkdir {files,mainfests,templates} [root@web9 testm]# ls files mainfests templates /* files 存放目录 maindests 存放主配置文件 templates 存放模版文件 --> 模版文件会定义一些配置 */ [root@web9 testm]# cd files/ [root@web9 files]# vim lulu.txt //与下面的init.pp的source对应 //ADD ksajdksdj kjasdkjs aksdjksd [root@web9 files]# cd .. [root@web9 testm]# cd mainfests [root@web9 mainfests]# vim init.pp //ADD class testm{ file { "/tmp/2.txt" : owner => "root", group => "root". mode => 0400, source => "puppet://$puppetserver/modules/testm/lulu.txt" }}
//server [root@web9 ~]# vi /etc/puppet.manifests/site.pp //ADD $puppetserver='web9.lulu.com' node 'web10.lulu.com'{ incluede testm } //client [root@web10 ~]# puppet agent --test --server web9.lulu.com
七、文件或目录资源
//刚刚的模块只是同步了一个文件,现在需要同步一个目录 /*例如,现在一台机器已经编译安装好了Apache, 现在通过一个模块同步Apache目录到其他机器上*/ [root@web9 testm]# cd manifests/ [root@web9 manifests]# vi init.pp //ADD ,此文件可定义多个file,多个class class apache { file { "/usr/local/apache2": owner => "root", group => "root", source => "puppet://$puppetserver/modules/apache/apache2", recurse => true, purge => true }} /* recurse 递归 -- 没有这个不能同步目录 purge 可保证当服务端删除某个文件,客户端跟着删除 */ [root@web9 manifests]# vi /etc/puppet/manifests/site.pp //ADD ... ... include apache //将刚刚添加的apache这个类添加进去 ...
//client
[root@web10 ~]# ls /usr/local/apache2
/usr/local/apache2 //已存在,成功
八、远程执行命令
//server [root@web9 puppet]# vi modules/testm/manifests/init.pp //ADD ... ... exec { "123": unless => "test -f /tmp/linux.txt", path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"], command => "touch /tmp/linux.txt" } //client [root@web10 ~]# ls -lt /tmp/ -rw-r--r--. 1 root root 0 12月 20 16:03 linux.txt
九、配置任务计划cron
[root@web9 puppet]# vim modules/testm/manifests/init.pp //ADD ... ... cron {"lulu1": command => "/sbin/ntpdate time.windows.com", user => "root", minute => "*/10", #ensure => "absent" } /* ensure 设置为 absent -- 删除该任务 不设置 改行则建立 */ /* 关于时间,不设置则保持默认。 包括: minute , hour , monthday , month ,weekday */