《Puppet权威指南》——1.2 自动化运维工具箱-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《Puppet权威指南》——1.2 自动化运维工具箱

简介:

本节书摘来自华章计算机《Puppet权威指南》一书中的第1章,第1.2节,作者:王冬生著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 自动化运维工具箱

1.2.1 Cfengine
Cfengine是一个借助C语言开发的、功能强大的自动化UNIX管理工具,最早出现于1993年。通过Cfengine可以轻而易举地管理客户端上的设备。Cfengine不仅运行成本低、效率高、功能强大,而且使用范围广。Cfengine可以管理各种环境下的设备,从一台到上千台服务器的集群均适用。如果运维工程师想同时修改2000台服务器的root密码,通过Cfengine可以轻松地在几分钟内实现。Cfengine还包含以下主要的功能:
检查和配置网络接口。
编辑系统和用户的文本文件。
维护符号链接。
检查和设置文件的权限。
删除垃圾文件。
检查重要文件和文件系统的存在。
控制用户脚本和shell命令的执行。
基于类的判定结构。
程序和系统进程管理。

image

  1. Cfengine 生命周期
    Cfengine 工作时遵循的是系统生命周期管理的Build-Deploy-Manage-Audit(BDMA)模式(如图1-2所示)。BDMA 包含系统生命周期的4个阶段:构建(Build)、部署(Deploy)、管理(Manage)和审计(Audit)。

下面分别介绍一下BDMA系统生命周期的4个阶段。
构建阶段:需要计划策略更改、规划想要的状态承诺(promise)以及构建所建议承诺的模板,这样如果所有机器均能做出并兑现这些承诺,系统便可无缝地运行。
部署阶段:需要向所有自主客户端(autonomous clients)发布策略,并且每个客户机都要运行一个代理,无需协助即可实现并维护这些策略。
管理阶段:这个自主代理负责管理该系统,运维工程师只需处理不能被自动处理的极少事件。
审计阶段:对更改进行本地审计和维护。决策结果由 Cfengine 内的设计确保且可自动维护。

  1. Cfengine如何工作
    Cfengine的工作过程如下。

1)管理员登录主服务器更新配置文件(SVN),通过运行Cfrun命令通知客户端进行更新。Cfrun在Cfrun.hosts 文件中查找客户端的列表。
2)Cfrun与每个客户端上的 Cfservd 进行通信,然后Cfservd 运行Cfagent。
3)Cfagent连接主服务器,首先检查Update.conf是否有新版本,如果有更新,则将它传输到客户端。
4)Cfagent 先评估 Update.conf 的内容,并获取策略文件(Cfagent.conf 和相关文件)的最新版本。随后评估 Cfagent.conf以确定客户端是否处于所需状态。如果有偏差,Cfagent 将执行已定义的操作来更正客户端配置。
1.2.2 Chef

  1. 什么是Chef
    自动化管理工具Chef由Ruby语言开发,是一种可以将框架转换为代码的自动化工具平台。人们不必关心设备是虚拟机还是物理机,也不必关心是几百台还是几千台服务器的集群,Chef都可以方便自如地管理资源、进程、系统等信息。目前很多互联网公司也在应用Chef,如Facebook、亚马逊等。

Chef服务器能够存储用户的配置数据和Recipes,其中配置数据用于描述基础设施的所有组成部分,而Recipes将这些组成部分集合为一个完整的运行系统的指南。无论是在现场的实体和虚拟服务器上,还是在云端的实体和虚拟服务器上,Chef用户都可以在系统的节点使用Recipes。随着基础设施的变化和发展,用户可以使用工作区域随时更新Chef服务器。通过使用版本控制可以获取所有的更改。

  1. Chef如何工作
    如果忽略所有的细节,Chef是这样工作的:在工作站(Workstation)上定义各个客户端(Client)应该如何配置,然后将这些信息上传到中心服务器,每个客户端连到中心服务器工作站查看如何配置,然后进行自我配置。因此,在Chef的环境搭建完成以后,绝大部分工作是在工作站上进行的,客户端要获取工作站配置时,会主动连接并按照工作站的配置应用到客户端上,客户端并没有额外的工作。Chef主要有以下3种运行模式。

Chef-Solo:由一台普通计算机控制所有的服务器,不需要专设一台Chef-Server。
Client-Server:所有的服务器作为Chef-Client,统一由Chef-Server进行管理,包括安装、配置等工作。Chef-Server可以自建,但安装的东西较多,由于使用Solr作为全文搜索引擎,因此还需要安装Java。
Opscode Platform:类似于Client-Server,只是Server端不需要自建,而是采用官方网站提供的Chef-Server服务。
上面3种管理模式中,无疑Client-Server模式是最好的,但是同时也是最复杂的。因为通过这一模式可以在本地环境中搭建一个私有的Chef集中管理环境,而无需依赖任何第三方平台。
1.2.3 Puppet

  1. 什么是Puppet
    Puppet是一款使用GPLV2X协议授权的开源管理配置工具,用Ruby语言开发。其既可以通过客户端–服务器的方式运行,也可以独立运行。Puppet可以为系统管理员提供方便、快捷的系统自动化管理。对于系统管理员来说通过Puppet配置管理系统,底层的操作系统的发行版本是透明的,Puppet通过(Provider又称提供者)属性来完成软件的配置与安装,管理员不必关心操作系统的种类与发行版本,如图1-3所示。Puppet还可以提供一个强大的框架来完成系统管理功能,在框架的基础上系统管理员可以通过Puppet语言来描述系统的一些事务,如安装软件、初始化系统、启动、删除服务、推送配置文件和差异化配置管理服务器等。同时系统管理员和系统管理员之间可以分享用Puppet语言描述好的事务,从而减少重复劳动,提高工作效率。

image

Puppet主要由Luke Kanies和他的公司Puppet Labs开发和维护。Kanies从1997年开始从事UNIX的系统管理,并于2005年创立了一家专注于自动化工具的开源软件公司Puppet Labs。不久之后,Puppet Labs发布了他们的旗舰产品Puppet。

  1. Puppet工作模型
    Puppet可以用来管理UNIX/Linux平台,同时也添加了对微软Windows的支持(要注意的是目前Puppet只对微软的Windows做客户端支持,并不能将Windows用作Master来管理其他的服务器)。

那么Puppet是如何工作的呢?目前Puppet有一个简单易懂的工作模型,如图1-4所示。其主要分为3层,分别是部署和调度层、配置语言和资源抽象层、事务层。

image


(1)部署和调度层
Puppet Master(Puppet服务器,下称Master)在一台机器上以守护进程的方式运行,同时还包含各客户端节点的配置信息。Puppet Agent(客户端,下称Agent)在与Master通信的过程中,通过标准的SSL协议进行加密和验证,验证通过后,Agent从Master上读取相应的节点配置信息。
需要注意的是,并不是每次连接Agent都会从Master上读取信息,只有该节点在Master上配置信息发生变化时才会被读取。
默认情况下Agent每30分钟连接一次Master。但是这种方式在很多场景下不是很符合系统管理员的要求,所以很多系统管理员也会将Agent 通过Crontab(UNIX定时任务计划)来管理,这样会更加灵活一些。
(2)配置语言及资源调度层
Puppet使用描述性语言来定义配置项,在Puppet中将配置项被称为Resource(资源)。这种描述性语言使得Puppet与其他配置工具截然不同。描述性语言在Puppet中还可以声明配置的状态,例如一个软件安装、配置、启动的各环节、上下游依赖关系等。
让我们来看这样一个例子。系统管理员需要在CentOS、Ubuntu的主机环境安装Nginx服务,如果不借助工具我们需要通过脚本来完成以下步骤。
步骤1 连接到目的主机,输入用户密码或密钥。
步骤2 检查是否安装相应Nginx服务。
步骤3 如果没有安装,根据系统发行版本在系统上执行不同的命令。CentOS可以执行yum命令,Ubuntu可以使用atp-get命令,安装后启动Nginx。
步骤4 将安装后的信息返回给服务器。
而通过使用Puppet,我们只需要在Master服务器的相应配置文件中通过配置语言定义一个Package资源。Package资源的定义格式如下:

资源名{ '标题':
   属性 => 值
}

例如:

package { 'nginx':
  ensure => present,
}

在资源名里填写相应的标题,如nginx,并将资源的属性ensure赋值为present。这里的属性ensure表示软件包的安装状态,present表示希望安装这个Nginx软件包,而absent则表示希望卸载Nginx软件包。这样当Agent来连接Master时就会自动安装Nginx服务,并将安装好的消息以报告的形式上报Master。
当Agent 连接Master时,Master并不知道Agent的操作系统型号和版本。Agent通过Facter工具收集系统相关信息,并通过SSL协议将Agent的信息传递给Master。Master根据Agent收集到的相关信息,通过资源的提供者来为Agent服务。比如Package资源收到Agent的信息后,会识别Agent的系统型号版本,并通过资源提供者(如yum aptitude pkgadd apt-get等)匹配,为Agent服务。
(3)事务层
Puppet事务层其实就是它的解析引擎。Puppet事务层配置每一台主机的过程包括以下4步。
步骤1 解析和配置编译。
步骤2 将编译好的配置同步到Agent。
步骤3 在Agent上应用配置。
步骤4 向Master报告运行结果。
首先Puppet会创建一个图表来表示所有资源的关系和上下游执行顺序,以及和Agent的关系。然后Puppet将按照资源之间的关系和上下游顺序依次执行。
接着Puppet为每一个Agent获取相应的资源,并把它们编译成“目录”,然后将目录依次分发到各主机,并通过Agent来应用它们,最后应用结果以报告形式反馈给Master。

意 Puppet并不是完全的事务,因为事务会记录日志,而Puppet并没有记录日志,也无法像数据库那样进行回滚。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接