Puppet笔记:介绍及基本用法
转自:http://blog.csdn.net/kozazyh/archive/2010/05/13/5588707.aspxPuppet笔记:介绍及基本用法
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 => ["/sbin", "/usr/sbin", "/usr/local/sbin", "/root/bin", "/usr/local/bin", "/usr/bin", "/bin", "/usr/lib64/jvm/jre/bin"],
require => File["/root/puppet/nagiosclient/nrpe.sh"]
}
想在各客户机上执行时,我一般就是先用上述file资源的配置把该脚本推送到客户机上,然后用空上exec资源去执行它,注意exec中要配置好require 该file,否则无法保证exec在file之类在客户上执行。
参考:
http://blog.loudly.me/tag/puppet/
Puppet中文wiki: http://puppet.wikidot.com/
页:
[1]