Version:1.0

Author: ipcpu

Date:    2011-6-1

 

Puppet是一款开源的工具,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等,实现自动化部署。

工作原理

 

Puppet使用C/S方式工作,开发语言ruby,中心服务器称为puppet master,用做管理安装配置功能,安装在各个节点的客户端软件称为puppetd,用于接收服务器编译过后配置文件,将配置应用于节点。

Puppet的安装_Puppet

puppet的传输使用XML_RPC web service,使用https协议,监听端口8140。
默认情况下,客户端每半小时向服务端问询一次,确定服务端的配置是否更新或者改变,如果改变,服务器将重新编译配置文件,并将更新的配置应用于客户端。如果需要,配置更新也可由服务端发出,强制客户端更新。客户端与服务器端采用证书方式对通讯进行加密。

 

编译安装

1. 安装ruby

 

Puppet使用ruby开发,所以先装好ruby。RDoc是用来使用puppet的帮助文件。

#yum install ruby rdoc

2. 安装facter

它的作用是收集主机的一些资料,比如CPU,主机IP等,facter把收集到值发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件。

#wget http://puppetlabs.com/downloads/facter/facter-latest.tgz
# tar zxvf facter-latest.tgz
# cd facter-1.5.8
# /usr/local/bin/ruby install.rb
 

2. 下载安装puppet主程序

 # wget http://puppetlabs.com/downloads/puppet/puppet-latest.tar.gz

# tar zxvf puppet-2.6.3.tar.gz

# cd puppet-2.6.3

# /usr/local/bin/ruby install.rb

 

假如我们的构架如下图所示:

Puppet的安装_休闲_02

接下来我们分成两部分,一部分是服务端的设定,一部分是客户端的设定。

 

 

 

4. 服务端的设定

a)         修改/etc/hosts文件

加入

116.61.61.2    s07.ipcpu.com

不加可不可以?可以。只要这个域名DNS解析到客户端即可。

 

b)        拷贝源文件

#mkdir /etc/puppet

#cp conf/auth.conf /etc/puppet/

#cp conf/redhat/fileserver.conf /etc/puppet/

#cp conf/redhat/puppet.conf /etc/puppet/

#cp conf/redhat/server.init /etc/init.d/puppetmaster

#chmod +x /etc/init.d/puppetmaster

#chkconfig --add puppetmaster

#chkconfig puppetmaster on

#mkdir -p /etc/puppet/manifests
 

c)        创建puppet帐号

# puppetmasterd –mkusers(执行中可能会出一些错误,基本上以前安装或创建过puppet用户的原因,执行就是让它自动去 /var/lib/puppet下创建一些目录)

#cat /etc/passwd  #确认系统生成puppet用户

保证/var/lib/puppet/rrd目录存在且属主是puppet,如果没有则这行以下语句

#mkdir /var/lib/puppet/rrd && chown puppet.puppet /var/lib/puppet/rrd

 

d)        启动服务

 

加入site.pp

 #cd /etc/puppet/manifests

#vim site.pp            //启动时必须要有

file { "/tmp/testfile":
 
ensure => present,
 
owner => "root",
 
group => "root",
 
mode => 644,
 

第一次启动时puppet会自动创建所需的文件,包括一系列证书文件等

 

#service puppetmaster start

服务端会占用8140端口。

5. 客户端的设定

 

a)         修改/etc/hosts文件

加入

116.61.61.1    server.ipcpu.com

 

b)        复制配置文件

#mkdir /etc/puppet

#cp conf/auth.conf /etc/puppet/

#cp conf/namespaceauth.conf /etc/puppet/

#cp conf/redhat/puppet.conf /etc/puppet/

#cp conf/redhat/client.init /etc/init.d/puppet

#chmod +x /etc/init.d/puppet

#chkconfig --add puppet

#chkconfig puppet on

 

c)        创建puppet帐号

# puppetd –mkusers

如果报错也可以使用puppetmasterd –mkusers来生成用户,但会出现常见错误1,后面有解决办法

确认存在puppet账户和下面目录权限

#mkdir –r /var/lib/puppet/rrd &&chown puppet.puppet /var/lib/puppet/rrd

 

 

d)        编辑配置文件

#vim  /etc/puppet/puppet.conf

 

加入:

server=server.ipcpu.com
 
listen = true

 

#vim /etc/puppet/namespaceauth.conf

 [fileserver]
 
allow *
 
[puppetmaster]
 
allow *
 
[puppetrunner]
 
allow *
 
[puppetbucket]
 
allow *
 
[puppetreports]
 
allow *
 
[resource]
 
allow *

 

e)         启动客户端服务

#service puppet start

客户端会占用8139端口。

6. 对客户端进行证书签名

 

客户端的证书必须经过服务端的签名,这也是为了安全性考虑。

在服务端列出客户端:

#puppetca  –list

s07.ipcpu.com

#puppetca -s –a

对列出的所有证书签名

 

如果服务端列不出客户端名称,可以在客户端使用puppetd –server server.ipcpu.com –test主动请求。

 

7. 验证

 

如果出现/tmp/testfile,说明配置成功。

 

8. 参考资料:

 

http://hi.baidu.com/qq5910225/blog/item/c310d418a56a1fe9ae5133f6.html

http://hi.baidu.com/fiber212121/blog/item/de0a92024c0a831f4afb51cb.html

http://opkeep.com/system/linux/puppet-man.html

http://www.wenzizone.cn/?p=363

http://hi.baidu.com/fiber212121/blog/item/de0a92024c0a831f4afb51cb.html

 

 

9. 常见错误:

1.       err: Could not retrieve catalog from remote server: certificate verify failed

结局方法:同步时间并且删除客户端/var/lib/puppet/ssl目录下的文件

 

 

 

YUM方式安装

 

1. 安装EPEL

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

 

2. 安装puppet

服务器端:   yum install puppet-server

客户端:      yum install puppet

 

3. 配置服务器端

#more /etc/hosts        //host文件中写入所有client和master

192.168.8.10 AS-1

192.168.8.11 AS-2

#cd /etc/puppet/manifests

#vim site.pp            //启动时必须要有

file { “/tmp/testfile”:

ensure => present,

owner => “root”,

group => “bin”,

mode => 644,

}

#service puppetmaster start     //启动puppet服务端

 

4. 配置客户端

#vim  /etc/puppet/puppet.conf

在[puppetd]段中加入:

server=AS-1

listen = true

#vim namespaceauth.conf

[fileserver]

allow *

[puppetmaster]

allow *

[puppetrunner]

allow *

[puppetbucket]

allow *

[puppetreports]

allow *

[resource]

allow *

#service puppet start

 

5. 签名证书

在服务端执行

#puppetca –list     //在客户端服务启动后,我就在服务端看到了客户端的信息

as-2

#puppetca –sign as-2    将as-2加入签名证书

 

6测试:

在客户端执行:

#ls /tmp

如果出现 testfile,说明配置成功。