设为首页 收藏本站
查看: 1048|回复: 0

[经验分享] puppet基础概念入门(01)

[复制链接]

尚未签到

发表于 2018-8-2 08:43:06 | 显示全部楼层 |阅读模式
  Puppet
  Puppet是开源的基于Ruby的系统配置管理工具,依赖于C/S的部署架构。puppet使用跨平台语言规范,管理配置文件、用户、软件包、系统服务等内容,在puppet里这些内容都被看做是“资源”,每种资源都有对应的属性,如软件包有安装不安装的属性,文件有权限属性等。Puppet的代码主要由这些资源和其属性组成。其代码化的好处:分享,保存,快速的恢复和部署。
  Puppet客户端默认每半小时连接一次服务器端(此时puppet客户端进程工作在后台模式,也可根据需要手动执行),从服务器端下载最新的配置文件,并且严格按照配置文件来配置服务器. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 简单流程可如下图:
  
   DSC0000.jpg
  工作流程:

  ①Agent向Master端发起认证请求
  ②Master端验证其合法性,允许其连接
  ③Agent将本机变量(主机名、内存大小、IP地址等)通过SSL连接发送给Master
  ④Master检测Agent的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。解析结果生成一个“伪代码”(catelog),并将其发给Agent
  ⑤Agent接收到“伪代码”,开始执行
  ⑥执行时判断有没有File文件,如果有,则向fileserver发起请求
  ⑦判断有没有配置Report,如果已配置,则把执行结果发送给服务器
  ⑧执行结束,检测系统状态
  https: 互相验正彼此的证书;加密;
  master: 证书,一般为自签,master可自行扮演CA的角色;
  agent: 证书,生成CSR发送给master(CA)
  IT基础设施自动化管理的整个生命周期:
  provisioning
  configuration
  orchestration
  reporting
  资源
  Puppet语言的基础在于对资源的声明。每个资源都定义了系统的一个组件,例如某个必须运行的服务,或是某个必须被安装的包。以下是一些其它类型资源的示例:
  某个用户帐号
  某个特定的文件
  某个文件夹
  某个软件包
  某个运行中的服务
  可以将资源想象为构建块,他们将结合在一起,对你所管理的系统的目标状态进行建模。 接下来,我们将接触到Puppet中更深入核心的定义,这些定义允许你以一种经济的方式将资源进行结合,而经济正是Puppet的关键特色之一。
  类型与提供者
  Puppet将类似的资源以类型的方式进行组织。举例来说,用户是一种类型,文件是另一种类型,而服务又是一种类型。当你正确地对某个资源的类型进行描述之后,接下来只需描述该资源所期望的状态即可。比起传统的写法:“运行这个命令,以启动XYZ服务”,你只需简单地表示:“保证XYZ处于运行状态”就可以了。
  提供者则在一种特定的系统中,使用该系统本身的工具实现各种资源类型。由于类型与提供者的定义被区分开来,因此某个单一的资源类型(例如“包”)就能够管理多种不同的系统中所定义的包。举例来说,你的“包”资源能够管理Red Hat系统下的yum、基于Debian的系统下的dpkg和apt,以及BSD系统中的端口。
  管理员通常来说不大有机会对提供者进行定义,除非管理员打算改变系统的默认值。Puppet中已经精确的写入了提供者,因此你无需了解如何对运行在基础设施中的各种操作系统或平台进行管理。再次声明,由于Puppet将细节进行了抽象,因此你无需担心各种细节问题。如果你确实需要编写提供者,那也通常能够找到一些简单的Ruby代码,其中封装了各种shell命令,因此通常非常简短,同时也便于创建。
  类型和提供者使得Puppet能够运行在各种主流平台上,并且允许Puppet不断成长与进化,以支持运算服务器之外的各种平台,例如网络与存储设备。
  下面的一个示例将为你展现Puppet语言的便捷性,它首先演示了如何用shell脚本添加一个新用户以及一个新的组,这与Puppet中始终一致的操作形成鲜明对比。而在使用Puppet的示例中,“用户”和“组”都是类型,Puppet能够自动找到适用于你的平台的提供者。相比之下,特定于平台的过程式脚本无论是编写还是理解都要困难得多。
  类、清单与模块
  Puppet语言中的其它元素的主要作用是为资源的声明提供更多的灵活性和便捷性。类在Puppet中的作用是切分代码块,将资源组织成较大的配置单元。举例来说,一个类能够包括所有安装和配置NTP时必须的Puppet代码。类的创建与调用可以在不同的地方完成。
  不同的类集合可以应用在扮演不同角色的节点上。我们将其称之为“节点分类”,这是一项非常强大的能力,它允许你根据节点的能力,而不是根据节点的名称对他们进行管理。这种“别把家畜当宠物”的机器管理方式,得到了许多快速发展的组织的偏爱。
  Puppet语言文件被称为清单,最简单的Puppet部署方式就是一个单独的清单文件加上一些资源。如果我们为以上示例中的基础Puppet代码命名为“user-present.pp”文件,那它就成为了一个清单。
  模块是一系列类、资源类型、文件和模板的结合,他们以一某个特定的目的,并按照某种特定的、可预测的结构组织在一起。模块可以为了各种目的而创建,可以是对Apache实例进行完整的配置以搭建一套Rails应用程序,也可以为各种其它目的进行创建。通过将各种复杂特性的实现封装在模块中,管理员就能够使用更小、可读性更好的清单文件对模块进行调用。
  Puppet模块的一个巨大优势在于模块的重用性。你可以自由使用他人编写的模块,并且Puppet有一个参与者数量巨大的活跃社区,除了Puppet Labs的员工所提编写的模块之外,社区成员们也会免费地分享他们所编写的模块。你能够在Puppet Forge上找到超过3000个可以免费下载的模块,其中有许多模块是系统管理员的工作中最常见的一些任务,因此这些模块能够节约你大量的时间。比方说,你可以使用模块进行各种管理任务,包括简单的服务器构建块(NTP、SSH)管理,乃至复杂方案(SQL Server或F5)的管理。
  类、清单和模块都是纯粹的代码,与组织中所需要的其它任何在代码一样,它们能够、也应该被签入到版本控制系统当中,稍后我们将对这一点展开讨论。
  安装步骤:
  程序包:
  http://yum.puppetlabs.com/
  http://docs.puppetlabs.com/guides/install_puppet/install_el.html
  安装yum:
[root@hzm puppet]# yum -y install puppet  基本用法:
puppet describe --list        ##查看puppet的资源列表  
puppet describe 资源名称      ##查看该资源的使用方法
  
puppet apply *.pp           ##应用定义的资源清单
  定义资源:保存于资源清单(manifest)中,
Resource_TYPE {title:  
attribute1 => value1,
  
attribute2 => value2,
  
}
  注意:Resource_TYPE必须全部使用小写字母;同一类型中的资源的title不允许相同;
  实例:
  定义一个用户资源,创建一个用户:
[root@hzm manifests]# vim test1.pp  
user {'hzm' :
  
        uid     => '666',
  
        shell   => '/bin/bash',
  
        ensure  => present,
  
}
  测试一下:
[root@hzm manifests]# puppet apply --test --noop --verbose test1.pp  
Notice: Compiled catalog for hzm.com in environment production in 0.12 seconds
  
Info: Applying configuration version '1449350959'
  
Notice: /Stage[main]/Main/User[hzm]/ensure: current_value absent, should be present (noop)
  
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
  
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
  
Info: Creating state file /var/lib/puppet/state/state.yaml
  
Notice: Finished catalog run in 0.03 seconds
  
[root@hzm manifests]#
  --noop:pupet运行catalog,但不执行配置
  测试ok,在创建:
[root@hzm manifests]# puppet apply --verbose test1.pp  
Notice: Compiled catalog for hzm.com in environment production in 0.11 seconds
  
Info: Applying configuration version '1449351226'
  
Notice: /Stage[main]/Main/User[hzm]/ensure: created
  
Notice: Finished catalog run in 0.11 seconds
  
[root@hzm manifests]#

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545066-1-1.html 上篇帖子: 集中管理工具Puppet 实战部署及使用 下篇帖子: puppet资源类型详解(02)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表