Puppet的安装部署,后续使用下面三台机器演示,为了演示效果主机名也采用idc+用途来表示.

192.168.30.134  puppet  Puppet Server端

192.168.30.131  sh-web1  Web Server

192.168.30.132  sh-proxy2  Proxy Server


puppet 使用支持两种方式:

    1、单机使用 (这种可以忽略)

    2、master/agent (标准使用)


部署前关系防火墙:

关闭selinux内核防火墙:

1
#sed '/^SELINUX/s/=.*/=disabled/g' /etc/sysconfig/selinux -i

关闭iptables防火墙:

1
2
3
     # iptables -F
     # /etc/init.d/iptables save
     # chkconfig iptables off

系统默认yum不使用,配置阿里的镜像yum源.(百度搜索下"阿里镜像")

wKiom1mstPTwxVraAAGZJxZmAfU786.png

本地系统Cebtos6.5,所以使用centos6的镜像yum源.

wKioL1mstPqwuMy5AAEUdU_Q8d8248.png

puppet server和两台应用服务器共三台机器依次执行下面的指令:

1
wget -O  /etc/yum .repos.d /CentOS-Base .repo http: //mirrors .aliyun.com /repo/Centos-6 .repo


wKiom1mstuuCWk-LAAFMU5G25Do023.png


修改yum源文件的release版本:

1
2
cd  /etc/yum .repos.d
vim CentOS-Base.repo


wKioL1mstwmRmKAHAAC0z4mb3v8709.png注意:修改$releasever(版本)为6,共修改了20处,可以使用yum安装软件包了.


puppet 软件包安装:

    puppet server和agent客户端安装epel-release源

1
  # rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

    puppet server端安装puppet-server:

1
  # yum install puppet-server puppet -y

    puppet agent客户端安装puppet:

1
  #yum install puppet -y

查看三台机器安装的puppet版本:

# puppet -V

3.8.7


疑问?--如果puppet server 是3.8,那么puppet agent是 2.6能正常运行吗?

注释:

第一点:最常见的Puppet部署模型是客户端-服务端模型。许多人询问是否能使用不同的Puppet版本作为master和agent。答案是可以,但前提是要遵照一些注意事项。第一点要注意的是master的版本一定要高于agent。例如,你可以将一个0.24.8版本的agent连接到一个2.6.0版本的master,但是反过来不行。


第二点:要注意的是,agent的版本越老,在与新版本的master搭配时正确运行的可能性就越小。一个0.20.0版本的agent搭配一个2.6.0的master基本不可能正确工作。通常,0.24.x版的agent都能正常连接到2.6.x和0.25.x版本的master并且工作正常。更新版本的master就可能无法完全兼容早期的agent,一些功能和特性可能会出现异常。


最后,将2.6.x或更新版本的master与0.24.x及早期版本的agent混合使用意味着你无法获得2.6.x版本提供的全部性能提升。0.24.x版的agent依然会使用较慢的XML-RPC传输层来进行通讯,从而无法利用新的REST接口。


Svn + Puppet(结合svn版本控制更新puppet Server)

备注:主要是写下怎么在windows使用svn控制修改/删除/提交更新到puppet server,方便大家参考:


备注--svn的安装部署,这块简单写下svn的版本控制,如果你想使用svn+apache或者web访问svn版本,控制权限等,之前写过一篇 <基于submin 来管理Subversion仓库> ,推荐使用submin 感觉自带的功能比apache丰富点,可以参考.


svn软件包安装:

1
# yum install subversion

#创建仓库目录:

1
2
# mkdir /data/puppet_co -p
# svnadmin create /data/puppet_co

#配置svn仓库/权限等.

1
2
3
cd  /data/puppet_co/conf
[root@puppet conf] # ls
authz   passwd   svnserve.conf


1
2
3
4
5
6
7
8
[root@puppet conf] # cat svnserve.conf | grep -v '^#'
[general]
auth-access = write  #通过验证的用户可以读和写
auno-access =  read  #匿名登陆下可以只读文件,即:文件修改后无法提交到服务器
password-db =password  #用户保存文件的名称
authz-db =authz  #权限管理文件
realm =  /data/puppet_co  # 认证空间名,版本库所在目录
[sasl]

注释:

版本库目录格式:

[<版本库>:/项目/目录]

@<用户组名> = <权限>

<用户名> = <权限>


1
2
3
4
5
6
7
[root@puppet conf] # cat authz | grep -v '^#' | grep -v '^$'
[aliases]
[ groups ]
#新增了下面三行
[/]
xiaomeng = rw
* =


1
2
3
4
[root@puppet conf] # cat passwd | grep -v '^#'
#新增下面2行
[ users ]
xiaomeng=123456

启动svn版本库:

1
# svnserve -d -r /data/puppet_co/

stop svn:

1
#pkill svn即可

svn版本库测试,验证版本库是否搭建成功:

wKioL1msuSKSr7OfAAEXwLIt-FE689.png


清理svn库的用户认证信息:

多次调试svn库,想清除svn库认证信息,参考下图:

wKioL1msuLTRpB-EAAE0_0vJfVk228.png


wKiom1msuN7BaQaGAAHH6kMFGt4339.png


将/etc/puppet目录下的(文件/目录)等导入到svn版本库.

1
# svn import /etc/puppet/ file:///data/puppet_co -m "rsync puppet"

wKiom1msuZmSTTHyAABaBuUbUGc325.png

在windows客户端svn update更新查看:

wKioL1msudjg1bZlAAFk9_UPlIY322.png


wKioL1msugzAoeL1AAGISdvpFKo003.png

#将/etc/puppet目录下的资源清理掉,从svn版本库同步更新至/etc/puppet

1
2
[root@puppet puppet] # rm -rf *
[root@puppet puppet] # svn checkout svn://192.168.30.134 /etc/puppet/

wKioL1msuiTj1mL9AABaBFmupwU844.png

#更新完成将发现每个目录下均有.svn的目录,记录此次版本.

1
2
3
4
5
[root@puppet puppet] # ls -a
.  ..  auth.conf  environments  fileserver.conf  manifests  modules  puppet.conf  .svn
[root@puppet puppet] # cd environments/
[root@puppet environments] # ls -a
.  ..  example_env  .svn


部署SVNhooks


目的:方便client客户端修改svn版本库代码,实时同步更新至/etc/puppet目录下.


1、设置pre-commit

设置pre-commit钩子可以提交文件到SVN服务器之前对puppet语法进行检查,语法通过则提交成功,语法错误则提交失败。

1
2
3
4
# cd /data/puppet_co/hooks
[root@puppet hooks] # ls
post-commit.tmpl  post-revprop-change.tmpl  pre-commit.tmpl  pre-revprop-change.tmpl  start-commit.tmpl
post-lock.tmpl    post-unlock.tmpl          pre-lock.tmpl    pre-unlock.tmpl


备注--(本来想借公司脚本使用下,发现公司配的有点复杂,300多行脚本篇幅太大,公司使用的时一个php的脚本文件,忽略下面这段.仅参考)

1
2
3
4
5
6
7
# cat pre-commit | grep -v '^#'
php -f  /var/svnroot/pre-commit .php  "$1"  "$2"
if  [ $? - eq  1 ];  then
     exit  1
else
     exit  0
fi


查看下这个文件发现脚本文件太长了,看的脑袋晕,就自己找了个,参考下面:

1
2
[root@puppet hooks] # cp pre-commit.tmpl pre-commit
[root@puppet hooks] # chmod 774 pre-commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@puppet hooks] # cat pre-commit
#!/bin/bash
#SVN pre-commit hook to check Puppet syntax for .pp files
export  PATH= "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
REPOS= "$1"
TXN= "$2"
tmpfile=`mktemp`
for  file  in  $(svnlook changed -t  "$TXN"  "$REPOS"  | awk  '/^[^D].*\.pp$/ {print $2}' )
do
    svnlook  cat  -t $TXN $REPOS $ file  > $tmpfile
    if  [ $? - ne  0 ]
    then
        echo "Warning: Failed to checkout $file"  >&2
    fi
    puppet parser validate $tmpfile >> /var/log/puppet/svn_pre-commit .log 2>&1
    if  [ $? - ne  0 ]
    then
        echo  "Puppet syntax error in $file"  >>  /var/log/puppet/svn_pre-commit .log 2>&1
        exit  1
    fi
done


2、设置post-commit:

设置post-commit钩子可以在正确提交文件至SVN服务器之后,puppetmaster的模块目录/etc/puppet/modules会自动从SVN服务器上update最新的版本库到本地。


1
2
[root@puppet hooks] # cp post-commit.tmpl post-commit
[root@puppet hooks] # chmod 774 post-commit


1
2
3
4
5
6
7
8
9
10
[root@puppet hooks] # cat post-commit
#!/bin/bash
#POST-COMMIT HOOK
REPOS= "$1"
REV= "$2"
export  LANG=en_US.UTF-8
SVN= /usr/bin/svn
PUPPET_DIR= /etc/puppet
$SVN update $PUPPET_DIR --username xiaomeng --password 123456 >>  /var/log/puppet/svn_post-commit .log
[root@puppet hooks] #


1
2
3
4
5
[root@puppet hooks] # pwd
/data/puppet_co/hooks
[root@puppet hooks] # ls
post-commit       post-lock.tmpl            post-unlock.tmpl  pre-commit.tmpl  pre-revprop-change.tmpl  start-commit.tmpl
post-commit.tmpl  post-revprop-change.tmpl  pre-commit        pre-lock.tmpl    pre-unlock.tmpl


测试svn 钩子是否实时同步即有效:


默认/etc/puppet目录下只有安装完成puppet以后的文件。

1
2
[root@puppet ~] # ls /etc/puppet/
allow.conf.txt  auth.conf  environments  fileserver.conf  manifests  modules  puppet.conf


win客户端使用svn 提交一个新增的文件,查看puppet svn端/etc/puppet 目录是否同步到最新的文件.

wKioL1msuwvTedZlAAHqUBmJcTY512.png


wKioL1msuy6SCvixAAE59qoE_wo087.png


登陆服务器查看puppet server端下是否同步更新到最新提交的文件.

1
2
[root@puppet ~] # ls /etc/puppet/
allow.conf.txt  auth.conf  environments  fileserver.conf  manifests  modules  puppet.conf   test .txt

wKioL1msu3STLDqwAAA8TYUg1PY857.png