Puppet 很早的时候看过一些,因为我们当时已经使用CFEngine很久了,看了puppet之后,感觉还不如CFEngine好用,所以就撂下一段时间没管了,最近因为需求驱动打算把puppet系统的学一遍。
下面对puppet进行一个简单的了解,puppet通常使用CS服务模型,服务端称为master,客户端称为agent,maste在主机上以守护进程运行,它包含了环境所需的所有配置,agent通过SSL和master进行通讯,agent既可以以守护进程运行也可以手动运行,默认情况下,agent会每30分钟和master通讯一次,以检查配置有没有变化。
puppet使用自己的语言来定义配置项,配置项在puppet中称为‘资源’。每个资源都有一个‘类型’,表明被管理的是什么样的资源,软件包?文件?等等。好包括一个‘标题’,它是资源的名称。还包括一系列‘属性‘,它用来说明资源的状态,每一个资源类型都有一系列可以配置的属性。资源类型和资源标题组合在一起构成对这个资源的引用。puppet知道不同平台、不同操作系统之间的差异,puppet会自己处理这些差异,当agent连接到master时,facter会返回agent的相关信息,master根据这些信息处理不同平台的差异。
类型 { 标题: package { ssh:
属性 => 值, ensure => present,
} }
puppet会分析你的配置,并计算如何在agent上运行它们,接着puppet会为每一个agent取得相应的资源,并将他们编译成目录,然后发送到各个主机,通过puppet agent来应用他们,最后将结果返回给master。
实验环境:三台DELL服务器,一台做服务端,两台做客户端。
系统用的ubuntu12.10 puppet版本是2.7
安装puppet
先在三台服务器上安装ruby环境
apt-get install ruby libshadow-ruby1.8安装服务端
apt-get install puppet puppetmaster facter安装客户端
apt-get install puppet facter
因为puppet在运行时要使用DNS域名解析,但是实验环境又没有,只能做hosts了,在三台测试机上做相同的hosts配置
10.1.6.228 Control 10.1.6.216 Compute-2 10.1.6.142 Compute-1
启动master
service puppetmaster start启动agent之前先修改/etc/default/puppet文件
#START=no START=yes启动agent
service puppet start
由于刚装好的系统没有tree命令和sshpass软件,所以先拿这两个练练手,给Compute-1安装。
先让Compute-1通过请求验证
agent执行请求
puppet agent --server=Control --no-daemonize --verbosemaster查看那些agent在请求认证
puppet cert --listmaster上对agent进行签名
puppet cert --sign Compute-1
两分钟后,在agent会看到如下
这表示已经认证通过了,接下来开始在master上编写配置文件。
在/etc/puppet/manifests目录创建site.pp和nodes.pp文件
#site.pp import 'nodes.pp' $pupperserver = 'Control' #nodes.pp node 'Compute-1' { include ssh include tree }
修改master的主配文件/etc/puppet/puppet.conf,在[main]中加入自动载入模块路径
modulepath=/etc/puppet/modules每个模块都需要一个特定的目录结构和一个init.pp文件
1 创建tree模块目录结构
mkdir -p /etc/puppet/modules/tree/{files,manifests,templates} touch /etc/puppet/modules/tree/manifests/init.pp2 编写init.pp文件
class tree { package { tree: ensure => present, } }tree模块创建ok
创建ssh模块
1 创建ssh模块目录结构
mkdir -p /etc/puppet/modules/ssh/{files,manifests,templates} touch /etc/puppet/modules/ssh/manifests/init.pp2 编写init.pp文件
class ssh { package { ssh: ensure => present, } if $operatingsystem == "Ubuntu" { package { sshpass: ensure => present, require => Package["ssh"], } } file { "/tmp/test.py": owner => www-data, group => www-data, source => "puppet://Control/modules/ssh/tmp/test.py", } }3 创建file文件路径
mkdir -p /etc/puppet/modules/ssh/files/tmp touch /etc/puppet/modules/ssh/files/tmp/test.py
ssh模块创建ok
开始在Compute-1执行puppet agent
puppet agent --server=Control --verbose --onetime --no-daemonize
经检查后确认sshpass和tree软件包都已安装,/tmp/test.py文件也已存在,以上配置文件的参数在以后的学习中解释。