设为首页 收藏本站
查看: 1085|回复: 0

[经验分享] Puppet安装部署篇(一)

[复制链接]

尚未签到

发表于 2018-8-1 13:29:56 | 显示全部楼层 |阅读模式
  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内核防火墙:
#sed '/^SELINUX/s/=.*/=disabled/g' /etc/sysconfig/selinux -i  关闭iptables防火墙:
    # iptables -F  
    # /etc/init.d/iptables save
  
    # chkconfig iptables off
  系统默认yum不使用,配置阿里的镜像yum源.(百度搜索下"阿里镜像")
DSC0000.png

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

  puppet server和两台应用服务器共三台机器依次执行下面的指令:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
DSC0002.png

  修改yum源文件的release版本:
cd /etc/yum.repos.d  
vim CentOS-Base.repo
DSC0003.png 注意:修改$releasever(版本)为6,共修改了20处,可以使用yum安装软件包了.

  puppet 软件包安装:
  puppet server和agent客户端安装epel-release源
# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm  puppet server端安装puppet-server:
# yum install puppet-server puppet -y  puppet agent客户端安装puppet:
#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软件包安装:
# yum install subversion  #创建仓库目录:
# mkdir /data/puppet_co -p  
# svnadmin create /data/puppet_co
  #配置svn仓库/权限等.
cd /data/puppet_co/conf  
[root@puppet conf]# ls
  
authz  passwd  svnserve.conf
[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]
  注释:
  版本库目录格式:
  [<版本库>:/项目/目录]
  @<用户组名> = <权限>
  <用户名> = <权限>
[root@puppet conf]# cat authz | grep -v '^#' | grep -v '^$'  
[aliases]
  
[groups]
  
#新增了下面三行
  
[/]
  
xiaomeng = rw
  
* =
[root@puppet conf]# cat passwd | grep -v '^#'  
#新增下面2行
  
[users]
  
xiaomeng=123456
  启动svn版本库:
# svnserve -d -r /data/puppet_co/  stop svn:
#pkill svn即可  svn版本库测试,验证版本库是否搭建成功:
DSC0004.png

  清理svn库的用户认证信息:
  多次调试svn库,想清除svn库认证信息,参考下图:
DSC0005.png

DSC0006.png

  将/etc/puppet目录下的(文件/目录)等导入到svn版本库.
# svn import /etc/puppet/ file:///data/puppet_co -m "rsync puppet"
DSC0007.png

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

DSC0009.png

  #将/etc/puppet目录下的资源清理掉,从svn版本库同步更新至/etc/puppet
[root@puppet puppet]# rm -rf *  
[root@puppet puppet]# svn checkout svn://192.168.30.134 /etc/puppet/
DSC00010.png

  #更新完成将发现每个目录下均有.svn的目录,记录此次版本.
[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语法进行检查,语法通过则提交成功,语法错误则提交失败。
# 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的脚本文件,忽略下面这段.仅参考)
# cat pre-commit | grep -v '^#'  
php -f /var/svnroot/pre-commit.php "$1" "$2"
  
if [ $? -eq 1 ]; then
  
    exit 1
  
else
  
    exit 0
  
fi
  查看下这个文件发现脚本文件太长了,看的脑袋晕,就自己找了个,参考下面:
[root@puppet hooks]# cp pre-commit.tmpl pre-commit  
[root@puppet hooks]# chmod 774 pre-commit
[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最新的版本库到本地。
[root@puppet hooks]# cp post-commit.tmpl post-commit  
[root@puppet hooks]# chmod 774 post-commit
[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]#
[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以后的文件。
[root@puppet ~]# ls /etc/puppet/  
allow.conf.txt  auth.conf  environments  fileserver.conf  manifests  modules  puppet.conf
  win客户端使用svn 提交一个新增的文件,查看puppet svn端/etc/puppet 目录是否同步到最新的文件.
DSC00011.png

DSC00012.png

  登陆服务器查看puppet server端下是否同步更新到最新提交的文件.
[root@puppet ~]# ls /etc/puppet/  
allow.conf.txt  auth.conf  environments  fileserver.conf  manifests  modules  puppet.conf  test.txt
DSC00013.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544853-1-1.html 上篇帖子: 通过puppet批量自动安装软件 下篇帖子: puppet自动化搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表