Puppet是开源的基于Ruby的系统配置管理工具,依赖于C/S的部署架构。主要开发者是Luke Kanies,遵循GPLv2版权协议。从1997年开始Kanies参与UNIX的系统管理工做,Puppet的开发源于这些经验。由于对已有的配置工具不甚满意,从2001年到2005年间,Kanies开始在Reductive实验室从事工具的开发。很快,Reductive实验室发布了他们的旗舰产品——Puppet。它使用简单且功能强大,正获得了愈来愈多地关注,如今不少大型IT公司均在使用puppet对集群中的软件进行管理和部署缓存
一. Puppet的介绍服务器
1. Puppet的用途架构
Puppet能够用来管理UNIX(包括OSX)和Linux平台,而且最近又添加了针对Microsoft Windows的支持。Puppet一般能够用来管理一台主机的整个生命周期:从初始化到安装、升级、维护以及最后将服务迁移并下架。Puppet被设计为可以持续与主机进行交互,而不是仅仅提供一个只负责搭建主机却并无论理它们的工具。
并发
官方的定义是这样的:Puppet是一个开源的新一代的集中化配置管理工具,它由本身所声明的语言表达系统配置,经过客户端与服务端之间的链接,维护着关系库。Puppet的设计目标是让Puppet成为一个由富有表现力的语言支撑的足够强大的库。这样只须要编写短短的几行代码的自动化应用程序便可实现设计目标。同时Puppet是开放的,容许添加任何新的功能。
less
一般这样定义:Puppet是一个跨平台的集中化配置管理系统,它使用自有的描述语言,可管理配置文件、用户、Cron、软件包,系统服务等,Puppet把这些统称为“资源”。Puppet的设计目标就是简化对这些资源的管理以及妥善处理资源之间的依赖关系。ide
2. Pupput的特性工具
许多系统配置管理工具工做的方式很是相似,如cfengine。是什么让Puppet不同凡响?Puppet的语法容许你建立一个单独脚本,用来在你全部的目标主机上创建一个用户。全部的目标主机会依次使用适用于本地系统的语法解释和执行这个模块。举例:若是这个配置是在Red Hat服务器上执行,创建用户使用useradd命令;若是这个配置是在FreeBSD主机上执行,使用的是adduser命令。Puppet另外一个卓越的地方是它的灵活性。源于开源软件的天性,你能够自由的得到Puppet的源码,若是你遇到问题而且有能力的话,你能够修改或者增强Puppet的代码去适用于你的环境。另外,社区开发者和捐献者还在不断加强Puppet的功能。一个大的开发者和用户社区也致力于提供Puppet的文档和技术支持。性能
Puppet也是易于扩展的。定制软件包的支持功能和特殊的系统环境配置可以快速简单的添加进Puppet的安装程序中。加密
3. 关于Puppet的版本spa
Puppet版本众多,通常而言Puppet的最佳版本一般都是最新的版本,如: 0.24.x 0.25.x 2.6.x 2.7.x 3.x 4.x 固然,版本越高,支持的特征越多,因为Puppet 0.2x支持的特性很是少,不建议再安装使用它。对于正在使用此版本的用户,建议升级成最新版。对于新用户,建议直接安装Puppet 3.0版本。对于正在使用Puppet 2.6或2.7的用户,建设逐步升级,且先升级Master,而后再升级Agent,平滑过渡,以免遇到不可预知的问题。目前Puppet最新版为4.0,其中增添了许多新特性:
1. 性能提高:目录编译采用JSON做为目录缓存。
2. 加强操做系统与平台支持:对Ruby1.9的完美支持,对操做系统Windows、Solaris包和服务的更多支持,Yumrepo对SSL的支持。
3. 使用Rubygems加载插件:能够经过Rubygems来安装和使用Puppet的扩展代码。
4. Server自动发现:经过DNS SRV寻找CA、Master、Report和Fileserver。
5. DSL/config变化:auth.conf增长allow_ip配置选项,unless支持,插件同步默认改成True,更新configure的语法。
6. 其余BUG的修复:修复了3.0 Agent 与2.7Master工做的问题、kick没法工做问题、rack安装启动出错问题等。
注意:Puppet 3.x 4.x将再也不支持Ruby 1.8.5如下版本。提示:更多Puppet版本信息可参考: http://projects.puppetlabs.com/projects/1/wiki/Release_Notes)
5. Puppet的工做模式
Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称做Puppet master)。在须要管理的目标主机上安装puppet客户端软件(被称做Puppet agent)。
当客户端链接上Puppet master后,定义在Puppet master上的配置文件会被编译,而后在客户端上运行。每一个客户端默认每半个小时和服务器进行一次通讯,确认配置信息的更新状况。若是有新的配置信息或者配置信息已经改变,配置将会被从新编译并发布到各客户端执行。也能够在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。若是客户端的配置信息被改变了,它能够从服务器得到原始配置进行校订。
Puppet拥有一个简单而且容易理解和实施的操做模型。这个模型由三部分组成:1.部署; 2.配置语言资源抽象层; 3.事务层,以下图所示:
1.1.1 部署
Puppet一般使用简单的客户端-服务端模型进行部署。服务端被称为"Puppet master",客户端软件被称为agent,主机自己则被定义为一个节点。以下图:
Puppet master在一台主机上以守护进程的方式运行,它包含了环境所需的全部配置。Puppet agent则经过一个使用标准SSL协议进行加密和验证的链接与Puppet master进行通讯,而后接收或者"拉取"须要被应用的配置。很重要的一点是,Puppet agent在已经得到了须要的配置或者没有任何能够被应用的配置时不会作任何事情。这意味着Puppet只会在须要时对你的环境做出变动。这整个过程被称为一次配置运行。
每个客户端既能够经过守护进程的方式来运行Puppet(好比使用cron),也能够手动启动。一般的作法是以守护进程的方式运行Puppet,并周期性地与master进行通讯,以此来保证配置已经更新到最新而且能及时接收新的配置。不过,也有不少人以为使用cron或者手动运行Puppet更符合他们的需求。
在默认状况下,Puppet agent会每30分钟与master进行一次通讯,检查新添加的或者已改变的配置。你能够自行设定这个周期来适应你的环境。固然也存在其余部署模型。好比,Puppet也能抛开Puppet master以独立方式运行。在这种模式下,配置放置在被管理的主机上,而后经过手动运行puppet程序来执行和应用这些配置。咱们将在稍后讨论这种模式。
关于puppet的配置语言和资源抽象层会在puppet入门与掌握之puppet介绍2介绍到。