ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Puppet学习

Puppet学习

原创 Linux操作系统 作者:luashin 时间:2016-03-10 13:33:43 0 删除 编辑
安装及简单实例应用

安装环境:CentOS 5.4 X86_64位
Server:
1.先安装ruby语言包、ruby标准库、ruby shadow库
yum install -y ruby ruby-libs ruby-shadow

2.需要添加EPRL库,来支持puppet
wget http:// dl.Fedoraproject.org /pub/epel/5Server/x86_64/epel-release-5-4.noarch.rpm
如果你的系统是centos 6版本的或者是centos 5版本但是是32位的,可以到网站:
dl.fedoraproject.org查找你们想要的

3.在master主机上,需要从EPEL仓库安装puppet、puppet-server facter
rpm -Uvh epel-release-5-4.noarch.rpm
puppet软件包含了agent程序,puppet-server软件包含了master程序,facter软件包含了系统盘点工具facter,可以获取agent主机的相关信息
yum install -y puppet puppet-server facter
之后启动puppet master
service puppetmaster start
启动 puppetmaster:[确定]
这样,puppet server上的安装算是完成了
现在,master和agent都安装好了,解释一下/etc/puppet/下的文件含义:
Puppet.conf puppet的服务端配置文件
Auth.conf client访问puppet server的acl配置文件
Fileserver.conf puppet server作为文件服务器的ACL配置文件
Manidests puppet的脚本目录文件目录
Site.pp 文件告诉puppet去哪里寻找并载入指定的客户端配置,如果缺少此文件,puppet会启动失败的
 
防火墙设置:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT
需要重启防火墙,service iptables restart
配置好防火墙后,就可以允许client访问puppet

配置第一个agent
Client:
同样需要安装epel-release-5-4.noarch.rpm
下载:wget http://dl.fedoraproject.org/pub/epel/5Server/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm
在agent端只需要安装:
yum install puppet facter
Client 请求:puppet agent --server=puppet.xxxx.com(puppet master域名) --verbose --no-daemonize
解释:参数
--server 指定了需要连接puppet master 的域名或者主机名,尽量使用域名吧,否则不同网络之间无法通过主机名相通
--no-daemonize 使得puppet 客户端运行在前端并输出日志到标准输出
--verbose 使客户端输出更详细的日志
 
Server端需要相应这个请求:
查看:puppet cert –list
"shwt08" (94:BC:4A:FA:31:E1:10:9F:3C:4D:B3:E8:CB:A4:F8:B9)
puppet cert --sign shwt08
notice: Signed certificate request for shwt08
notice: Removing file Puppet::SSL::CertificateRequest shwt08 at '/var/lib/puppet/ssl/ca/requests/shwt08.pem'
当然,如果我们有很多个client的话,都需要一个个去认证确实是一件很麻烦的事情,所以,修改puppet.conf文件,实现自动化认证
在全局”[mian]”下添加一行:
autosign = true
重启master
service puppetmaster restart
重新添加一个clint,验证
需要先去wget 后需要编辑/etc/hosts
之后puppet agent --server=puppet.xxxx.com --no-daemonize –verbose 发现是没有问题的
 
创建第一个配置:
在master上修改两个文件:
目录/etc/puppet/manifests下:
nodes.pp site.pp 如果没有这两个文件就手工建吧
# vim nodes.pp
node default {
file{"/root/vol_disk_check.sh":
source => "puppet:///files/vol_disk_check.sh",
owner => "root",
group => "root",
mode => 755;
}
}

# vim site.pp
import 'nodes.pp'
至于具体的解释说明,等下章再详细的解释下,这篇文章主要来阐明puppet安装及简易同步文件的效果
 
测试来同步一个文件
puppet agent --server=puppet.xxxx.com --test -v
ok,从详细信息中,得知client已经同步文件了
 
下面说遇到的两个错误:
错误1:
err: Could not retrieve catalog from remote server: hostname not match with the server certificate
解决办法:
在master和client上查看是否二者日期不同步
在client上配置/etc/hosts文件,编辑添加puppet.xxxx.com 解析(IP 域名)

错误2:
err: Could not retrieve catalog from remote server: Connection refused - connect(2)
解决办法:
这个是因为master 上的主程序没有启动的缘故,到master上查看程序puppetmaster 发现提示进程已死,
service puppetmaster status
puppetmasterd 已死,但 pid 文件仍存
查看了下配置文件,发现是在修改fileserver.conf时修改错误导致的,也就是说当遇到这个错误提示的时候,要查看/etc/puppet目录下的主配置文件是否有问题
文件fileserver.conf 中:[files]
path /var/lib/puppet/files
这个path下是放置我们要同步更新的文件

简单模块配置和应用

1.创建一个模块的目录和文件结构,,这个结构将位于/etc/puppet/modules 目录下,我们将模块命名为cron,模块名(类名)必须是普通的字符,只能包含字母、数字、下划线以及短横线
每一个模块都需要一个特定的目录结构和一个叫做init.pp 的文件,这个目录结构能帮助puppet自动载入模块。为了载入模块,puppet会检查一系列被称为模块路径的目录,模块路径是有配置文件puppet.conf中[main]段的modulepath 配置设定的,默认情况下,路径在/etc/puppet/modules下
模块结构:
mkdir -p /etc/puppet/modules/cron/{files,manifests,templates}
我们会将大多数的配置脚本文件放在/etc/puppet/modules/cron/manifests目录下, manifests是puppet的脚本目录文件目录
创建init.pp文件,init.pp文件时模块的核心,每个模块必须拥有一个init.pp文件,files目录用户存放哪些属于模块一部分的文件,templates则是放置模块可能会用到的模板

2. 配置文件
在路径:/etc/puppet/modules/cron/manifests下
Vi init.pp
###功能说明:初始化文件
      class cron {
              case $operatingsystem {
                      CentOS: {
                              include cron::base
                              include cron::crontabs
                              include cron::addcron
                              }
                      RedHat: {
                              include cron::base
                              include cron::crontabs
                              include cron::addcron
                              }
              }
}
root@SHWT11 manifests]# vi base.pp

##功能说明:安装cron包并启动服务
      class cron::base {
              package { cron:
                      name => $operatingsystem ?  {
                              Ubuntu => "cron",
                              redhat => "vixie-cron",
                              centos => "vixie-cron",
              },
              ensure => present,
      }
      service { crond:
              name => $operatingsystem ? {
                ubuntu => "cron",
                redhat => "crond",
                centos => "crond",
      },
      ensure => running,
      enable => true,
      pattern => cron,
      require => Package["cron"],  ##处理依赖关系
      }
模块是清单、资源、文件、模板、类以及定义的容器,一个模块应该包含配置一个特定的 应用程序所需的所有配置
Vi  crontabs.pp
####功能说明,安装crontabs包
      class cron::crontabs {
              package { crontabs:
                name => $operatingsystem ? {
                      redhat => "crontabs",
                      centos => "crontabs",
              },
      ensure => present,
  }
}
上面三个文件是安装cron,并确保cron 服务处于运行(running)状态
[root@SHWT11 manifests]# vi rsync_bash.pp
##功能说明:添加crontab定时任务(每天8点到晚上22点,每半小时执行一次)
class cron::rsync_bash {
      cron {bash:
      command => "/bin/bash  /root/vol_disk_check.sh",
      user => "root",
      hour => "8-22",
      minute => "*/30";
  }
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9034054/viewspace-2054847/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-02-18

  • 博文量
    290
  • 访问量
    1050012