自动化运维工具puppet(五)

一、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模块的配置主要是配置件、 应程序及系 统底层相关。 配置完成后发送给报告系统。

wKioL1YT3_2zEh6AAAG5e29Meec276.jpg

3、Puppet是如何作的

接着我们来看下Puppet是如何作的。 简单来说分4步进。

1) 定义: 使Puppet特定的语定义基础配置信息。 通常我们把这些信息写在Modules中。

2) 模拟: 在配 置执之前检测代码。 并不真正执。 

3) 执: 按 1) 步定义的配置动部署。 检测并记录下所发变化的部分。 

4) 报告: 将期 待的变化与实际发 的变化及任何修改发送给报告系统。 整个作过程如下图所。

wKiom1YT4AujzQRjAAC9ST71O0M153.jpg


4、Puppet数据 

1) Node节点将Facts和本机信息发送给Master。

2) Master告诉Note节点应该如何配置, 将这些信息写catalog后传给Node。

3) Node节点在本机进代码解析验证并执, 将结果反馈给Master。

4) Master通过API将数据发给分析具。 报告完全可以通过开放API或与其他系统集成。

整个数据流的向是基于ssl安全协议的, 如下图所。

wKioL1YT4DaToox5AAFLiQWVBHg127.jpg


5、件结合

 那么结合数据流, 这些 录的关系是如何关联起来的呢? 

1) Puppet通过编译Manifest中的内容, 将编译好的代码存catelog。

2) 在执前先进代码的验证, 再执, 完成最开始所定义好的状态。

代码编译过程如下图所。

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。

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.com
  • Puppet 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: [email protected]
webserver, !mailserver: [email protected]
emerg, crit: [email protected][email protected][email protected]

#志的级别可以是: 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种环境如下图所:

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.com

3) 修改配置后需要重启Puppet服务以启新的配置。 部分系统使init脚本来完成这任务, 代 码如下: 

/etc/init.d/puppetmaster restart

2、客户端配置

   在Puppet Master服务器配置好环境后, 我们可以在客户端进指定。 通常有两种做法, 是修改 Puppet配置件, 是在运时增加环境参数。 如果希望此节点长期以某种环境运, 建议将环境配置写配置件。 我们来看下这两种配置法。 

1) 修改Puppet agent配置件puppet.conf, 指定运环境为测试环境。 代码如下:

$ sudo vim /etc/puppet/puppet.conf
[agent]
environment = testing

2) 在命令使运环境, 使environment命令参数即可。 代码如下:

$ puppet agent --test --noop --environment [development,testing, production]

3、如何运环境配置

   我们在Puppet中已经配置好了各环境, 要如何运呢? 这个时候就需要强的版本控制软件。 通过 版本控制软件配置不同的分来实现不同环境配置的管理, 客户端采在命令下应多种环境的法 执。本章以Git操作创建Testing分的式讲解Puppet多环境的应法。 实现原理如下图所。

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命令不是很多, 按照功能的不同可以分为如下图所的类。 本节将对实 命令进介绍说明, 并对常命令进深详细讲解。

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.conf

puppet master命令最常见的法就是让Puppet以不启后台守护进程的式运, 于调试Puppet

代码, 法如下:

$ sudo puppet master --no-daemonize --verbose

2、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.json

3) 将成的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.com

2) 为主机agent.domain.com签署认证, 代码如下:

$ sudo puppet cert sign agent.domain.com

3) 列出所有签名和未签名的证书, 代码如下:

$ sudo puppet cert list --all
+ agent.example.com #符号+表已经签署过认证
agent2.example.com

4) 给所有未签署签名认证的请求颁发认证, 值得注意的是这不需要再指定节点名, 代码如下:

$ sudo puppet cert sign --all

5) 查看所有已签署认证的客户端列表, 代码如下:

$ puppet cert list --all

5、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.com

puppet 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 host2

2) 指定所有主机名进puppet kick操作, 代码如下:

$ sudo puppet kick -p 10 --all

3) 指定标签时要使tag参数, 且需要在配置资源的时候配置tags参数, 代码如下:

$ vim init.pp
class test {
file { "/tmp/$hostname.txt":
content => "Testing JSON!",
tags => "tagkick",
}
}

在执puppet kick时使如下命令:

$ sudo puppet kick -p 10 �Ct 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 �C�Clist

2) 列出File资源的providers, 代码如下:

$ puppet describe file �C�Cproviders

3) 要显户资源的信息不是详细信息, 可使如下命令:

$ puppet describe user -s -m

7、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)