引言

作为一个更广泛的主题,组态管理系统是指系统地处理系统变更的过程,其方式是随着时间的推移保持完整性。 尽管这个过程并不起源于 IT 行业,但是这个术语被广泛地用来指代服务器 / 组态管理。

自动化在服务器 / 组态管理中扮演着至关重要的角色。 它是用来使服务器达到理想状态的机制,以前是通过使用工具的特定语言和特性提供脚本来定义的。 事实上,自动化是组态管理服务器的核心,这就是为什么组态管理工具也常常被称为自动化工具或 IT 自动化工具。

另一个常用的术语来描述组态管理工具实现的自动化功能是服务器编配或 IT 编配,因为这些工具通常能够从一台中央控制器机器管理一到数百台服务器。

市场上有许多组态管理工具可用。 木偶、 Ansible、厨师和盐都是很受欢迎的选择。 尽管每个工具都有自己的特点,工作方式也略有不同,但它们都有相同的目的: 确保系统的状态与 provisioning 脚本描述的状态相匹配。

组态管理服务器的好处

虽然组态管理的使用通常比手动系统管理需要更多的初始计划和工作,但是除了最简单的服务器基础架构之外,其他所有的服务器基础架构都会因为它提供的好处而得到改进。 举几个例子:

快速配置新服务器

无论何时需要部署新的服务器,组态管理工具都可以自动化大部分,如果不是全部的话,为您提供服务的过程。 自动化使配置更快更有效,因为它允许比任何人都更快更准确地执行繁琐的任务。 例如,即使有适当而全面的文档,手动部署 web 服务器也需要几个小时,而配置管理 / 自动化只需几分钟。

从关键事件中快速恢复

快速配置还有另一个好处: 从关键事件中快速恢复。 当服务器由于未知的情况而离线时,可能需要几个小时才能正确地审计系统并找出真正发生了什么。 在这样的场景中,部署替换服务器通常是在对受影响的服务器进行详细检查的同时使服务重新上线的最安全的方法。 有了组态管理和自动化,这可以以一种快速可靠的方式完成。

不再使用雪花服务器

乍一看,手动系统管理似乎是部署和快速修复服务器的一种简单方法,但它通常是有代价的。 随着时间的推移,当流程没有自动化时,要准确知道服务器上安装了什么以及做了哪些更改可能会变得极其困难。 手动修补程序、配置调整和软件更新可以把服务器变成独一无二的雪花,难以管理,甚至更难以复制。 通过使用组态管理工具,启动新服务器或更新现有服务器所需的过程都将在 provisioning 脚本中记录下来。

服务器环境的版本控制

一旦您将服务器设置转换为一组 provisioning 脚本,您就可以将许多通常用于软件源代码的工具和工作流应用到服务器环境中。

版本控制工具,例如 Git,可以用来跟踪对配置所做的更改,并为脚本的旧版本维护单独的分支。 您还可以使用版本控制来实现配置脚本的代码审查策略,其中任何更改都应该作为拉请求提交,并在被接受之前得到项目负责人的批准。 这种做法将为您的基础结构设置增加额外的一致性。

复制环境

使用完全相同的软件和配置复制环境变得很简单组态管理。 这使您能够有效地构建一个具有生产、开发和测试服务器的多阶段生态系统。 您甚至可以使用本地虚拟机进行开发,使用相同的配置脚本构建。 这种做法将最大限度地减少在将应用程序部署到生产环境或在不同机器设置(不同操作系统、软件版本和 / 或配置)的同事之间共享应用程序时经常出现的环境差异所造成的问题。

组态管理工具概述

尽管每个 CM 工具都有自己的术语、哲学和生态系统,但它们通常具有许多共同的特征和相似的概念。

大多数组态管理 / 代理工具使用控制器 / 主机和节点 / 代理模型。 从本质上讲,控制器根据在配置脚本中定义的一系列指令或任务来指导节点的配置。

下面你可以找到大多数服务器组态管理工具中最常见的功能:

自动化架构

每个 CM 工具都提供了一个特定的语法和一组特性,您可以用它们来编写 provisioning 脚本。 大多数工具都具有使其语言类似于传统编程语言的特性,只不过是以一种简化的方式。 变量、循环和条件是为了方便创建更多用途的 provisioning 脚本而提供的常见特性。

幂等行为

组态管理工具跟踪资源的状态,以避免重复之前执行的任务。 如果一个软件包已经安装,那么这个工具不会尝试再次安装它。 目标是在每次配置运行之后,系统达到(或保持)所需的状态,即使您多次运行它。 这就是这些工具具有幂等行为的特征。 但是,这种行为并不一定在所有情况下都强制执行。

系统事实

组态管理工具通常提供关于所供应的系统的详细信息。 这些数据可以通过全局变量获得,称为事实。 它们包括网络接口、 IP 地址、操作系统和分布式等。 每个工具将提供一组不同的事实。 它们可以用来使配置脚本和模板更适合多个系统。

模板系统

大多数配置管理工具将提供一个内置的模板系统,可以用来帮助设置配置文件和服务。 模板通常支持变量、循环和条件,可以用来最大限度地提高通用性。 例如,您可以使用模板在 Apache 中轻松地设置一个新的虚拟主机,同时为多个服务器安装重用相同的模板。 模板不应该只有硬编码的静态值,而应该包含可以在主机之间更改的值的占位符,比如 NameServer 和 DocumentRoot。

可扩展性

尽管供应脚本可以非常专门地满足特定服务器的需求和要求,但是当您有类似的服务器设置或者设置的一部分可以在多个服务器之间共享时,还是会遇到很多情况。 大多数配置工具将提供方法,使您可以轻松地重用并将配置设置的较小块作为模块或插件共享。

第三方模块和插件通常很容易在互联网上找到,特别是普通的服务器设置,如安装 PHP 网络服务器。 Cm 工具倾向于围绕它们建立一个强大的社区,并且鼓励用户分享他们的定制扩展。 使用其他用户提供的扩展可以为您节省大量时间,同时也是了解其他用户如何使用您选择的工具解决常见问题的一种极好的方式。

选择组态管理工具

市场上有许多可用的配置管理工具,每一个都有不同的特性集和不同的复杂程度。 流行的选择包括大厨、 Ansible 和 Puppet。 第一个挑战是选择一个适合你需要的工具。

在做出选择之前,你应该考虑以下几点:

基础设施的复杂性

大多数组态管理工具都需要一个最小层次结构,包括一个控制器机器和一个由它管理的节点。 例如,Puppet 需要在每个节点上安装一个代理应用程序,并在控制器计算机上安装一个主应用程序。 另一方面,Ansible 有一个分散的结构,不需要在节点上安装额外的软件,而是依赖 SSH 来执行配置任务。 对于较小的项目,简化的基础设施似乎更适合,但是重要的是要考虑到可伸缩性和安全性等方面,这些方面可能不是由工具强制执行的。

有些工具可能包含更多的组件和移动部件,这可能会增加基础设施的复杂性,影响学习曲线,并可能增加实现的总体成本。

学习曲线

正如本文前面提到的,CM 工具提供了自定义语法,有时使用领域特定语言(DSL) ,以及一组组成自动化框架的特性。 与传统的编程语言一样,有些工具需要掌握更高的学习曲线。 基础设施需求还可能影响工具的复杂性,以及您多快能够看到投资回报。

成本

大多数配置管理工具提供免费或开源版本,高级功能和服务的付费订阅。 有些工具比其他工具具有更多的限制,因此根据您的具体需求和基础设施的增长情况,您可能最终不得不为这些服务付费。 你也应该考虑培训作为一个潜在的额外成本,不仅在金钱方面,而且考虑到时间将是必要的,让你的团队与速度的工具,你最终选择。

先进工具

如前所述,大多数工具提供付费服务,包括支持、扩展和高级工具。 分析您的具体需求、基础设施的规模以及是否需要使用这些服务是非常重要的。 例如,管理面板是这些工具提供的一种通用服务,它们可以极大地方便从中心点管理和监视所有服务器的过程。 即使你现在还不需要这样的服务,考虑一下将来可能需要的选择。

社区及支援

一个强大而受欢迎的社区在支持和文档方面可以非常有办法,因为用户通常很乐意与其他用户分享他们的知识和扩展(模块、插件和供应脚本)。 这可以有助于加快你的学习曲线,避免额外的成本与付费支持或培训。

常用工具概览

下面的表格可以让你快速了解当今市场上最流行的3种组态管理 / 工具的主要区别: Ansible,Puppet 和 Chef。

Ansible Puppet Chef
Script Language YAML Custom DSL based on Ruby Ruby
Infrastructure Controller machine applies configuration on nodes via SSH Puppet Master synchronizes configuration on Puppet Nodes Chef Workstations push configuration to Chef Server, from which the Chef Nodes will be updated
Requires specialized software for nodes No Yes Yes
Provides centralized point of control No. Any computer can be a controller Yes, via Puppet Master Yes, via Chef Server
Script Terminology Playbook / Roles Manifests / Modules Recipes / Cookbooks
Task Execution Order Sequential Non-Sequential Sequential

下一步

到目前为止,我们已经了解了组态管理服务器是如何工作的,以及在选择构建组态管理服务器基础设施的工具时应该考虑什么。 在本系列的后续指南中,我们将亲身体验3种流行的组态管理工具: Ansible、 Puppet 和 Chef。

为了让您有机会自己比较这些工具,我们将使用一个简单的服务器设置示例,这个示例应该由每个工具完全自动化。 这个设置包括一个运行 Apache 的 Ubuntu 18.04服务器来托管一个简单的网页。

总结

随着时间的推移,组态管理可以通过提供一个自动化流程和跟踪系统环境变化的框架,大大提高服务器的完整性。 在本系列的下一篇指南中,我们将看到如何在实践中使用安塞贝作为工具来实施组态管理战略。