`

[转]什么是puppet

阅读更多
puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.
外文名
puppet
性    质
集中配置管理系统
特    点
使用自有的puppet描述语言
设计目标
简化对这些资源的管理

为什么要开发puppet编辑

系统管理员都喜欢自己写点小工具来让自己的工作完成的更快或者更好, 不管是在大企业管理大量的服务器还是只管理两三台机器. 但是很少人会把他们的工具发布出来. 也就是是说极少有工具能被重用,或者说很多工具就只能在所在的组织内部有用.拷贝给别的组织,他们也用不上. 也就是说,每个系统管理员,在一个新的公司,都会另起炉灶开发一套基于ssh,for循环的"系统"来帮助自己完成系统管理任务.
开发puppet是为了让系统管理员可以相互交流和共享成熟的工具,避免重复的劳动.通过以下两个特性来实现这一目标:
提供一个简洁的但是强大的框架来完成系统管理任务
系统管理任务可以描述成puppet语言,因此可以相互分享代码,就像分享其他语言的代码一样,比如python, c等
因此,作为系统管理员的你可以更快的完成工作,因为你可以用puppet来处理所有的管理细节. 甚至你还可以下载其他管理员的puppet代码来让你的工作完成的更快.

使用puppet 的稳定性编辑

puppet与其他手工操作工具有一个最大的区别就是 puppet的配置具有稳定性,因此你可以多次执行puppet, 一旦你更新了你的配置文件,puppet就会根据配置文件来更改你的机器配置,通常每30分钟检查一次. puppet会让你的系统状态同配置文件所要求的状态保持一致. 比如你配置文件里面要求ssh服务必须开启. 假如不小心ssh服务被关闭了,那么下一次执行puppet的时候,puppet会发现这个异常,然后会开启 ssh 服务. 以使系统状态和配置文件保持一致.puppet就象一个魔术师,会让你的混乱的系统收敛到puppet配置文件所想要的状态.
可以使用puppet管理服务器的整个生命周期,从初始化到退役.不同于传统的例如sun的Jumpstart或者redhat的Kickstart, puppet可以长年让服务器保持最新状态.只要一开始就正确的配置他们,然后再也不用去管他们.通常puppet用户只需要给机器安装好puppet并让他们运行,然后剩余的工作都由puppet来完成.

puppet的细节和原理编辑

puppet的目的是让你只集中于你要管理的目标,而忽略实现的细节,例如命令名,参数或者文件格式. puppet把系统里面的用户,软件包,服务 看作是"资源", puppet的作用就是管理这些资源以及资源之间的相互联系.
底层支撑工具 Providers,puppet有很多的资源类型,例如文件,用户,软件包,服务, 不同的操作系统上对资源的管理命令是不一样的,例如debian下面用apt-get安装软件,redhat下面用yum安装软件. 因此puppet 对同一资源的管理可以有多个实现,配置资源的时候,可以明确的指定用什么provider. 例如在redhat上配置一个package资源的时候,可以指定provider是yum.

Facter变量编辑

在puppet客户端分析代码的时候,会把从facter传送过来的对应的值赋值给变量. 你可以单独手工执行facter这个命令,这个命令会打印出它所收集到的关于主机的信息,例如ip地址等等. facter把收集到值发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件. 最重要的一个就是服务器的主机名.

工作方式与流程编辑

puppet既可以在单机上使用,也可以以c/s结构使用.在大规模使用puppet的情况下,通常使用c/s结构.在这种结构中puppet客户端只是指运行puppet的服务器,puppet服务器端是只运行puppetmaster的服务器.
puppet客户端首先会连接到puppet服务器端,并且通过facter工具把客户端的基本配置信息发送给服务器端. 服务器端通过分析客户端的主机名,通过node 定义,找到该主机的配置代码,然后编译配置代码,把编译好的配置代码发回客户端,客户端执行代码完成配置.并且把代码执行情况反馈给puppet服务器端.

修改系统配置编辑

puppet 通过管理资源的方式来管理系统, 例如管理某个软件是否要安装,是安装最新的还是安装了就行. 管理某个服务是否开启, 管理某个文件的属性,内容等等. 所有的资源都有对应的几个属性可以设置. 通过设置属性的方式来管理资源. 有一种特殊的属性可以用在所有的资源上面,这种属性叫做 metaparams ( 元参数或者元属性).

资源之间的关系编辑

支持资源之间的关系配置是puppet的关键特性之一. 一个资源的变更可以对另一个资源产生一个动作.例如 /etc/apache.conf这个资源有改动,可以让/etc/init.d/apache 这个资源 reload一下.假如一个资源依赖另一个资源,那么puppet会优先配置被依赖的资源,因此如果你的配置文件没有准备好,对应的服务是不会先启动的.

puppet 语言资源编辑

puppet的全部就是管理资源,因此puppet语言的焦点就是处理这些资源,下面是一个基本的管理单个资源的例子.
file {"/etc/hosts": owner = root, group = root, mode = 644}
上面的例子给出了定义一个资源所需要的所有组件,类型,名字和属性. 定义了一个 file 资源, 资源的title(标题)是 "/etc/hosts", 资源的属性里面设置了该文件属于哪个用户和组,以及文件的权限.
也可以在一个大括号里面定义多个资源,通过分号来区分.
避免重复配置
puppet的编译器会避免在不同的代码段里面管理同一个资源, 如果在不同的代码段对同一个资源进行配置,执行puppet的时候你会得到一个语法错误.puppet探测这种冲突的情况是通过判断资源类型和资源的title(标题); 如果两个资源有相同的资源类型和title; 那么就认为这两个资源是表示同一个资源.

编辑

你可以把多个相关的资源定义在一起,组成一个类.可以在其他的代码段include这个类.puppet还支持有限制的类的继承,作用就是在子类里面的属性可以覆盖父类里面的属性.

字符串编辑

几乎所有的东西和符号在puppet里面都被看作是字符串,包括数字和布尔值. 但是如果你用引号把true和false引起来,他们会被当做字符串,例如你想赋值给某个资性"yes"的 字符串.

变量编辑

puppet除facter变量外,也可以自定义变量,但不允许你在同一个类里面对一个变量进行两次赋值.
$myvar = value123

条件语句编辑

Puppet支持常见的条件语句,使得你能根据不同的条件导入不同的资源定义。如if、case、另外puppet从版本0.24.6开始支持比较运算符。

数组编辑

puppet 非常有限的支持数组这种类型,你可以创建数组,并且给他们赋值,但是你不能删除它们.数组用的最多的情况就是上面ssh例子里面,资源依赖哪种情况. 或者是一次管理多个相同类型的资源.例如:user { [bin, adm]: ensure => present }

函数编辑

puppet提供一些有用的函数,例如template利用erb模板来生成文件内容,这样就可以根据不同主机的情况,生成不同的配置文件.例如配置squid的内存缓存大小,可以利用facter返回的内存值做一个简单的数学计算,然后写入到squid的配置文件,就是通过template来完成的. 另外一个函数include 可以读入另外的puppet配置文件或者类.这样可以把puppet的文件分割的更有规律.

节点编辑

最后一个关于puppet语言的语法是节点定义"node", 节点定义很象类定义,也支持继承特性. 当一个节点(puppet客户端)连接到puppet服务器端,puppet解析器会查找这个节点的node代码片断,然后利用这个代码片断来生成该客户端的配置代码. puppet里面主机名来标明一个主机,因此主机名在puppet里面相当重要. 如果puppet找不到匹配该主机名的node定义,就会用默认的节点定义来配置该主机. 在node里面使用主机名,需要用单引号把主机名括起来.
node 'server1' { include nginx }
在上面的代码中,如果server1这个主机连接到puppet服务器,puppet服务器就会按照nginx的代码来配置这台服务器.

自定义资源编辑

puppet里面有一个非常有用的语法结构,叫做define, 通过define可以把多个资源包装成一个资源,或者把一个资源包装成一个模型,便于使用.例如,在debian里面管理一个apache虚拟机非常简单,把一个虚拟主机的配置文件放到/etc/sites-available/里面,然后做一个符号链接到/etc/sites-enabled目录. 你可以为你每个虚拟主机复制同样的配置代码.

版本编辑

puppet 有企业版和社区版,目前版本是2.6。
社区版是免费的,有些常用的功能。
企业版是收费的,支持vmware虚拟机的部署和审计功能。但如果10个节点以下是免费的。
2013年1月13日,。
转自百度百科
分享到:
评论

相关推荐

    Puppet2D v3.7.zip

    Puppet2D is an advanced 2D Skeletal Animation Tool. - AUTORIG - 在一分钟内钻完! 使绑定Biped变的非常容易。 - 在您的AUTORIG上添加现成的动画 - 它们可以在任何形状的两足动物上使用! (包括空闲和步行...

    Puppet3D-1.9V

    当谈到Unity中的3D角色动画和骨骼系统时,Unity Puppet3D是一个非常实用的工具。它能够帮助开发者快速为3D模型创建骨骼绑定和动画控制,从而获得流畅自然的动画效果。 Unity Puppet3D的核心功能是让用户能够轻松地...

    puppet-cfpuppetserver:cfpuppetserver

    cfpuppetserver描述该软件包执行安装Puppet Server,Puppet DB,PostgreSQL,r10k,librarian-puppet并使它们共同运行的标准过程。 它还与和软件包。环境配置这些配置要求您在环境中提供。 可以从获取示例。 注意1:...

    puppet-monitoring:管理人偶监控资源

    我已将我所有的 puppet 模块的所有权转让给了 Puppet Forge 上一个名为 abstractit 的新组织。 我正在 rendhalver 和 abstractit 下制作我的模块的最终版本,以便您有机会切换到新组织。 我还添加了许可证。 我所有...

    Puppet 1.07

    Puppet1.07,发布于2013年,可用于手势控制计算机。其实是利用WebCamera/Kinect摄像头拍下人的手势动做,模拟鼠标对计算机的控制。

    vagrant-puppet_jenkins_pipeline:在jenkins中创建管道以测试Puppet模块的超级简单示例,所有模块都在Vagrant中旋转了!

    vagrant-puppet_jenkins_pipeline 假设条件 您的互联网连接未过滤 您有puppet-librarian或R10K-从Internet上获取模块 初始设置 有一些灯光设置可以开始使用。 由于此示例是使用Puppet模块构建的,但是在此存储库中...

    wechaty-robot:基于 wechaty-puppet-padplus 的微信机器人助手

    wechaty-robot 基于 wechaty-puppet-padplus 协议的微信机器人助手,适用于微信好友管理及群管理,可以帮你省去一系列重复... 转发动图 转发小程序 结构 |-- img # 储项目所使用到的图片与其他相应资源。 |-- src/ |

    geckodriver, WebDriver <> puppet代理.zip

    geckodriver, WebDriver &lt;&gt; puppet代理 geckodriver使用W3C兼容客户端与基于gecko的浏览器交互的代理。这个程序提供了由协议插件描述的HTTP API,以便与Gecko浏览器( 比如) 通信。 它将调用转换为 Firefox 远程协议...

    puppet-newrelic:用于将部署事件发送到 NewRelic 的 Puppet 报告处理器

    为此,请转到帐户设置(New Relic 站点的右上角),然后单击集成 =&gt; 数据共享。 选择 API 访问,并启用它。 安装 在你的 Puppet master 上安装newrelic_api gem $ sudo gem install newrelic_api 将 puppet-new...

    bamboo-puppet-plugin:与Atlassian Bamboo进行人偶代码的持续集成

    在Bamboo中,单击右上角的Gear图标,然后转到Overview-&gt; Server Capabilities 单击“检测服务器功能”,应显示Puppet Lint。 如果不是,请尝试通过“添加功能”下拉列表手动添加它。 它应该是: Capability type:...

    nonebot_plugin_puppet:让Nonebot成为你的木偶

    Nonebot Plugin Puppet 基于 和 的会话转接插件 安装 从 PyPI 安装(推荐) 使用 poetry poetry add nonebot_plugin_puppet 使用 pip pip install nonebot_plugin_puppet 从 GitHub 安装(不推荐) git clone ...

    puppet-nrpe:用于管理nrpe的人偶模块及其服务检查

    抽象的 ####目录 新内容和错误修复 最初使用基类作为模块的主要API。 添加了metadata.json以与较新...nrpe影响什么: Nrpe服务 安装标准的Nagios插件包 /etc/nagios/nrpe.cfg /etc/nrpe.d/和该目录中的服务 始于

    puppet-webhook:用于在推送 git 存储库时执行 r10k 的 Webhook puppet 模块

    #puppet-webhook ####目录1. 2.##描述该模块将安装一个简单但基本的 sinatra webapp,当某些内容发布到此站点时,我们将执行 r10k 命令。 当某些东西被推送到 git 存储库时,您可以通过执行所谓的 webhooks 来...

    puppet_facts.class.php:PHP类与puppetdb进行交互

    $facts = new puppet_facts($puppetdb); 节点列表 返回与给定事实值匹配的所有主机的列表的函数。 $hostlist = $facts-&gt;nodelist($fact,$value,$operator); 操作员可以; Equals: = Less than: &lt; More than: &gt; ...

    puppet_ldapdn:用于管理ldap dn条目的p提供程序

    puppet_ldapdn puppet_ldapdn是一个木偶类型和提供程序,旨在通过ldapmodify和ldapadd命令简单地管理较新的slapd.d样式openldap条目。 这比直接将文件直接写入slapd.d数据库更为可取。 本质上,它使用的机制描述...

    monitoring-with-puppet

    警告如果您无话可说,那么impress.js可能对您没有帮助;)关于名字impress.js的名称。 Open / LibreOffice演示工具称为Impress是一个(不幸的)巧合;)版本历史0.5.3(, , )错误修复0.5版引入了包括impress:...

    matrix-puppet-skype

    特征 Skype到Matrix直接文本消息 矩阵转Skype直接文本消息 Skype到Matrix直接图像附件消息 矩阵到Skype的直接图像附件消息 群组讯息 阅读收据 联系人列表同步安装克隆此仓库cd进入目录运行npm install配置将config....

    puppet-chrome-gitbook-cache-all:自动分页浏览GitBook的所有页面以将其本地缓存

    需要更多测试安装克隆此仓库在Chrome中,转到chrome:// extensions,打开开发人员模式,然后单击“加载解压缩”,然后选择此存储库的文件夹并加载用法在puppet-kmo.gitbook.io下加载gitbook 按下“ j”键-这将开始...

    vagrant-javadev-box:一个 Vagrant box 来构建一个基本的 Java dev box,配置了 puppet

    使用通过 puppet 安装的 Jdk、Postgres 和 Maven 构建用于 Java 开发的基本 Vagrant 框集。 这旨在作为添加特定定制的基础; 分叉并适应或按原样使用。 安装的模块 除非另有说明,否则全部作为 git 子模块。 也不...

    pdftohtml:将 pdf 文档转换为带有图像背景的 html 文本页面列表

    将 pdf 文档转换为带有图像背景的 html 文本页面列表xvfb-run --auto-servernum slimerjs render.js slides.pdf slides.jsonSlimer.js 设置 Something like this using Puppet# slimerjs setup$slimerjsRequirements...

Global site tag (gtag.js) - Google Analytics