您的位置:首页 > 其它

puppet基础概念入门(01)

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



工作流程:



①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]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  基础 概念 puppet