《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并没有记录日志,也无法像数据库那样进行回滚。

相关文章
|
3月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
95 3
|
1天前
|
监控 运维
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
本文介绍如何设置和查看域名或证书监控。步骤1:根据证书状态选择新增域名或证书监控,线上部署推荐域名监控,未部署选择证书监控。步骤2:查询监控记录详情。步骤3:在详情页查看每日定时检测结果或手动测试。
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
|
3月前
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
138 2
|
1天前
|
Linux 持续交付 调度
HTTPS 证书自动化运维:https证书管理系统-自动化部署
本指南介绍如何部署Linux服务器节点。首先复制生成的Linux脚本命令,然后将其粘贴到目标服务器上运行。接着刷新页面查看节点记录,并点击“配置证书”选择证书以自动部署。最后,节点部署完成,后续将自动调度,无需人工干预。
HTTPS 证书自动化运维:https证书管理系统-自动化部署
|
4天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
59 11
|
1天前
|
运维
HTTPS 证书自动化运维:https证书管理系统之自动化签发
通过访问【https://www.lingyanspace.com】注册账户,进入证书服务菜单并新增证书。填写域名(单域名、多域名或泛域名),创建订单后添加云解析DNS记录进行质检。确认完成后可下载证书,并支持后续查看、更新和定时更新功能。证书过期前15天自动更新,需配置邮箱接收通知。
HTTPS 证书自动化运维:https证书管理系统之自动化签发
|
21天前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
376 22
|
14天前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
49 9
|
2月前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
2月前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
125 1

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等