推荐-运维学习笔记-Puppet应用配置的工作原理

背景知识


Puppet的核心功能是配置管理。一般来说,用户在master上集中做配置,同时,被管理节点上的agent会定期从master上下载配置数据,再应用(apply)到本地,从而使管理节点的状态(用户,组,文件,安装包,服务等的设置和运行状态)与masters上定义的保持一致。

有时,出于测试的目的,并不希望真的应用配置,那么就需要执行puppet agent –test –noop让agent运行在dry-run状态

触发条件


在无master模式下(masterless),可以运行puppet agent apply <manifest文件路径> 命令直接加载本地manifest,并应用到本地。这种方式一般只用于测试,生产环境大都使用agent/master模式。

在agent/master模式下,agent默认每30分钟自动触发一次。也就是说在master上做的任何更改可能要过30分钟才能在agent端生效。如果你想改变这个时间间隔,可以通过在agent上修改puppet.conf的runinterval属性

 或者使用splay属性

在agent/master模式下,还可以从master上运行puppet kick命令主动触发。为了使用这个功能,需要做以下配置。

1  在agent的puppet.conf中打开listen属性或者运行puppet agent –listen,然后agent就会在8139端口监听master发过来的指令。

注意:如果agent节点有防火墙,打开8139端口

2  然后在master上运行puppet agent <agent节点FQDN>触发一次新的配置应用。


工作流程


flow.jpg

1. agent向master发起连接,并使用SSL证书相互认证身份。如果agent是第一次连接master,agent会生成私钥,下载CA证书的副本,提交证书申请,然后等待一个超时(waitforcert)。如果master在这个时间内签发了agent的证书,agent会下载证书,继续后面步骤。

2. 如果pluginsync是true,agent从master下载plugin

3. agent向master请求catalog,同时向master发送fact(软件及硬件信息,比如hostname, ip).然后等待catalog生成。

4. master使用site.pp(4的左侧部分)或者ENC(4的右侧部分)进行节点分类,获取agent节点所需的配置。然后使用一些agent/master提供的变量,比如factsenvironement还有内部变量,编译相关manifest生成catalog

5. agent从master下载catalog,然后应用到本地。

6. 如果catalog中使用了mount point,比如"source=>"puppet:///abc",agent会在应用过程中访问master的相关URI(/file_metadata/和/file_content/)下载文件内容并应用到本地

7. agent将应用结果生成report,发送给master

8. 结束本次应用,agent等待下一次。

注意:在以上agent/master的通讯过程中,都是agent主动调用master上暴露出来的RESTful API并将数据“拉”到本地,master并不主动向agent发送任信息。

下面我们来看看上边步骤中涉及到的各种功能和配置

SSL证书及认证


证书相关的属性可以在agent/master的puppet.conf里配置

注意:agent需要对master URI(/certificate/,/certificate/ca和/certificate_request)有相应权限,以读取CA证书,提交证书申请和下载签发的证书。权限设置在auth.conf中。 默认是所有agent对这些URI都有权限。

证书及相关文件存在下面的目录中(在线文档)

也可以通过下面的命令查看/签发/撤销/清除证书,细节请看在线文档

如果证书被意外清除或者撤销,可以重新生成,细节请看在线文档

1 在master上清除证书记录和相关物理文件

2 停止agent进程,例如

3 在agent节点上找到证书目录(默认是/var/lib/puppet/ssl)

4 在agent节点上手工删除$ssldir目录

5 在agent节点重新启动agent,这一过程会自动提交证书申请

6 在master上签署证书

如果有很多管理节点,也可以使用autosign来自动签发证书,细节请看在线文档

1 在master上修改puppet.conf

2 在master上修改/etc/puppet/autosign.conf,创建白名单

Plugin(在线文档


plugin可以让用户扩展或者自定义的一些功能,比如fact,resource type,provider。plugin用Ruby编写,随module保存和发布,可供同一module中其他代码调用。

在agent端的puppet.conf中,当pluginsync=true 的时候,agent会在每次检查时自动下载master上的所有plugin。

注意:agent需要对master URI(/file_metadata和/file_content)有读权限,以下载plugin文件。权限设置在auth.conf中。默认是所有agent对这些URI都有所需权限。

plugin的目录结构如下

Facts在线文档


facts是指节点上的一系列系统信息,比如hostname, IP。这些信息可以被manifest或者template使用,用来做系统相关的判断或配置。

使用facts一个途径是安装facter包,可以通过系统的包管理器软件安装,比如在Redhat Linux上, 运行"yum install facter"。此外,也可以通过plugin创建定制的facts

如果想了解facter可以返回哪些facts,运行"facter -p" 或者参考在线文档

在Puppet语言中,facts是处于top-scope,可以被所有manifest使用

内置变量(在线文档


agent提供的变量

master提供的变量

在Puppet语言中,这些变量都是是处于top-scope,可以被所有manifest使用

Environment


Puppet可以同时管理多个相互隔离的环境,比如production, testing, development,并为它们提供不同的配置。这个功能可以通过定义environment来实现。

注意:Puppet默认运行在production environment中,不需要特别设置。

最新的Puppet版本中使用directory environment,也就是为每个environment设置不同的目录将他们的manifest文件隔离开。

1  在master的puppet.conf里进行以下设置,细节请看在线文档

2  在master上为每个environment创建目录,细节请看在线文档

3  在agent的puppet.conf里设置

4 重新启动agent

节点分类(node classification)


生成catalog的第一步是必须找到agent节点的配置里使用了哪些class和resource。这个过程称为节点分类(node classification)。

默认的方式使用site.pp中的静态配置,其默认路径是/etc/puppet/manifests/. 如果environment被设置了,请查看enviornment相关设置来确定site.pp位置

另一种方式是使用ENC(External Node classifier)。这种方式提供一个外部的数据源来存储节点定义,例如PuppetDashBoardThe Foreman and PuppetEnterprise。同时,它会提供一个程序。master可以调用这个程序并输入节点FQDN名作为参数,然后这个程序会返回一个YAML格式的文件,其中包含节点需要使用的class和resource。这个程序可以是由任何语言编写。

使用这个功能,需要在master的puppet.conf里进行配置

Catalog


每个catalog就是一个节点的所有配置信息的集合,包含这个节点所分配的所有class, resource,file等等。catalog由master编译manifest而成,并由agent在目标节点上应用。

catalog本身是一个JSON格式的文件,在agent上保存在/var/lib/puppet/client_data/catalog/$certname.json

在master上,manifest以module的方式组织保存,其目录结构如下。详情请见在线文档

Mount Point


在使用file resource的source属性时,需要指定源文件的路径。这个源文件所在目录就是mount point。

如果源文件不在module的files子目录下,就需要手工配置

1 在master的fileserver.conf设置mount point,具体设置请看在线文档

2  如果想进行更小粒度的ACL控制,需要在master上设置auth.conf。具体设置请看在线文档

3  因为master一般是以puppet用户运行,所以puppet用户对/tmp/mydir必须至少有读权限,可以用Linux命令chmod或者chown来设置。


原创文章,作者:MVP,如若转载,请注明出处:/17052

评论列表(2条)

  • stanley
    stanley 2016-06-01 15:38

    写的非常不错。赞

  • MVP
    MVP 2016-06-01 17:06

    呵呵,puppet kick有个地方写错了,再第2步里面,不是“puppet agent ”,而应该是“ puppet kick ”,细节请大家看”puppet help kick”或者是在线文档吧,请多包涵

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐开户  万达娱乐注册  测试  万达招商QQ  万达直属  万达娱乐招商  万达娱乐主管  万达主管  万达娱乐开户  万达注册