前言:Puppet是Puppet Labs基于ruby语言开发的自动化系统配置工具,可以以C/S模式或独立模式运行,支持对所有UNIX及类UNIX系统的批量配置和管理,最新版本也开始支持对Windows操作系统有限的一些管理。
Puppet适用于服务器管理的整个过程,比如初始安装、配置、更新以及系统下线。

puppet原理:

 
   
  1. Puppet的工作细节分成如下几个步骤:  
  2.  
  3. 1、客户端puppetd调用facter,facter会探测出这台主机的一些变量如主机名、内存大小、IP地址等。然后puppetd把这些信息发送到服务器端。  
  4.  
  5. 2、服务器端的puppetmaster检测到客户端的主机名,然后会到manifest里面对应的node配置,然后对这段内容进行解析,facter送过来的信息可以作为变量进行处理的,node牵涉到的代码才解析,其它的代码不解析,解析分几个过程:语法检查、然后会生成一个中间的伪代码,然后再把伪代码发给客户机。  
  6.  
  7. 3、客户端接收到伪代码之后就会执行,客户端再把执行结果发送给服务器。  
  8.  
  9. 4、服务器再把客户端的执行结果写入日志。  
  10.  

系统配置:centos6.0 x64
服务端ip 192.9.117.140  hostname:192-9-117-140-APP.com
客户端ip 192.9.117.141  hostname:192-9-117-141-APP.com
一、 服务器端安装

 
   
  1. 安装 puppet-Server  
  2. 首先在服务器端和客户端配置好hostname,因为puppet是基于hostname来检测的,同时都要修改hosts文件:  
  3.  
  4. 修改主机名的命令:  
  5.  
  6. hostname `ifconfig eth0 |grep Bcast|awk '{print $2}'|cut -d:  -f  2 |sed 's/\./\-/g'`-APP.com  
  7.  
  8. 如果有DNS可以不用,这里我添加:  
  9. 192.9.117.140 192-9-117-140-APP.com  
  10. 192.9.117.141 192-9-117-141-APP.com  
  11.  
  12. 可以用命令添加:  
  13.  
  14. grep APP.com /etc/hosts;[ $? -ne 0 ]&&echo -e "192.9.117.140 192-9-117-140-APP.com\n192.9.117.141 192-9-117-141-APP.com ">>/etc/hosts  
  15.  
  16. Puppet 需要 Ruby 的支持,如果要查看命令行帮助的话需要额外 ruby-rdoc 这个软件包:  
  17. rpm –Uvh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm  
  18. yum install puppet-server -y 【这一步为默认安装ruby ruby-libs ruby-rdoc等软件包】  
  19. /etc/init.d/puppetmaster start  
  20. 关闭 iptables,关闭selinux  
  21. /etc/init.d/iptables stop  
  22. sed -i ‘/SELINUX/S/enforce/disabled/’ /etc/selinux/config

二、 客户端安装

 
   
  1. 安装puppet  
  2. 在 client 上安装 puppet 客户端:  
  3. Puppet 需要 Ruby 的支持,如果要查看命令行帮助的话需要额外 ruby-rdoc 这个软件包:  
  4. rpm –Uvh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm  
  5. yum install puppet -y  
  6. 安装完毕! 

三、 证书申请

 
   
  1. Puppet客户端与服务器端是通过SSL隧道通信的,客户端安装完成后,需要向服务器端申请证书:  
  2. 1. 首次连接服务器端会发起证书申请,在客户端执行命令如下:  
  3. puppet agent --server 192-9-117-140-APP.com –test  
  4. 2. 在服务器端可以用puppet cert –list命令查看到申请证书的客户端主机名。  
  5. 3. puppet cert  -s命令可以为特定的主机颁发证书,puppet cert –s and –a 表示给所有的主机颁发证书  
  6. 例如puppet cert –s 192-9-117-141-APP.com 为客户端颁发证书。  
  7. 四、 验证puppet配置  
  8. 在服务端写个例子测试一下。这个例子作用很简单,用来在客户端的/tmp目录下新建一个 test.txt 文件,内容为:hello,test!在服务端编写代码:【服务器端不需要新建这个文件】  
  9. vi /etc/puppet/manifests/site.pp  
  10. node default {  
  11. file {  
  12. "/tmp/test.txt": content => "helo,test!";  
  13.   }  
  14. }

五、客户端测试

 
   
  1. 在客户端执行 puppet,运行成功后会在 /tmp 看到新生成的 test.txt:  
  2. puppet agent --server=192-9-117-140-APP.com  --test  
  3.  
  4. 显示如下:  
  5. info: Caching catalog for 192-9-117-141-APP.com  
  6. info: Applying configuration version '1336720578'  
  7. notice: /Stage[main]//Node[default]/File[/tmp/test.txt]/ensure: defined content as '{md5}3cb95cfbe1035bce8c448fcaf80fe7d9'  
  8. notice: Finished catalog run in 0.03 seconds  
  9. 最后查看cat /tmp/test.txt  
  10. hello,test!  
  11. 此致puppet服务器端和客户端安装完毕,接下来就是深入的配置了。