xxggmmxx 发表于 2018-8-3 10:24:52

Puppet笔记:介绍及基本用法

  转自:http://blog.csdn.net/kozazyh/archive/2010/05/13/5588707.aspx
  Puppet笔记:介绍及基本用法
  Puppet是一个可以管理大量linux主机的系统,它的中心思想是让主机上的某个资源与配置文件(manifest)对该资源的设计一致,这里资源可以指一个文件、一个用户、一个软件包、一条cron中的任务等实体。例如下面的一段manifest:
  file { “/etc/sudoers”:
  owner => root,
  group => root,
  mode => 440
  }
  它的作用就是指明了:/etc/sudoers这个文件,其owner应为root,group应为root,mod应为440。执行的时候,客户端会判断这三点是否符合,如果不符合,它会去设置user、group、mode等的值为设置的值。
  安装
  Puppet的结构也是一个唯一(以后会有failover冗余)的中心Server与所有的Client组成。
  Puppet是基于Ruby写成的,所以安装前要准备好Ruby环境,并且需要安装RubyGems以用来安装。Server与Client的安装没有区别,都在相同的包内,只是中心的server上运行的是puppetmasterd,被管理机上运行的是puppetd。另外,每台主机上一定要配置好自己的hostname,之后每台机器要以hostname区分。
  如果ruby环境和gems都装好了,执行下面几句就可以安装好puppet了:
  wget puppet.proximic.cnpuppet/facter-1.5.5.gem
  gem install facter-1.5.5.gem
  wget puppet.proximic.cn/puppet/puppet-0.24.8.gem
  gem install puppet-0.24.8.gem
  使被管理机与中心机连接
  server端首次运行前,编辑/etc/puppet/manifests/site.pp文件,内容可以用最基本的:
  # site.pp
  file { "/etc/sudoers":
  owner => root, group => root, mode => 440
  }启动server,执行:puppetmasterd –mkusers,这个参数是为了生成puppet运行所用用户,以后执行就不需要了。
  然后在客户机上执行:puppetd –server <你的服务器地址> –waitforcert 60 –test,这时客户机会去连server,但是由于连接是在ssl上的,而Server还没有sign过客户的cert,这时客户机被被断开。到server上执行:puppetca –list,会显示出刚才这个客户的hostname为等待签名的客户,执行:puppetca –sign <客户hostname> 即可为其签名。这时再到客户机上执行上面的puppetd命令,即可看到客户在正常地连接server,并且检测上面关于sudoers文件的策略了。
  向被管理机分发文件
  通过puppet可以向被管理机上推送文件,方法是使用file类型的source属性,例如:
  file {
  ”/etc/profile.d/java.sh”:
  source => “puppet://puppet.domain.com/profiles/javaprofile.sh”,
  owner => root,
  group => root,
  mode => 755
  }
  这里的文件来源是什么呢?puppetmasterd自带一个简易的文件服务器,配置方法是创建并编辑/etc/puppet/fileserver.conf ,其中每个section是一个module,module就是指上述puppet://路径中域名之后的第一段(即“profiles”),下面可以配置该module对应的server上的物理路径以及acl等,例如:
  
  path /home/misc/profiles
  allow *
  这样如果客户端上该文件不存在,或者内容不同(通过checksum),就会从server上把这个文件拉过去。
  执行脚本
  很复杂的部署任务肯定不能完全靠puppet完成,这时我会写一个部署用的脚本。Puppet有一种“资源”叫exec,通过它可以执行程序,还可以设置执行时的path,环境变量,user/group,是否记录output等,很方便,例如:
  exec { “/root/puppet/nagiosclient/nrpe.sh”:
  cwd => “/root/puppet”,
  timeout => 7200,
  logoutput => on_failure,
  user => root,
  path => [&quot;/sbin&quot;, &quot;/usr/sbin&quot;, &quot;/usr/local/sbin&quot;, &quot;/root/bin&quot;, &quot;/usr/local/bin&quot;, &quot;/usr/bin&quot;, &quot;/bin&quot;, &quot;/usr/lib64/jvm/jre/bin&quot;],
  require => File[&quot;/root/puppet/nagiosclient/nrpe.sh&quot;]
  }
  想在各客户机上执行时,我一般就是先用上述file资源的配置把该脚本推送到客户机上,然后用空上exec资源去执行它,注意exec中要配置好require 该file,否则无法保证exec在file之类在客户上执行。
  参考:
  http://blog.loudly.me/tag/puppet/
  Puppet中文wiki: http://puppet.wikidot.com/
页: [1]
查看完整版本: Puppet笔记:介绍及基本用法