回顾:Puppet Enterprise 3.0牵线搭线

Puppet Labs配置自动化工具的3.0版本在速度提升、编排改进和对Windows服务器的深入支持方面表现突出

Puppet Labs配置自动化工具的3.0版本在速度提升、编排改进和对Windows服务器的深入支持方面表现突出

随着虚拟化推动服务器实例数量的快速增长,难怪有那么多配置自动化工具在大踏步前进。以前,我们要么不进行配置管理,要么创建自己的自定义脚本,现在我们有很多选项来管理对大量服务器的更改。

最好的选择之一是Puppet Enterprise,它是Puppet开源项目的商业版本。刚刚发布的3.0版继承了社区版的许多优点,以及只有企业版才有的新特性。

[Puppet或Chef:配置管理困境|12个用于开发人员和运营人员的智能云工具|订阅InfoWorld’s2020欧洲杯预赛数据中心新闻稿掌握最新的发展动态。]

如果你已经精通木偶,那么这个版本将带来受欢迎的变化。首先是速度。尽管我无法完全证实Puppet实验室关于目录核心编译速度提高60%,代理运行时速度提高2.7倍,或是“性能提升200%”的说法,但事实肯定与此接近。对于长期部署大型Puppet的用户来说,速度的提高是非常重要的,因为它们将减少Puppet服务器(即主服务器)和托管节点上的负载,并减少全面展开更改所需的时间。

PuppetEnterprise3.0还引入了一个新的编排引擎,允许更细粒度和更稳定的大规模更改。与早期版本相比,新的编排功能包括更细粒度的筛选,以选择要修改或直接控制的系统子集,以及批处理功能,以允许逐步推出更改,而不是一次执行所有更改。

另一个主要变化是对Windows服务器的更深入支持。以前,Live Management等许多操作在Windows上都无法工作。新版本引入了实时管理(用于实时管理节点的Web UI)和Windows服务器的编排。

Puppet Enterprise支持广泛的平台,提供了Red Hat、Ubuntu、Debian、Solaris和AIX包,以及一个通用的Unix tarball。此外,开源社区还发布了各种其他操作系统的代码。Puppet实验室不支持这些包,但它们为其他Linux发行版、各种BSD风格和Mac OS X提供了一些功能。

在木偶里面Puppet绝对是一个以Linux/Unix为中心的应用程序。尽管在新版本中对Windows有更大的支持,但是这个工具是由Linux/Unix管理员设计的。任何比少量服务器更大的Puppet部署都需要自定义代码和对Linux/Unix内部的相当深入的了解。这不是一个点击和拖动工具,也不是一个基于Web的配置管理工具,而是一个基于配置文件的工具,它有一个用于监视和组织任务的Web用户界面——这是应该的。

使用Puppet需要学习Puppet的配置语言,熟悉Puppet的类和模块,这些类和模块按照/etc/puppetlabs/puppet.的特定层次结构组织在配置文件中无需深入讨论大量细节,您可以将所有模块都包括在一个大脚本中,其中定义了类并将其链接到特定的服务器节点或节点组。这提供了一种非常简单的方法来处理管理多个服务器平台和发行版的复杂而详细的需求,更不用说切换和存储应用程序了。

Puppet Enterprise中包含的Web UI功能很好,也很简单,允许创建和管理节点、组和类,以及生成和查看报表。对于操作节点组织和快速确定框架某些部分的问题,它是一个有用的工具。它还提供有限的节点或节点组的实时管理。但是,对于许多实现来说,将UI看作只读的,并且主要通过命令行工作可能更容易一些。您对Puppet了解得越深,这种情况出现的可能性就越大,因为您可能会发现,只能通过CLI将某些配置和模块应用到节点和组,而这些更改可能不会反映到Web UI中。

一个例子可能是通过Puppet Forge模块共享站点下载的模块,由于配置的性质,该模块无法使用类。在这种情况下,您需要将模块应用于Puppet配置文件中的节点或组,因为您不能定义映射到Web UI中的类定义的类。因此,这个配置元素不会出现在Web UI中。

我在Web UI中也遇到了一些bug,比如可以添加一个名称包含句点的组,但是之后不能通过UI编辑或删除该组。这似乎是一个输入验证错误,因为句点在组名中似乎是非法字符。

站起来木偶安装Puppet在概念上非常简单。为Puppet主服务器选择支持的平台,然后运行安装脚本。这将提示安装各种包和选项:Puppet Master、PostgreSQL、Cloud Provisioner等等。安装脚本还将提示输入Web UI中第一个管理员的用户名和密码。

这一切都很简单,但有点缺乏错误检查和错误报告。例如,如果您安装在已经安装了PostgreSQL但尚未配置或运行的Linux系统上,安装程序将很高兴地安装自己的PostgreSQL二进制文件,然后尝试使用错误的客户端进行连接,这将失败,并生成一条相当无用的错误消息,指出PostgreSQL服务器无法启动,即使服务器显然正在运行。幸运的是,经过一番挖掘之后,这个根本原因被发现并修复了,但这并不是安装程序在没有任何有用的日志记录或明显原因的情况下退出的唯一一次。安装脚本是简单的bash脚本,因此调试不是什么大挑战。

Puppet Enterprise的主控制台显示了节点列表和所有节点的集合运行状态。

撇开这些问题和陷阱不谈,最初的配置非常简单,所有节点都需要DNS,而且(显然)需要清晰的网络连接。安装Puppet Master后,每个节点的配置基本相同,方法是为该节点的平台运行一个安装程序,该安装程序生成一个证书并与主服务器联系以获得批准。当节点被批准时,它可以通过Puppet进行配置,并可以通过Web UI或CLI添加到组或绑定到类。

接下来是更困难的部分:配置Puppet对那些系统进行更改。这是通过模块完成的,可以自定义编码,也可以从Puppet Forge网站下载并自定义。

傀儡在行动作为Puppet工作原理的一个非常简单的例子,让我们看看如何使用Puppet来确保NTP(Network Time Protocol)服务在一系列节点上正确配置和运行。

假设我们已经批准了节点,我们需要下载一个模块,例如由Keith Burdis编写的第三方erwbgy-ntp模块。我们通过安装模块从命令行:

puppet模块安装erwbgy ntp

这将下载模块并将其放在/etc/puppetlabs/puppet/modules/ntp下。然后我们查看文件/etc/puppetlabs/puppet/modules/ntp/manifests/初始pp。它包含许多模块的配置选项。对于本例,我们只需要修改要使用的NTP服务器,因此修改$servers变量:

$servers = ['192.168.32.10', '192.168.16.10'],

这将导致模块将这两个服务器添加到ntp.conf格式文件。这个初始pp文件包括服务.pp文件,其内容如下:

国家结核控制规划类::服务{

,服务{“ntpd”:

&确保=运行,

,,hasstatus =比;真的,

&hasrestart=>;正确,

&启用=true,

&需要=gt;类['ntp::config'],

 ;}

}

它定义了一个子类来处理ntpd服务本身。这些变量控制Puppet是否确保服务正在运行并启用。

另一个包含的文件名为安装.pp处理程序包安装:

类ntp::安装{

 ;案例$::操作系统{

,,'RedHat', 'CentOS', 'OracleLinux': {

&如果!已定义(包['ntp']){

,,,,,,包{国家结核控制规划的:,确保=比;安装}

&}

&如果版本CMP($::operatingsystemrelease,'6.0')>;0{

&如果!已定义(包['ntpdate']){

&包{'ntpdate':确保=gt;已安装}

,,,,,,}

&}

,,}

,,默认值:{

,,,,失败(“目前只能在类似于redhat的系统上工作”)

,,}

 ;}

}

此代码检查以确保它在兼容的发行版(在本例中是红帽、CentOS或Oracle Linux)上运行,如果是,将导致安装ntp包。如果需要,它还将检查以确保安装了ntpdate。否则,将抛出错误。

综上所述,当应用于目标节点时,此模块将安装尚未安装的ntp包,将向配置文件添加行以将ntp服务器定义为192.168.32.10和192.168.16.10,并将启动尚未运行的ntpd服务。

特定Ubuntu服务器的detail页面列出了它所属的组和类,并包括过去30天代理运行时和状态的图表。

要将此模块应用于节点,我们将在Web UI中定义一个名为ntp的新类,编辑一个节点组或节点本身,并将该类添加到组或节点。这将导致Puppet通过安装在节点上的Puppet代理将该配置应用到节点。

默认情况下,代理每隔30分钟与Puppet Master签入一次,但这当然是一个可配置的参数。也可以通过Web UI中的Live Management选项卡强制更新节点。Live管理允许管理员启用、禁用、运行和监视节点或节点组上的Puppet代理。我们可以选择要刷新的节点,然后强制刷新。如果我们选择使用ntp模块配置的节点,它将签入服务器,下载模块信息,安装ntp包,修改配置文件,并启动服务。

如果在某个地方,节点签入主节点并发现配置已被手动更改或服务已停止或卸载,代理将再次应用更改并启动服务。

这是木偶能做的一个很简单的例子。Puppet实验室和贡献者提供了数百个模块,可用于管理Linux和Windows系统上的各种配置元素,包括各种发行版和版本。

如果我们要对Windows服务器做同样的事情,我们可以使用Adam Denning的adenning/winntp模块。这在傀儡主机上的配置类似:

winntp类(

&$特殊投票间隔=900,15分钟

&$ntp}u服务器=192.168.32.10,192.168.16.10',

 ;$max_pos_phase_correction=54000,#15小时

 ;$max_neg_phase_correction=54000,#15小时{

 ;包括“注册表”

 ;服务{'w32time':

,,确保=比;“奔跑”,

 ;}

...

)

应用于Windows主机时,此模块将修改所需的注册表值,以将Windows时间服务配置为使用我们的NTP服务器,并确保该服务已启动。

可以构造模块来执行各种任务,而不仅仅是包安装和文件修改。您还可以将整个文件放在特定的目录中,并使用基于ruby的ERB语言构造模板。

1个2个 第1页
第1页,共2页
IT薪资调查:结果是