`

[转]什么是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日,。
转自百度百科
分享到:
评论

相关推荐

    puppet书籍

    Puppet是一款在Linux、Unix、Windows平台上广泛使用的配置管理系统。它能够处理各种IT基础架构组件的自动化配置,包括但不限于配置文件、用户账户、定时任务(cron)、软件包安装和系统服务等。Puppet使用的是一种...

    Puppet2D v3.7.zip

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

    自动给模型添加骨骼并可驱动蒙皮的神级插件Puppet3D

    【标题】:“自动给模型添加骨骼并可驱动蒙皮的神级插件Puppet3D” 在三维(3D)建模和动画领域,Puppet3D是一款强大的插件,它能够极大地提升模型的骨骼绑定和蒙皮过程的效率。这款插件的主要目标是为3D艺术家提供...

    Puppet2D 2.4

    《Puppet2D 2.4:Unity3D中的2D骨骼动画利器》 在Unity3D这个强大的游戏开发引擎中,2D游戏的制作同样备受关注。为了满足2D游戏开发者对细腻动画效果的需求,Puppet2D应运而生。作为一款专门针对2D骨骼动画设计的...

    Unity3d技术之2D骨骼动画插件Puppet2D v2.0

    《Unity3D技术详解:2D骨骼动画插件Puppet2D v2.0》 在Unity3D的游戏开发中,2D骨骼动画是构建生动角色和场景的关键元素。Puppet2D是一款专为2D游戏设计的强大骨骼动画工具,它简化了动画制作流程,使开发者能够...

    使用Puppet框架管理基础设施

    - **替代传统管理方式**:探讨如何抛弃手工维护用户信息的传统做法,转而采用Puppet自动化的方案。 ##### 4. 利用MCollective执行服务器配置 - **软件获取**:指导读者如何获取并安装MCollective所需的软件包。 - ...

    面向云的主机配置管理工具-puppet

    Puppet是一款面向云环境的主机配置管理工具,它应运而生以满足在云技术普及背景下,数据中心服务器或虚拟机频繁扩展增减时的企业需求。传统的系统维护方法已经无法高效地管理大规模的服务器或虚拟机集群。因此,中心...

    Puppet 1.07

    Puppet 1.07是一款发布于2013年的创新性软件,它引入了一种全新的交互方式,通过手势控制来操作计算机。这一技术利用了WebCamera或Kinect摄像头的捕捉能力,将用户的肢体动作转化为虚拟的鼠标操作,实现了对计算机的...

    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 下制作我的模块的最终版本,以便您有机会切换到新组织。 我还添加了许可证。 我所有...

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

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

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

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

    puppet-openswan

    **Puppet-Openswan 模块详解** 在IT领域,自动化配置和管理工具的重要性不言而喻,其中Puppet和Openswan就是两个重要的组件。Puppet是一种强大的配置管理框架,而Openswan则是一款用于实现IPsec(Internet Protocol...

    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...

    用Puppet和Augeas管理Linux配置

    【Puppet和Augeas管理Linux配置】 Puppet是一个强大的自动化配置管理工具,它允许管理员集中管理和维护多台服务器的配置。然而,对于特定场景,如处理不同服务器间略有差异的配置文件,Puppet可能不够灵活。这时,...

    puppet-pentahokettle:用于Pentaho PDI(水壶)的人偶模块

    Puppet是自动化管理工具,常用于IT基础设施的配置和管理,而Pentaho Data Integration(PDI),又称为Kettle或Spoon,是一款强大的ETL(提取、转换、加载)工具,帮助企业从各种数据源中抽取数据,进行清洗、转换,...

    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 ...

Global site tag (gtag.js) - Google Analytics