Puppet生产中常用的就是C/S架构./etc/puppet/manifests/site.pp文件是puppet站点导航文件,Agent访问Master的一切配置管理工作都有site.pp文件开始,site.pp文件作用是让Master载入并寻找Agent的配置信息.site.pp文件默认在/etc/puppet/manifests/目录中.
manifests是puppet的资源清单目录,puppet的所有资源配置文件都以*.pp文件作为扩展名.manifests和site.pp文件的路径可以在/etc/puppet.conf文件中的[master]段修改,通过修改puppet.conf中的manifestdir来修改manifest的资源文件目录,修改manifest值来改变更新puppet入口导航文件.
默认master启动会监听8140端口,agent监听8139端口.
1
2
3
<code>[root@puppet manifests]</code><code># ss -antlp | grep puppet</code>
<code>LISTEN 0 5 *:8139 *:* </code><code>users</code><code>:((</code><code>"puppet"</code><code>,31325,5))</code>
<code>LISTEN 0 5 *:8140 *:* </code><code>users</code><code>:((</code><code>"puppet"</code><code>,32174,5))</code>
puppet的日志输出路径默认为系统的syslog.
4
5
6
7
8
9
10
11
<code>[root@puppet manifests]</code><code># tail -f /var/log/messages</code>
<code>Sep 13 23:38:58 puppet puppet-master[34213]: Starting Puppet master version 3.8.7</code>
<code>Sep 13 23:39:04 puppet puppet-agent[31325]: Caught TERM; exiting</code>
<code>Sep 13 23:39:04 puppet puppet-agent[34266]: Reopening log files</code>
<code>Sep 13 23:39:05 puppet puppet-agent[34266]: Puppet --listen / kick is deprecated. See http:</code><code>//links</code><code>.puppetlabs.com</code><code>/puppet-kick-deprecation</code>
<code>Sep 13 23:39:05 puppet puppet-agent[34266]: Starting Puppet client version 3.8.7</code>
<code>Sep 13 23:39:06 puppet puppet-master[34213]: Compiled catalog </code><code>for</code> <code>puppet.localdomain </code><code>in</code> <code>environment production </code><code>in</code> <code>0.03 seconds</code>
<code>Sep 13 23:39:06 puppet puppet-agent[34270]: hello world</code>
<code>Sep 13 23:39:06 puppet puppet-agent[34270]: (</code><code>/Stage</code><code>[main]</code><code>/Main/Notify</code><code>[hello world]</code><code>/message</code><code>) defined </code><code>'message'</code> <code>as </code><code>'hello world'</code>
<code>Sep 13 23:39:06 puppet puppet-agent[34270]: Finished catalog run </code><code>in</code> <code>0.01 seconds</code>
<code>Sep 13 23:39:06 puppet puppet-master[34213]: Report processor failed: Connection refused - connect(2)</code>
通常master也不是随便一台机器就可以连接的,一般都会配火墙规则(下面是举例,真实环境具体对待).
<code># iptables -A INPUT -p icmp</code>
<code># iptables -A INPUT -i lo -j ACCEPT</code>
<code># iptables -A INPUT -d 192.168.30.134 -p tcp -m multiport --dports 80,443,8139,8140 -j ACCEPT</code>
<code># iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</code>
<code># iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT</code>
默认安装完puppetmaster是不存在site.pp文件,手动创建site.pp文件(安装篇已经将puppet和svn结合,所以在win客户端操作svn创建):
<a href="https://s1.51cto.com/wyfs02/M01/A5/52/wKioL1m7Ze2wxKzOAAE_Q7Nz9RI726.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M02/06/A2/wKiom1m7ZibjNaXmAAGX7Cp1zog186.png" target="_blank"></a>
注意:如果使用svn托管了puppet代码,中途直接在服务器写代码会导致svn版本库冲突.
报错如下:
<code>svn: URL </code><code>'svn://192.168.30.134/modules/test'</code> <code>of existing directory </code><code>'/etc/puppet/modules/apache'</code> <code>does not match expected URL </code><code>'svn://192.168.30.134/modules/apache'</code>
解决:登陆puppet master服务器,rm -rf /etc/puppet/*,重新从svn check即可.
操作如下:
12
13
14
15
16
17
18
19
20
<code>[root@puppet puppet]</code><code># rm -rf *</code>
<code>[root@puppet puppet]</code><code># ls</code>
<code>[root@puppet puppet]</code><code># svn checkout svn://192.168.30.134 /etc/puppet/</code>
<code>Restored </code><code>'/etc/puppet/puppet.conf'</code>
<code>Restored </code><code>'/etc/puppet/namespaceauth.conf'</code>
<code>Restored </code><code>'/etc/puppet/auth.conf'</code>
<code>Restored </code><code>'/etc/puppet/fileserver.conf'</code>
<code>Restored </code><code>'/etc/puppet/autosign.conf'</code>
<code>A </code><code>/etc/puppet/modules</code>
<code>A </code><code>/etc/puppet/modules/test</code>
<code>A </code><code>/etc/puppet/modules/apache</code>
<code>A </code><code>/etc/puppet/modules/apache/files</code>
<code>A </code><code>/etc/puppet/modules/apache/lib</code>
<code>A </code><code>/etc/puppet/modules/apache/manifests</code>
<code>A </code><code>/etc/puppet/modules/apache/manifests/init</code><code>.pp</code>
<code>A </code><code>/etc/puppet/modules/apache/templates</code>
<code>A </code><code>/etc/puppet/manifests</code>
<code>A </code><code>/etc/puppet/manifests/site</code><code>.pp</code>
<code>A </code><code>/etc/puppet/manifests/nodes</code><code>.pp</code>
<code>Checked out revision 64.</code>
测试puppet代码:
puppet notify指令和shell中的echo指令相似,之前的文章介绍过,很多puppet功能测试都会选择notify指令.
测试节点sh-proxy2更新:
<code>[root@sh-proxy2 ~]</code><code># puppet agent -t</code>
<code>Info: Retrieving pluginfacts</code>
<code>Info: Retrieving plugin</code>
<code>Info: Caching catalog </code><code>for</code> <code>sh-proxy2.localdomain</code>
<code>Info: Applying configuration version </code><code>'1505315382'</code>
<code>Notice: hello world</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Notify</code><code>[hello world]</code><code>/message</code><code>: defined </code><code>'message'</code> <code>as </code><code>'hello world'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.02 seconds</code>
测试节点sh-web1更新:
<code>[root@sh-web1 ~]</code><code># puppet agent -t</code>
<code>Notice: Ignoring --listen on onetime run</code>
<code>Info: Caching catalog </code><code>for</code> <code>sh-web1.localdomain</code>
举例:(多节点匹配操作)
新建模块apache
<code>cd</code> <code>/etc/puppet/modules</code>
<code># mkdir apache/{templates,files,lib,manifests}</code>
模块清单文件说明:
uppet模块,模块名称只能使用小写字母开头,可以包含小写字母、数字、下划线,但不能使用"main"或"settings"。
modules/apache/
files 文件存储目录
httpd.conf puppet:///modules/Module_name/module_file
templates: 模板目录,访问路径template("modulename/Tomplatename")
*.erp
manifests: 清单目录
init.pp 必须包含且只能包含一个与模块同名的类
httpd.pp 每个清单文件通常只包含一个类,类名不可以与模块重名,除模块名外可以随意命名
lib :ruby插件存储目录,用于实现一些自定义的功能
示例:
安装apache软件httpd的init.pp文件.
<code>class apache ($sta = </code><code>"present"</code><code>) {</code>
<code> </code><code>package {</code><code>"httpd"</code><code>:</code>
<code> </code><code>ensure=> $sta,</code>
<code> </code><code>}</code>
<code>}</code>
文件路径即代码如图:
<a href="https://s1.51cto.com/wyfs02/M02/A5/52/wKioL1m7Z-KwOF7UAAFuWV_tBg4623.png" target="_blank"></a>
文件说明:
site.pp文件和nodes.pp文件.
site.pp文件为agent访问master的导航入口文件(site.pp文件直接可以定义资源,class等,批量操作建议引入其他文件).
manifest 可以有多个,manifest之间可以相互调用使用import.
import :导入所有
如下:
import "nodes"
<a href="https://s3.51cto.com/wyfs02/M00/06/A2/wKiom1m7ZrTh4pCFAAE74HGKwOA576.png" target="_blank"></a>
nodes.pp文件作用匹配主机,主机管理文件.
模糊匹配:node /^sh-(web|proxy)\d+/
精确匹配:node "sh-proxy2"
如下:
<a href="https://s2.51cto.com/wyfs02/M02/A5/52/wKioL1m7ZqXBoEiEAAFr3Nvlfqs608.png" target="_blank"></a>
agent端更新操作测试:
<code>[root@sh-proxy2 puppet]</code><code># puppet agent -t</code>
<code>Info: Applying configuration version </code><code>'1505376917'</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Apache/Package</code><code>[httpd]</code><code>/ensure</code><code>: created</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>7.14 seconds</code>
本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1965551