puppet

puppet是有ruby语言开发的,ruby是一种面向对象,命令式,函数式,动态的通用编程语言,在20世纪90年代中期由日本人松本行弘设计开发的,遵守BSD许可证和Ruby License,它的灵感与特性来自于Perl,smalltalk,Eiffel,Ada以及Lisp语言.

puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置服务器. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.

随着云技术的技术普及,服务器或虚拟机在数据中心应用中频繁扩展和增减,传统的系统维护方法无法满足企业的需求,于是出现了中心化的配置管理软件,利用中心化的配置管理,可以把整个数据中心的服务器或虚拟机的所有配置内容有效的组织并管理起来,以此实现大规模化的管理以及快速部署。中心化配置管理软件有很多,Unix下最出名的是cfengine,其目的是使主机配置管理简单化和任务自动化,使困难的任务变得较容易。由于cfengine的语法比较晦涩,于是出现了Puppet 。Puppet 的语法简单,对管理内容的抽象化好,很容易理解代码,因此其正迅速的流行起来。Puppet是免费开源软件,可以自由使用,现在 google正使用puppet管理超过近万台的mac桌面电脑和十几万台Linux服务器。另外很多世界知名的IT企业也在使用Puppet,开源社区的fedora也使用Puppet。国内的大公司也在准备从 cfengine转移到Puppet。

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

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

puppet可以工作在多种linux系统上并且可以管理windows
puppet工作于master/agent模型
puppet基于ssl验证方式工作(需要主机名,因为即使ip地址变了,证书依然后可用,所以使用于动态ip地址环境)
puppet的工作模式:被动模式和主动模式
puppet的管理方式
puppet的对某一个服务的管理称之为模块
每一个管理对象比如 脚本 软件包 计划任务,文件等称之为资源
定义资源的文件称之为清单,每个清单中可以保存多个资源,并且清单之间可以互相调用 通过import实现,相当于shell中的source
类:把多种资源组织起来称之为类,并且可以继承.子类继承了父类的属性,并且可以修改父类定义的值,调用类使用import
模块就是类的集合

类:继承

需要在100节点创建用户nginx
需要在30节点安装php
需要在20节点安装mysql
20{
nginx
php
mysql
}
30{
nginx
php
}
50{
nginx
}
换种定义方式
100{
nginx
}
50 继承 200{
php
}
20 继承 50{
mysql
}

facter:这个组件可以基于插件管理方式让各个agent可以获取各个资源管理信息如:ip 网卡数量 cpu核心数等 比如根据操作信息定义安装相同功能软件包



poppet工作原理
file:///tmp/ct_tmp/1.png

1. 客户端puppet-client向puppet-master发起认证请求,或使用带签名的证书。
2. puppet-master告诉puppet-client是合法的。
3. puppet-client调用facter,Facter探测出主机的一些变量,例如主机名、内存大小、IP地址等,puppet-client将这些信息通过SSL连接发送到服务器端。
4. puppet-master服务器端检测客户端的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。facter送过来的信息可以作为变量处理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”(catelog),然后把伪代码发给客户端。
5. puppet-client端接收到“伪代码”,并且执行。
6. puppet-client端在执行时判断有没有file文件,如果有,则向fileserver发起请求。
7. puppet-client端判断有没有配置report,如果已配置,则把执行结果发送给服务器。
8. puppet-server端把puppet-client端的执行结果写入日志,并发送给报告系统
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值