自动化运维工具puppet(五)
2015-10-06 23:07
411 查看
一、Puppet的架构说明
1、Puppet组织结构
通常在安装好Puppet之后的/etc/puppet录下运tree 就能看到下的树结构:
我们先看下Puppet基本结构, 如下图所。 Puppet模块的配置主要是配置件、 应程序及系 统底层相关。 配置完成后发送给报告系统。
![](http://s3.51cto.com/wyfs02/M01/74/19/wKioL1YT3_2zEh6AAAG5e29Meec276.jpg)
3、Puppet是如何作的
接着我们来看下Puppet是如何作的。 简单来说分4步进。
1) 定义: 使Puppet特定的语定义基础配置信息。 通常我们把这些信息写在Modules中。
2) 模拟: 在配 置执之前检测代码。 并不真正执。
3) 执: 按 1) 步定义的配置动部署。 检测并记录下所发变化的部分。
4) 报告: 将期 待的变化与实际发 的变化及任何修改发送给报告系统。 整个作过程如下图所。
![](http://s3.51cto.com/wyfs02/M02/74/1C/wKiom1YT4AujzQRjAAC9ST71O0M153.jpg)
4、Puppet数据 流
1) Node节点将Facts和本机信息发送给Master。
2) Master告诉Note节点应该如何配置, 将这些信息写catalog后传给Node。
3) Node节点在本机进代码解析验证并执, 将结果反馈给Master。
4) Master通过API将数据发给分析具。 报告完全可以通过开放API或与其他系统集成。
整个数据流的向是基于ssl安全协议的, 如下图所。
![](http://s3.51cto.com/wyfs02/M02/74/19/wKioL1YT4DaToox5AAFLiQWVBHg127.jpg)
5、件结合
那么结合数据流, 这些 录的关系是如何关联起来的呢?
1) Puppet通过编译Manifest中的内容, 将编译好的代码存catelog。
2) 在执前先进代码的验证, 再执, 完成最开始所定义好的状态。
代码编译过程如下图所。
![](http://s3.51cto.com/wyfs02/M00/74/1C/wKiom1YT4DvBGyrBAAGWzJ1oKeo098.jpg)
6、详细交互过程
通过以上的学习, 相信家对Puppet的作原理有了基本的了解, 接下来我们将分析Puppet的 Agent 与Master 的详细交互过程。 通过学习这部分内容, 家可加深对Puppet的理解, 以便在今后的使过程中遇到任何问题都能在脑呈现如下图所的内容, 进能快速定位故障并解决它。 所有交互过程都是建在签发证书的前提下执的。
1) Puppet客户端Agent将节点名与facts信息发送给Master。
2) Puppet服务端Master通过分类判断请求的客户端是谁, 它将要做什么。 这个判断是通过site.pp 包含的Node.pp配置件定义的。
3) Puppet服务端Master将所需要的Class类信息进编译后存catalog并发送给Puppet客户端 Agent, 到此完成第次交互。
4) Puppet客户端Agent对catalog进代码验证( 语法检查及错误检查) 并执。 主要是代码的验 证, 并将执过程的信息及结果写志。
5) Puppet客户端Agent最终达到最开始所定义的状态, 并且将结果及任何执数据通过开放API的 形式发送给Puppet服务端Master。
![](http://s3.51cto.com/wyfs02/M00/74/19/wKioL1YT4GiAQyvlAAIEXNGXKBI650.jpg)
7、安全与认证
Puppet通信都采ssl安全加密协议, 以保障所有数据传输的安全性, 为此我们不担数据的安全 性问题。 通常我们使Puppet管理设备时也有可能建在公司内的基础之上, 这样就更加安全了。 当然, 如果你所在的公司没有属于的内也没有关系。 Puppet所采的SSL安全加密协议已经为我们解决了数据传输的安全问题。
Puppet Master在启动后会给签发证书和key。 我们可以在var/puppet/ssl( 3.1版本 在/var/lib/puppet/ssl/下) 录下看得到它们。
Puppet Agent 在运puppet apply --test时添加参数( --verbose) 可以在客户端终端看到申请 证书的详细过程。
Puppet Master同样也可以使puppet cert list查看到申请证书的客户端列表。 使命令puppet cert signagent_name来签发证书。
Puppet Agent就可以收到notice: Finished等相关字样。 如果Master直不签发证书, 客户端会每2分钟请求次。
二、Puppet核配置件详解
1、主配置件puppet.conf
主配置件puppet.conf主要于设置相关的参数, 认证件, 件系统配置件, 插件配置等。 Puppet版本不同, 配置选项命令式也有所不同。 Puppet2.6以前的命名式还以〔 puppetmaster〕 , 〔 puppetagent〕 为主。 Puppet 2.6以后都以〔 main〕 , 〔 master〕 , 〔 agent〕 为主。 为了防读者混 淆, 建议都采Puppet 2.6以上版本。 本书都以Puppet 2.6以上版本为主。
先看如何成Puppet配置件puppet.conf:
在本地查看配置参考册:
由于puppet.conf配置件内容较多, 下笔者将列举核配置、 常配置选项( 不区分Master与Agent) :
site.pp的的主要是告诉Puppet去哪寻找并载所有主机相关的配置, 默认存放 在/etc/puppet/manifests录中。 通常我们在会此件中定义些全局变量。
注意 :“清单”( Manifests) 是Puppet中的术语, 指的是包含配置信息的件。 清单件的后缀是.pp。
成Puppet主机配置件site.pp:
Namespaceauth.conf件的的是: 可以指定允许谁访问每个名称空间。 要创建 Namespaceauth.conf件必须添加对每个名称空间的访问权限。 以下就是针对不同名称空间的权限配置, 通常不做的变动。
以下是配置的内容:
auth.conf认证配置件是Puppet中的ACL, 主要应于Puppet's REST API。 例如客户端请求 https://yourpuppetmaster:8140/{environment}/{resource}/{key}时, 服务器可以根据资源定义访问权限。
其配置参考如下:
autosign.conf允许配置件中的客户端动进签名验证, 省去交互的过程。 这对动化配置 来说省去了很多作。
配置件参考如下:
动成证书命令为:
5、报告系统配置
tagmail.conf 将配置的报告内容按要求发送给谁。 要使此项功能, 需要在Puppet Master端配置: reports =tagmail, 需要在Puppet Agent端配置report =true, 同时也可以配置smtp由谁来发送。 在Puppet Master端配置reportform为smtpserver or sendmail即可。 默认由本机sendmail发送。
6、件系统配置件
fi leserver.conf是项安全配置, 结合puppet.confauth.conf起使。 针对那个录, 哪些客户端 允许访问, 哪些禁访问。 fileserver.conf的使常灵活, 后续将在第16章节来讲解它的优化及配置。
三、Puppet运环境
在运维管理, 每个公司都有着的上线流程, 通常都较严格。 但般都分为三个步骤: 开 发环境, 测试环境, 产环境。 如果没有经过严格的测试就将应或代码程序部署到产上是常可怕的。 这也是笔者为什么单独拿章来讲解Puppet运环境的原因。 由于Puppet持配置多种环境, 并可以针对系统应进有效的测试, 因此使Puppet可以很好地解决测试程序部署在产环境所带来的未知问题。
运维上线的3种环境如下图所:
![](http://s3.51cto.com/wyfs02/M01/74/1C/wKiom1YT4GyjOGfMAABbWKArsBs867.jpg)
1、服务器端配置
配置多种环境需要修改Puppet Master服务器端的Puppet.conf, 增加环境配置{ environment} 选项 并向环境指定特别的变量配置, 同时可以根据需要决定是否修改auth.conf 配置。
我们可以修改puppet.conf增加三种环境的配置, 同时也可以只指定种环境。 在配置环境时我们 还可以配置site.pp的位置、 模块录及件录, 以区分不同的环境应。 Puppet默认以production产环境运。
在如下步骤中, 我们将创建3个环境: development、 testing和production。
1) 修改puppet.conf, 增加3种配置环境, 指定不同的模块录及件系统录。
2) 如果需要为每个环境设置不同的访问权限, 则需要修改Auth.conf配置件。 如下代码所, 配 置testing环境针对主机localhost与agent.example.com具有的所有权限。
在Puppet Master服务器配置好环境后, 我们可以在客户端进指定。 通常有两种做法, 是修改 Puppet配置件, 是在运时增加环境参数。 如果希望此节点长期以某种环境运, 建议将环境配置写配置件。 我们来看下这两种配置法。
1) 修改Puppet agent配置件puppet.conf, 指定运环境为测试环境。 代码如下:
我们在Puppet中已经配置好了各环境, 要如何运呢? 这个时候就需要强的版本控制软件。 通过 版本控制软件配置不同的分来实现不同环境配置的管理, 客户端采在命令下应多种环境的法 执。本章以Git操作创建Testing分的式讲解Puppet多环境的应法。 实现原理如下图所。
![](http://s3.51cto.com/wyfs02/M01/74/19/wKioL1YT4JWxnT_EAAC3RbwKtxU311.jpg)
4、术语回顾
资源( Resource) : 是Puppet最基础的元素。 资源可以是件、 服务、 软件包、 定义脚本等。 我们编写的程序也可以称为资源。 资源多了就需要将其组织起来, 这就要使Puppet, 因为其主要的特就是处理资源与资源之间的依赖与关系。
属性( Attribute) : 资源需要定义相关的属性值, 否则毫意义。 通过属性的定义才知道资源在做什么。
类( Class) : 将多个资源组织起来进重新定义。 在其他程序语中我们会将多个资源定义成个类或封装成个函数, 在Puppet中也是采同样的思想, 只不过是采Class和Define的法来进组织的。
模块( Module) : 多个类的合集。 Puppet与其他程序语类似, 在类较多时, 通常会将这些类封装成个模块, 因此在Puppet中同样也有模块的概念。
变量( Variabls) : Puppet与其他程序语类似, 同样持变量。 通常我们使Facter收集本地信息并以变量形式传递Puppet, 或者定义变量。
参数( Parameter) : 又称参变量, 通常我们把传递给变量的数值称为参数, 传递的过程称为传参。
节点( Node) : Puppet每个客户端, 即主机( Host) 。 主机可以归并主机组( Hostgroup) 。 Puppet在管理主机时要求与计算机配置的主机名( hostname) 保持致, 并建议采DNS来管理主机名, 否则需要维护量的host指定主机名与主机IP地址。
四、Puppet命令详解
Puppet提供量的命令来帮助我们进有效的管理。 Puppet中所有命令都可以使puppet help命令 查看。 先来看下Puppet都有哪些命令, 以及每个命令的功能是什么。
![](http://s3.51cto.com/wyfs02/M02/74/1C/wKiom1YT4JWyodmLAADg4WoGbXY101.jpg)
1、puppet master
puppet master默认是以Ruby内建的WEBRick在后台运的守护进程, 同样也可以采最常的 Web服务器Apache和Nginx替换WEBRick以提升性能。 在多数的安装过程中, 你会安装台Master主服务器来管理所有Agent客户端。 puppet master的主要功能是编译配置件、 件、 模板、 节点的定义插件。 我们可以使puppet help master查看相应的帮助信息。
puppet master法为:
通常我们还会使--genconfig输出默认配置件, 代码如下:
代码, 法如下:
puppet agent在每个节点以守护进程式运, 通常每30分钟向Master请求次, 以确认新的信息 并询问是否有变更, 然后负责运编译好的Catalog代码。 如果在节点配置件( puppet.conf) 中定义了Pluginsync, Agent同样负责拉取定义Facts并处理。 Puppet Agent还可以以Cron式执。
3、puppet apply
puppet apply是Puppet运命令, 主要在检测manifests时或在没有络连接的情况下使。 不同于 puppet agent, puppet apply在运时不会连接Master。
实例 将输出信息输出到志件, 代码如下:
1) 先修改test类的内容, 将"Hello World!"修改为"Testing JSON!":
4、puppet cert
1) 查看请求认证的客户端列表, 代码如下:
puppet kick于连接到Agent客户端让它主动运puppet agent--test命令, 类似于主动触发配置。 puppet kick的最常见法是指定个类主机或组主机。 也可以通过"LDAP"查找所有匹配的主机, 然后连接到每个主机, 并触发所有对象使指定的标记执puppet命令。 当然我们也可以指定匹配主机只 运带"tag"标记的类 。
要使puppet kick需要做如下配置:
1) 设置Puppet Agent所有节点的/etc/puppet/puppet.conf在〔 agent〕 字段增加"listen=true"。
2) 设置Puppet Agent所有节点防墙, 允许8139端。
3) 设置Puppet Agent所有节点/etc/puppet/auth.conf插如下配置:
在紧急情况下我们需要指定客户端或所有客户端主动向Master请求更新。 为了避免量客户端同时 发起请求, 可以分批指定, 或者只指定特定的资源进更新。
1) 指定主机名进puppet kick操作, 代码如下:
6、puppet describe
puppet describe提供Puppet资源的类型、 providers和metaparameters的帮助。
puppet describe命令使法如下:
1) 查看所有的资源类型, 代码如下:
puppet resource于提供个简单的具, 将系统资源转换成Puppet代码。
puppet resource命令的法如下:
1) 采puppet resource将本地户liuyu的相关信息转换成Puppet代码, 代码如下:
1、Puppet组织结构
通常在安装好Puppet之后的/etc/puppet录下运tree 就能看到下的树结构:
|-- auth.conf #ACL权限控制件 |-- fileserver.conf #件服务配置件 |-- manifests #节点存储目录( Puppet会先加载site.pp) | `-- site.pp #定义Puppet变量和默认配置 |-- modules #模块配置录 | `-- nginx #以Nginx为例 | |-- manifests | | `-- init.pp #模块主配置件, 定义类class相关信息。 读取模块后先读取它 | `-- templates | `-- nginx.conf.erb #模板配置件(erb为主) |-- namespaceauth.conf #命名空间配置件( 配置权限) |-- puppet.conf #Puppet主配置件 `-- tagmail.conf #邮件报告配置件2、Puppet基本结构
我们先看下Puppet基本结构, 如下图所。 Puppet模块的配置主要是配置件、 应程序及系 统底层相关。 配置完成后发送给报告系统。
![](http://s3.51cto.com/wyfs02/M01/74/19/wKioL1YT3_2zEh6AAAG5e29Meec276.jpg)
3、Puppet是如何作的
接着我们来看下Puppet是如何作的。 简单来说分4步进。
1) 定义: 使Puppet特定的语定义基础配置信息。 通常我们把这些信息写在Modules中。
2) 模拟: 在配 置执之前检测代码。 并不真正执。
3) 执: 按 1) 步定义的配置动部署。 检测并记录下所发变化的部分。
4) 报告: 将期 待的变化与实际发 的变化及任何修改发送给报告系统。 整个作过程如下图所。
![](http://s3.51cto.com/wyfs02/M02/74/1C/wKiom1YT4AujzQRjAAC9ST71O0M153.jpg)
4、Puppet数据 流
1) Node节点将Facts和本机信息发送给Master。
2) Master告诉Note节点应该如何配置, 将这些信息写catalog后传给Node。
3) Node节点在本机进代码解析验证并执, 将结果反馈给Master。
4) Master通过API将数据发给分析具。 报告完全可以通过开放API或与其他系统集成。
整个数据流的向是基于ssl安全协议的, 如下图所。
![](http://s3.51cto.com/wyfs02/M02/74/19/wKioL1YT4DaToox5AAFLiQWVBHg127.jpg)
5、件结合
那么结合数据流, 这些 录的关系是如何关联起来的呢?
1) Puppet通过编译Manifest中的内容, 将编译好的代码存catelog。
2) 在执前先进代码的验证, 再执, 完成最开始所定义好的状态。
代码编译过程如下图所。
![](http://s3.51cto.com/wyfs02/M00/74/1C/wKiom1YT4DvBGyrBAAGWzJ1oKeo098.jpg)
6、详细交互过程
通过以上的学习, 相信家对Puppet的作原理有了基本的了解, 接下来我们将分析Puppet的 Agent 与Master 的详细交互过程。 通过学习这部分内容, 家可加深对Puppet的理解, 以便在今后的使过程中遇到任何问题都能在脑呈现如下图所的内容, 进能快速定位故障并解决它。 所有交互过程都是建在签发证书的前提下执的。
1) Puppet客户端Agent将节点名与facts信息发送给Master。
2) Puppet服务端Master通过分类判断请求的客户端是谁, 它将要做什么。 这个判断是通过site.pp 包含的Node.pp配置件定义的。
3) Puppet服务端Master将所需要的Class类信息进编译后存catalog并发送给Puppet客户端 Agent, 到此完成第次交互。
4) Puppet客户端Agent对catalog进代码验证( 语法检查及错误检查) 并执。 主要是代码的验 证, 并将执过程的信息及结果写志。
5) Puppet客户端Agent最终达到最开始所定义的状态, 并且将结果及任何执数据通过开放API的 形式发送给Puppet服务端Master。
![](http://s3.51cto.com/wyfs02/M00/74/19/wKioL1YT4GiAQyvlAAIEXNGXKBI650.jpg)
7、安全与认证
Puppet通信都采ssl安全加密协议, 以保障所有数据传输的安全性, 为此我们不担数据的安全 性问题。 通常我们使Puppet管理设备时也有可能建在公司内的基础之上, 这样就更加安全了。 当然, 如果你所在的公司没有属于的内也没有关系。 Puppet所采的SSL安全加密协议已经为我们解决了数据传输的安全问题。
Puppet Master在启动后会给签发证书和key。 我们可以在var/puppet/ssl( 3.1版本 在/var/lib/puppet/ssl/下) 录下看得到它们。
Puppet Agent 在运puppet apply --test时添加参数( --verbose) 可以在客户端终端看到申请 证书的详细过程。
Puppet Master同样也可以使puppet cert list查看到申请证书的客户端列表。 使命令puppet cert signagent_name来签发证书。
Puppet Agent就可以收到notice: Finished等相关字样。 如果Master直不签发证书, 客户端会每2分钟请求次。
二、Puppet核配置件详解
1、主配置件puppet.conf
主配置件puppet.conf主要于设置相关的参数, 认证件, 件系统配置件, 插件配置等。 Puppet版本不同, 配置选项命令式也有所不同。 Puppet2.6以前的命名式还以〔 puppetmaster〕 , 〔 puppetagent〕 为主。 Puppet 2.6以后都以〔 main〕 , 〔 master〕 , 〔 agent〕 为主。 为了防读者混 淆, 建议都采Puppet 2.6以上版本。 本书都以Puppet 2.6以上版本为主。
先看如何成Puppet配置件puppet.conf:
puppetd --genconfig> /etc/puppet/puppet.conf puppetmasterd--genconfig> /etc/puppet/puppet.conf以上命令会覆盖原件。
在本地查看配置参考册:
puppet doc --reference configuration如果不知道配置件在哪个录下, 可以使以下命令查看:
puppet agent --configprint confdir默认录是/etc/puppet。
由于puppet.conf配置件内容较多, 下笔者将列举核配置、 常配置选项( 不区分Master与Agent) :
[main] #通配置选项 vardir = /var/lib/puppet confdir = /etc/puppet logdir = /var/log/puppet rundir = /var/run/puppet ssldir = $vardir/ssl fileserverconfig = /etc/puppet/fileserver.conf manifestdir = /etc/puppet/manifests #可不指定默认读取此录 manifest = /etc/puppet/manifests/site.pp #主机件默认读取 modulepath = /etc/puppet/modules:/usr/share/puppet/modules authconfig = /etc/puppet/namespaceauth.conf #如果开启Listen为true需要配置此件 pluginsync = true #插件同步配置对facter定义有效 reportdir = /var/lib/puppet/reports #报告件成目录, 目录以主机名命令开头 reports = log, foreman #报告的式与类型 # environment = production 运环境配置, 默认为产环境 [agent] #客户端配置选项 classfile = $vardir/classes.txt localconfig = $vardir/localconfig runinterval = 1800 #客户端默认探测时间, 可按需求修改 listen = true #是否监听, 执puppet kick时需要配置 report = true #客户端的报告系统配置, 不同于Master #此项的主要的是将报告发送Master, 主要于客户端puppet.conf配置 report_port = 8140 #监听端, 如果服务器配置有防墙, 需开放此端 report_server = server #默认不填, 此时以下的$server变量值为准 server = server.domain.com [master] #服务端配置选项 certname = server.domain.com #也可以不定义, 以主机名为准 reports = store, http, tagmail, log reporturl = http://server.domain.com:3000/reports/upload #报告发送地址, 可配置在dashboard或foreman配置件中 autosign = /etc/puppet/autosign.conf #动认证配置件PuppetMaster服务器端主配置件: puppet.conf。
[main] #全局配置 #vardir来存放缓存数据、 配置、 客户端传回的报告及件备份 vardir = /var/lib/puppet # Puppet志件配置录默认为'$vardir/log' logdir = /var/log/puppet #PID件目录, 默认为'$vardir/run' rundir = /var/run/puppet #SSL签发认证件目录, 默认为 '$confdir/ssl' ssldir = $vardir/ssl [master] #服务器端配置 pluginsync = true #开启插件同步 reports = log, foreman #报告发送log和foreman environment = production #指定运环境为产环境 certname = server.domain.com #配置主机名为server.domain.comPuppet Agent客户端主配置件: puppet.conf
[main] logdir = /var/log/puppet rundir = /var/run/puppet ssldir = $vardir/ssl pluginsync = true [agent] #客户端配置 #关联与检索配置件录, 默认为 '$confdir/classes.txt', 也可以使 (--loadclasses)参数指定 classfile = $vardir/classes.txt #本地缓存配置录, 默认为'$confdir/localconfig' localconfig = $vardir/localconfig runinterval = 1800 #检测时1800秒, 30分钟 listen = true #监听进程 report = true #发送报告 server = puppet.domain.com #指定Master地址2、主机配置件site.pp
site.pp的的主要是告诉Puppet去哪寻找并载所有主机相关的配置, 默认存放 在/etc/puppet/manifests录中。 通常我们在会此件中定义些全局变量。
注意 :“清单”( Manifests) 是Puppet中的术语, 指的是包含配置信息的件。 清单件的后缀是.pp。
成Puppet主机配置件site.pp:
puppet apply --genmanifest> /etc/puppet/manifests/site.pp通常不使以上命令成的site.pp配置, 主要填写的内容为:
# site.pp - all agent configure Exec { path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" } #设置环境变量 $fileserver = "puppet.domain.com" #指定全局fileserver变量 $ntpserver = "ntp.domain.com" #指定ntpserver变量 #建议读者动配置以上内容 Package { provider => "yum" } #指定软件包的安装法为yum #可以直接写节点配置件, 在所有Agent上创建其内容为"Hello World"的 #/tmp/temp1.txt件 #node default { # file { "/tmp/temp1.txt": content => "Hello World!"; } # } import "modules.pp" #加载模块配置件, 可以不配置 import "nodes/*.pp" #加载主机信息, 可以使通配符, 也可以定义多组录 import "test.domain.com.pp" #加载测试主机3、认证与安全配置件
Namespaceauth.conf件的的是: 可以指定允许谁访问每个名称空间。 要创建 Namespaceauth.conf件必须添加对每个名称空间的访问权限。 以下就是针对不同名称空间的权限配置, 通常不做的变动。
以下是配置的内容:
[fileserver] allow *.domain.com [puppetmaster] allow *.domain.com [puppetrunner] allow culain.domain.com [puppetbucket] allow *.domain.com [puppetreports] allow *.domain.com [resource] allow server.domain.com注意 :当puppet.conf配置Listen=true时必须要配置此件, 否则Puppet启动时会报出"Will not start without authorization file /etc/puppet/namespaceauth.conf"的错误提。
auth.conf认证配置件是Puppet中的ACL, 主要应于Puppet's REST API。 例如客户端请求 https://yourpuppetmaster:8140/{environment}/{resource}/{key}时, 服务器可以根据资源定义访问权限。
其配置参考如下:
# 以auth.conf为例 path / auth any environment override allow magpie.example.com path /certificate_status auth any environment production allow magpie.example.com path /facts method save auth any allow magpie.example.com path /facts auth yes method find, search allow magpie.example.com, dashboard.example.com其语法规则如下:
path [~] {/path/to/resource|regex} #目录配置 [environment {list of environments}] #环境配置 [method {list of methods}] #法命令配置 [auth[enthicated] {yes|no|on|off|any}] #授权配置 [allow {hostname|certname|*}] #允许配置 我们再来看auth.conf的配置件: path /facts auth yes method find, search allow magpie.example.com, dashboard.example.com #现在就不难理解这段配置的意思了。 允许主机名为"magpie.example.com"和"dashboard.example.comd的两台客户端在facts目录进find和search操作4、客户端动认证配置
autosign.conf允许配置件中的客户端动进签名验证, 省去交互的过程。 这对动化配置 来说省去了很多作。
配置件参考如下:
#允许单客户端或者域名匹配, 主机名匹配 rebuilt.example.com *.scratch.example.com *.local同时Puppet客户端的证书也可以采提前在master上成的法, 将成的证书件拷贝到客户端 对应录下实现动认证的配置。
动成证书命令为:
puppet cert generate client.domain.com这时将在本地成client.domain.com客户端证书件, 件及其所在录为:
/var/lib/puppet/ssl/private_keys/client.domain.com.pem /var/lib/puppet/ssl/certs/client.domain.com.pem /var/lib/puppet/ssl/certs/ca.pem将这些件复制到客户端相同的录下即可。
5、报告系统配置
tagmail.conf 将配置的报告内容按要求发送给谁。 要使此项功能, 需要在Puppet Master端配置: reports =tagmail, 需要在Puppet Agent端配置report =true, 同时也可以配置smtp由谁来发送。 在Puppet Master端配置reportform为smtpserver or sendmail即可。 默认由本机sendmail发送。
all: log-archive@example.com webserver, !mailserver: httpadmins@example.com emerg, crit: james@example.com, zach@example.com, ben@example.com#志的级别可以是: debug、 info、 notice、 warning、 err、 alert、 emerg、 crit或者 verbose 也可以是个类的名字class names, 个标签名tags
6、件系统配置件
fi leserver.conf是项安全配置, 结合puppet.confauth.conf起使。 针对那个录, 哪些客户端 允许访问, 哪些禁访问。 fileserver.conf的使常灵活, 后续将在第16章节来讲解它的优化及配置。
# 配置法 [mount_point] path /path/to/files allow *.example.com deny *.wireless.example.com #举例: 允许通配主机为"*.domain.com"的主机获取/etc/puppet/files目录下 的件。 以下为其配置法 [files] path /etc/puppet/files allow *.domain.com
三、Puppet运环境
在运维管理, 每个公司都有着的上线流程, 通常都较严格。 但般都分为三个步骤: 开 发环境, 测试环境, 产环境。 如果没有经过严格的测试就将应或代码程序部署到产上是常可怕的。 这也是笔者为什么单独拿章来讲解Puppet运环境的原因。 由于Puppet持配置多种环境, 并可以针对系统应进有效的测试, 因此使Puppet可以很好地解决测试程序部署在产环境所带来的未知问题。
运维上线的3种环境如下图所:
![](http://s3.51cto.com/wyfs02/M01/74/1C/wKiom1YT4GyjOGfMAABbWKArsBs867.jpg)
1、服务器端配置
配置多种环境需要修改Puppet Master服务器端的Puppet.conf, 增加环境配置{ environment} 选项 并向环境指定特别的变量配置, 同时可以根据需要决定是否修改auth.conf 配置。
我们可以修改puppet.conf增加三种环境的配置, 同时也可以只指定种环境。 在配置环境时我们 还可以配置site.pp的位置、 模块录及件录, 以区分不同的环境应。 Puppet默认以production产环境运。
在如下步骤中, 我们将创建3个环境: development、 testing和production。
1) 修改puppet.conf, 增加3种配置环境, 指定不同的模块录及件系统录。
$ sudo vim /etc/puppet/puppet.conf [master] environment = development,testing,production [development] manifest = /etc/puppet/manifests/development/site.pp #指定site.pp位置 modulepath = /etc/puppet/modules/development#指定模块录 fileserverconfig = /etc/puppet/fileserver.conf.development [testing] manifest = /etc/puppet/manifests/testing/site.pp modulepath = /etc/puppet/modules/testing fileserverconfig= /etc/puppet/fileserver.conf.testing [production] manifest = /etc/puppet/manifests/production/site.pp modulepath = /etc/puppet/modules/production fileserverconfig = /etc/puppet/fileserver.conf.production如以上代码所, 在Puppet配置中每个环境的配置段都定义了3个配置项: manifest、 modulepath和 fileserverconfig。modulepath定义了每个环境将要应的模块的路径, manifest定义了应到对应环境的site.pp件的路径, fileserverconfig定义了应到对应环境时fileserver件的路径。 这3个选项就可以让每个环境具有不同的模块与配置。
2) 如果需要为每个环境设置不同的访问权限, 则需要修改Auth.conf配置件。 如下代码所, 配 置testing环境针对主机localhost与agent.example.com具有的所有权限。
path / auth any environment testing#针对不同环境的权限配置 allow localhost, agent.example.com3) 修改配置后需要重启Puppet服务以启新的配置。 部分系统使init脚本来完成这任务, 代 码如下:
/etc/init.d/puppetmaster restart2、客户端配置
在Puppet Master服务器配置好环境后, 我们可以在客户端进指定。 通常有两种做法, 是修改 Puppet配置件, 是在运时增加环境参数。 如果希望此节点长期以某种环境运, 建议将环境配置写配置件。 我们来看下这两种配置法。
1) 修改Puppet agent配置件puppet.conf, 指定运环境为测试环境。 代码如下:
$ sudo vim /etc/puppet/puppet.conf [agent] environment = testing2) 在命令使运环境, 使environment命令参数即可。 代码如下:
$ puppet agent --test --noop --environment [development,testing, production]3、如何运环境配置
我们在Puppet中已经配置好了各环境, 要如何运呢? 这个时候就需要强的版本控制软件。 通过 版本控制软件配置不同的分来实现不同环境配置的管理, 客户端采在命令下应多种环境的法 执。本章以Git操作创建Testing分的式讲解Puppet多环境的应法。 实现原理如下图所。
![](http://s3.51cto.com/wyfs02/M01/74/19/wKioL1YT4JWxnT_EAAC3RbwKtxU311.jpg)
4、术语回顾
资源( Resource) : 是Puppet最基础的元素。 资源可以是件、 服务、 软件包、 定义脚本等。 我们编写的程序也可以称为资源。 资源多了就需要将其组织起来, 这就要使Puppet, 因为其主要的特就是处理资源与资源之间的依赖与关系。
属性( Attribute) : 资源需要定义相关的属性值, 否则毫意义。 通过属性的定义才知道资源在做什么。
类( Class) : 将多个资源组织起来进重新定义。 在其他程序语中我们会将多个资源定义成个类或封装成个函数, 在Puppet中也是采同样的思想, 只不过是采Class和Define的法来进组织的。
模块( Module) : 多个类的合集。 Puppet与其他程序语类似, 在类较多时, 通常会将这些类封装成个模块, 因此在Puppet中同样也有模块的概念。
变量( Variabls) : Puppet与其他程序语类似, 同样持变量。 通常我们使Facter收集本地信息并以变量形式传递Puppet, 或者定义变量。
参数( Parameter) : 又称参变量, 通常我们把传递给变量的数值称为参数, 传递的过程称为传参。
节点( Node) : Puppet每个客户端, 即主机( Host) 。 主机可以归并主机组( Hostgroup) 。 Puppet在管理主机时要求与计算机配置的主机名( hostname) 保持致, 并建议采DNS来管理主机名, 否则需要维护量的host指定主机名与主机IP地址。
四、Puppet命令详解
Puppet提供量的命令来帮助我们进有效的管理。 Puppet中所有命令都可以使puppet help命令 查看。 先来看下Puppet都有哪些命令, 以及每个命令的功能是什么。
puppet help agent #客户端进程, 负责从Master获取数据 apply #运本地 manifests ca #本地证书的管理 catalog #编译、 保存、 查看Puppet代码, 或转换成Catalogs cert #证书颁发, 于签署证书 certificate #提供访问CA证书的管理 certificate_request #管理证书请求 certificate_revocation_list #管理撤销证书的列表 config #配置选项 describe #资源帮助 device #管理远程络设备 doc #成Puppet档 facts #系统信息检查 file #在filebucket中检索和存储件 filebucket #在filebucket中检索和存储件 help #查看帮助 inspect #发送report报告 instrumentation_data #管理监听的数据 instrumentation_listener #管理监听状态 instrumentation_probe #管理监听探测 key #创建、 保存、 删除证书密钥 kick #远程控制Agent, 远程触发puppet agent命令 man #查看册 master #服务端进程 module #从Puppet Forge创建、 安装、 查询模块 node #管理节点 parser #解析器管理 plugin #插件管理 queue #队列进程 report #创建、 查看报告 resource #查看资源帮助 resource_type #查看类、 默认资源类型与节点信息 secret_agent #模拟Agent status #查看Puppet 状态我们常的Puppet命令不是很多, 按照功能的不同可以分为如下图所的类。 本节将对实 命令进介绍说明, 并对常命令进深详细讲解。
![](http://s3.51cto.com/wyfs02/M02/74/1C/wKiom1YT4JWyodmLAADg4WoGbXY101.jpg)
1、puppet master
puppet master默认是以Ruby内建的WEBRick在后台运的守护进程, 同样也可以采最常的 Web服务器Apache和Nginx替换WEBRick以提升性能。 在多数的安装过程中, 你会安装台Master主服务器来管理所有Agent客户端。 puppet master的主要功能是编译配置件、 件、 模板、 节点的定义插件。 我们可以使puppet help master查看相应的帮助信息。
puppet master法为:
puppet master [-D|--daemonize|--no-daemonize] [-d|--debug] [-h|--help] [-l|--logdest <file>|console|syslog] [-v|--verbose] [-V|--version] [--compile <node-name>] puppet master命令的参数详解如下: * --daemonize: #-D发送到后台守护进程, 默认选项 * --no-daemonize: #不发送到后台守护进程 * --debug: #-d启完整的调试模式 * --help: #-h查看帮助 * --logdest: #-l志送发式, 默认采syslog配置 * --verbose: #-v显详细信息 * --version: #-V打印Puppet版本 * --compile: #以JSON的式输出编译的catalog提 :在命令中, -d是--debug简写。
通常我们还会使--genconfig输出默认配置件, 代码如下:
$ sudo puppet master --genconfig>puppet.confpuppet master命令最常见的法就是让Puppet以不启后台守护进程的式运, 于调试Puppet
代码, 法如下:
$ sudo puppet master --no-daemonize --verbose2、puppet agent
puppet agent在每个节点以守护进程式运, 通常每30分钟向Master请求次, 以确认新的信息 并询问是否有变更, 然后负责运编译好的Catalog代码。 如果在节点配置件( puppet.conf) 中定义了Pluginsync, Agent同样负责拉取定义Facts并处理。 Puppet Agent还可以以Cron式执。
puppet agent命令法为: puppet agent [--certname <name>] [-D|--daemonize|--no-daemonize] [-d|--debug] [--detailed-exitcodes] [--digest <digest>] [--disable [message]] [--enable] [--fingerprint] [-h|--help] [-l|--logdest syslog|<file>|console] [--no-client] [--noop] [-o|--onetime] [-t|--test] [-v|--verbose] [-V|--version] [-w|--waitforcert <seconds>] puppet agent命令的参数详解如下: * --certname: #指定客户端certname( 唯ID) , 通常以域名命名 * --daemonize: #-D发送到后台守护进程, 默认选项 * --no-daemonize: #不发送到后台守护进程 * --debug: #-d启完整的调试模式 * --detailed-exitcodes: #提供详细的退出代码 * --digest: #指定证书指纹算法, 默认为MD5算法 * --disable: #禁, 禁puppet agent在此节点执 * --enable: #启, 重新允许执puppet agent * --fingerprint: #显当前证书的指纹 * --logdest: #-l 志送发式, 默认采syslog配置 * --no-client: #不要创建客户端配置件, 当listen=true时才有意义 * --noop: #使'noop'模式, Puppet运Catelog, 但不执配置 * --onetime: #-o 运次, 配合--no-daemonize使 * --serve: #启动另类型的服务 * --test: #-t 测试, 常选择 * --verbose: #-v 显详细信息 * --version: #-V 打印Puppet版本 * --waitforcert: #-w 当Master未签署此节点证书时, puppet agent将等待签署, 并默认每2分钟重新连接Master以确认是否完成签署puppet agent最常见的法是使"--noop"参数, 此法可以于检测Puppet配置, 运catalog但不 执配置, 相当于试运模式。
3、puppet apply
puppet apply是Puppet运命令, 主要在检测manifests时或在没有络连接的情况下使。 不同于 puppet agent, puppet apply在运时不会连接Master。
puppet apply的法为: puppet apply [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose] [-e|--execute] [--detailed-exitcodes] [-l|--logdest <file>] [--noop][--catalog <catalog>] <file> puppet apply命令参数详解如下: * --debug: #启完整的调试模式 * --detailed-exitcodes: #提供详细的退出代码 * --help: #帮助 * --loadclasses: #加载任何已保存类 * --logdest: #志送发式, 默认采syslog配置 * --noop: #使'noop'模式, Puppet运Catalog, 但Catalog并不效 * --execute: #执命令中指定的Puppet代码 * --verbose: #显详细信息 * --catalog: #运puppet master采--compile输出JSON代码puppet apply的法较多, 常见的法可参考如下实例。
实例 将输出信息输出到志件, 代码如下:
$ puppet apply -l /tmp/init.log init.pp $ more /tmp/init.log Wed Nov 14 08:29:18 +0800 2012 Puppet (notice): Finished catalog run in 0.04 seconds实例 在客户端运命令, 加载个类。 我们先创建个test类, 这个类的作是在/tmp中创建 个内容为"Hello World!"的主机名件。 配置代码如下:
$ sudo mkdir -p /etc/puppet/modules/test/manifests $ vim /etc/puppet/modules/test/manifests/init.pp class test { file { "/tmp/$hostname.txt": content => "Hello World!"; } }执命令后可以看到如下效果:
$ sudo puppet apply -e "include test" --noop /Stage[main]/Test/File[/tmp/puppet.txt]/ensure: current_value absent, should be file (noop) Class[Test]: Would have triggered 'refresh' from 1 events Stage[main]: Would have triggered 'refresh' from 1 events Finished catalog run in 0.04 seconds去掉noop参数后可以看到执成功, 件已经被创建, 具体如下:
$ more /tmp/puppet.txt Hello World!实例三 使apply运master编译好的JSON件。 需要在服务端使compile参数成JSON件 再传客户端执。
1) 先修改test类的内容, 将"Hello World!"修改为"Testing JSON!":
$ vim /etc/puppet/modules/test/manifests/init.pp class test { file { "/tmp/$hostname.txt": content => "Testing JSON!"; } }2) 使compile参数成JSON件, 代码如下:
$ puppet master --compile agent.domain.com>agent.domain.com.json3) 将成的agent.domain.com.json件复制到客户端, 使apply命令运:
$ puppet apply --catalog agent.domain.com.json /Stage[main]/Test/File[/tmp/agent.txt]/content: content changed '{md5}ed076287532e86365e841e92bfc50d8c' to '{md5}e93a2e71f065e0326a393570ec246d4e' Finished catalog run in 0.05 seconds通过以上三个步骤后可以看到件发了变化, 在前代码中也看到件的MD5发了改变, 具 体如下:
$ more /tmp/agent.txt Testing JSON!如果需要在manifests中需要调客户端的fact时, 要在客户端先执次puppet命令, 将所有的 Fact信息上传Master并缓存, puppet master --compile host会使本地缓存的Fact信息。 成的Catalog静态JSON件不再发变化, 且fact变量也是固定的, 不再随客户端的环境变化变化。
4、puppet cert
puppet cert于管理本地证书、 查看未签名证书、 签署证书、 废除证书、 清除证书。 puppet cert <action> [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose] [--digest <digest>] [<host>] puppet cert最常的操作有: * clean #清除, 于清除证书 * fingerprint #打印证书指纹 * generate #成客户端证书 * list #查看认证客户列表 * print #打印主机证书的全信息 * revoke #废除已认证的主机 * sign #签署认证 * verify #验证本地指定的认证 puppet cert命令参数详解如下: * --all #执所有操作, 包括'sign','clean','list','fingerprint' * --digest #设置证书指纹加密的式, 取决于openssl版本 * --debug #启完整的调试模式 * --help #查看帮助 * --verbose #显详细信息 * --version #显版本puppet cert最常见法是查看未签署的客户端和颁发认证。
1) 查看请求认证的客户端列表, 代码如下:
$ sudo puppet cert list agent.domain.com2) 为主机agent.domain.com签署认证, 代码如下:
$ sudo puppet cert sign agent.domain.com3) 列出所有签名和未签名的证书, 代码如下:
$ sudo puppet cert list --all + agent.example.com #符号+表已经签署过认证 agent2.example.com4) 给所有未签署签名认证的请求颁发认证, 值得注意的是这不需要再指定节点名, 代码如下:
$ sudo puppet cert sign --all5) 查看所有已签署认证的客户端列表, 代码如下:
$ puppet cert list --all5、puppet kick
puppet kick于连接到Agent客户端让它主动运puppet agent--test命令, 类似于主动触发配置。 puppet kick的最常见法是指定个类主机或组主机。 也可以通过"LDAP"查找所有匹配的主机, 然后连接到每个主机, 并触发所有对象使指定的标记执puppet命令。 当然我们也可以指定匹配主机只 运带"tag"标记的类 。
要使puppet kick需要做如下配置:
1) 设置Puppet Agent所有节点的/etc/puppet/puppet.conf在〔 agent〕 字段增加"listen=true"。
2) 设置Puppet Agent所有节点防墙, 允许8139端。
3) 设置Puppet Agent所有节点/etc/puppet/auth.conf插如下配置:
# Allow puppet kick access path /run method save auth any allow puppet-master.domain.compuppet kick命令的使法如下:
puppet kick [-a|--all] [-c|--class <class>] [-d|--debug] [-f|--foreground] [-h|--help] [--host <host>] [--no-fqdn] [--ignoreschedules] [-t|--tag <tag>] [--test] [-p|--ping] <host> [<host> […]] puppet kick命令的参数详解如下: * --all: #指定所有主机, 常选项 * --class: #指定类 * --debug: #启完整的调试模式 * --foreground: #直到主机运时才返回, 默认是false * --help: #查看帮助 * --host: #指定主机, 常选项 * --ignoreschedules: #客户端忽略计划任务, 但会影响效率, 默认为false 此参数前存在失效的Bug * --parallel: #并发连接, 提效率, 但会导致Master压增 * --tag: #指定标签 * --test: #测试 * --ping: #对目标主机做ICMP echo, 跳过不响应的主机注意 :all/class/test参数需要在LDAP环境下才可以使。
在紧急情况下我们需要指定客户端或所有客户端主动向Master请求更新。 为了避免量客户端同时 发起请求, 可以分批指定, 或者只指定特定的资源进更新。
1) 指定主机名进puppet kick操作, 代码如下:
$ sudo puppet kick -p 10 host1 host22) 指定所有主机名进puppet kick操作, 代码如下:
$ sudo puppet kick -p 10 --all3) 指定标签时要使tag参数, 且需要在配置资源的时候配置tags参数, 代码如下:
$ vim init.pp class test { file { "/tmp/$hostname.txt": content => "Testing JSON!", tags => "tagkick", } }在执puppet kick时使如下命令:
$ sudo puppet kick -p 10 –t tagkick host1 host2注意 :tag参数与test不能同时使。
6、puppet describe
puppet describe提供Puppet资源的类型、 providers和metaparameters的帮助。
puppet describe命令使法如下:
puppet describe [-h|--help] [-s|--short] [-p|--providers] [-l|--list] [-m|--meta puppet describe命令参数详解如下: * --help: #查看帮助 * --providers: #列出类型详细说明 * --list: #列出所有类型 * --meta: #列出所有metaparameters * --short: #仅列出参数, 不显细节puppet describe命令的常见法如下。
1) 查看所有的资源类型, 代码如下:
$ puppet describe ––list2) 列出File资源的providers, 代码如下:
$ puppet describe file ––providers3) 要显户资源的信息不是详细信息, 可使如下命令:
$ puppet describe user -s -m7、puppet resource
puppet resource于提供个简单的具, 将系统资源转换成Puppet代码。
puppet resource命令的法如下:
puppet resource [-h|--help] [-d|--debug] [-v|--verbose] [-e|--edit] [-H|--host <host>] [-p|--param <parameter>] [-t|--types] <type> [<name>] [<attribute>=<value> …] puppet resource命令参数详解如下: * --debug: #启完整的调试模式 * --edit: #将查询结果写件 * --host: #指定要查询的主机 * --help: #显帮助 * --param: #添加更多参数进查询 * --types: #显所有类型信息 * --verbose: #打印详细信息puppet resource命令的常见法如下:
1) 采puppet resource将本地户liuyu的相关信息转换成Puppet代码, 代码如下:
$ sudo puppet resource user liuyu user { 'liuyu': ensure => 'present', gid => '527', home => '/usr/home/liuyu', password => '*', password_max_age => '99999', password_min_age => '0', shell => '/bin/bash', uid => '527', }2) 将本地Puppet安装包信息转换成Puppet代码, 代码如下:
$ sudo puppet resource package puppet package { 'puppet': ensure => '3.0.1-1.el6', }
相关文章推荐
- 在Puppet中用ERB模板来自动配置Nginx虚拟主机
- 用puppet快速部署openstack
- Puppet 安装配置
- puppet资源file详细介绍(附案例)
- puppet资源yumrepo详细介绍(附案例)
- puppet资源exec详细介绍(附案例)
- puppet资源service详细介绍(附案例)
- Puppet基础篇7-编写第一个完整测试模块puppet
- Puppet错误及解决方法(三)
- 在centos中安装puppet和安装过程的一些错误解决
- puppet学习笔记
- Puppet 的错误
- puppet集群部署
- 【puppet 基础导读】
- 运维自动化之puppet
- 服务器集中管理工具puppet
- Puppet3在CentOS6.5集群下的安装
- CentOS下部署puppet-dashboard(nginx + passenger启动)
- puppet小测试
- 在 CentOS 6.2 上安装 Puppet 配置管理工具