在使用任何软件前我们都需要了解其工作原理,否则会给后续使用带来诸多不便。Puppet采用了非常简单的C/S架构,所有数据的交互都通过SSL进行,以保证安全。它的工作流程如图1所示。
1. 客户端Puppetd向Master发起认证请求,或使用带签名的证书。
2. Master告诉Client你是合法的。
3. 客户端Puppetd调用Facter,Facter探测出主机的一些变量,例如主机名、内存大小、IP地址等。Puppetd将这些信息通过SSL连接发送到服务器端。
4. 服务器端的Puppet Master检测客户端的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。Facter送过来的信息可以作为变量处 理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法没错,就继续解析,解析的结 果生成一个中间的“伪代码”(catelog),然后把伪代码发给客户端。
5. 客户端接收到“伪代码”,并且执行。
6. 客户端在执行时判断有没有File文件,如果有,则向fileserver发起请求。
7. 客户端判断有没有配置Report,如果已配置,则把执行结果发送给服务器。
8. 服务器端把客户端的执行结果写入日志,并发送给报告系统。
这就是puppet的工作流程。最重要的莫过于puppet-master来管理node的配置文件。
在学习puppet的过程中,资料中会反复提到module,class,resource等关键字。下面我们就来说说他们之间的关系。
module:模块,不同的模块实现不同的功能。
class:可以理解为类,模块是由类组成的,模块中包含一个类或者多个类
resource:资源,我个人理解为时puppet的管理配置文件的最小组成单元,同理,类是由一个或多个资源组成的。这些资源可以是文件(file),用户(user),组(group),服务(service),软件(package)等等。后面的文章我们会继续介绍resource的详细情况。
本文出自 “linux菜鸟” 博客,转载请与作者联系!