简介
作为一个更广泛的主题,配置管理(CM)指的是系统地处理对系统的更改的过程,该过程使系统在一段时间内保持完整性。尽管这一过程不是起源于IT行业,但这个术语被广泛用于指服务器配置管理 。
自动化在服务器配置管理中起着至关重要的作用。它是用于使服务器达到所需状态的机制,以前通过使用工具的特定语言和功能提供脚本来定义。事实上,自动化是服务器配置管理的核心,这就是为什么通常也将配置管理工具称为自动化工具或IT自动化工具。
用于描述配置管理工具实现的自动化功能的另一个常用术语是服务器编排或IT编排,因为这些工具通常能够从中央控制器机器管理一到数百台服务器。
市场上有许多配置管理工具可供选择。木偶、安可普、厨师和盐是最受欢迎的选择。尽管每个工具都有其自己的特征和工作方式略有不同,但它们都由相同的目的驱动:确保系统的状态与您的配置脚本所描述的状态相匹配。
服务器配置管理的好处
虽然使用配置管理通常需要比手动系统管理更多的初始规划和工作,但除了最简单的服务器基础设施之外,所有服务器基础设施都将因其提供的好处而得到改进。举几个例子:
快速配置新服务器
无论何时需要部署新服务器,配置管理工具都可以为您自动执行大部分(如果不是全部)配置过程。自动化使资源调配变得更快、更高效,因为它允许比任何人都更快、更准确地执行繁琐的任务。例如,即使有适当和全面的文档,手动部署Web服务器也可能需要几个小时,而使用配置管理/自动化则需要几分钟。
关键事件快速恢复
快速资源调配还带来了另一个好处:从关键事件中快速恢复。当服务器由于未知情况而离线时,可能需要几个小时才能正确审核系统并找出真正发生了什么。在这种情况下,部署替换服务器通常是使您的服务恢复在线的最安全的方式,同时在受影响的服务器上进行详细检查。有了配置管理和自动化,就可以快速可靠地完成这项工作。
不再有Snowflake服务器
乍一看,手动系统管理似乎是部署和快速修复服务器的一种简单方法,但这往往是有代价的。随着时间的推移,当该过程不是自动化的时,确切地知道服务器上安装了什么以及进行了哪些更改可能会变得极其困难。手动修补程序、配置调整和软件更新可能会使服务器变成独一无二的雪花,难以管理,甚至更难复制。通过使用配置管理工具,启动新服务器或更新现有服务器所需的程序将全部记录在配置脚本中。
服务器环境的版本控制
将服务器设置转换为一组配置脚本后,您将能够将通常用于软件源代码的许多工具和工作流应用于服务器环境。
版本控制工具,如Git,可用于跟踪对配置所做的更改,并为脚本的遗留版本维护单独的分支。您还可以使用版本控制来实现配置脚本的_CODE REVIEW_POLICY,其中任何更改都应作为拉入请求提交,并在接受之前由项目负责人批准。这种做法将为您的基础设施设置增加额外的一致性。
复制环境
配置管理使使用完全相同的软件和配置复制环境变得轻而易举。这使您能够有效地构建一个包含生产、开发和测试服务器的多阶段生态系统。您甚至可以使用使用相同的配置脚本构建的本地虚拟机进行开发。这种做法将最大限度地减少在将应用程序部署到生产环境或在具有不同机器设置(不同操作系统、软件版本和/或配置)的同事之间共享应用程序时经常出现的环境差异所造成的问题。
配置管理工具概述
尽管每个_CM_Tool都有自己的术语、理念和生态系统,但它们通常具有许多共同的特征和相似的概念。
大多数配置管理工具使用控制器/主服务器和节点/代理模型。本质上,控制器根据您的配置脚本中定义的一系列指令或_TASKS_来指导节点的配置。
下面您可以找到大多数服务器配置管理工具中提供的最常见功能:
自动化框架
每个CM工具都提供了一个特定的语法和一组特性,您可以使用它们来编写配置脚本。大多数工具将具有使其语言类似于传统编程语言的功能,但以简化的方式。变量、循环和条件是为方便创建更通用的预配脚本而提供的常见功能。
幂等行为
配置管理工具跟踪资源的状态,以避免重复之前执行的任务。如果软件包已经安装,该工具不会尝试再次安装它。其目标是在每次配置运行后,系统都达到(或保持)所需的状态,即使您多次运行它。这就是这些工具具有幂等行为的特征。但是,这种行为并不一定在所有情况下都强制执行。
系统事实
配置管理工具通常提供有关正在配置的系统的详细信息。这些数据可通过称为_FACTS_的全局变量获得。它们包括网络接口、IP地址、操作系统和分发等内容。每个工具将提供一组不同的事实。它们可用于使资源调配脚本和模板更适合多个系统。
模板系统
大多数CM工具将提供内置模板系统,可用于简化配置文件和服务的设置。模板通常支持可用于最大化多功能性的变量、循环和条件。例如,您可以使用模板在Apache中轻松设置新的虚拟主机,同时对多个服务器安装重复使用相同的模板。模板应该包含可随主机而变的值的占位符,而不是只有硬编码的静态值,例如NameServer
和DocumentRoot
。
可扩展性
即使设置脚本可以非常专门地满足特定服务器的需要和要求,但在许多情况下,您具有相似的服务器设置或可以在多个服务器之间共享的设置的一部分。大多数配置工具都提供了一些方法,使您可以轻松地将配置设置的较小块作为模块或插件进行重用和共享。
第三方模块和插件通常很容易在互联网上找到,特别是对于安装PHP Web服务器之类的常见服务器设置。CM工具往往有一个围绕它们建立的强大社区,并鼓励用户分享他们的定制扩展。使用其他用户提供的扩展可以为您节省大量时间,同时也是了解其他用户如何使用您选择的工具解决常见问题的绝佳方法。
选择配置管理工具
市场上有许多CM工具,每个工具都有不同的功能集和不同的复杂程度。受欢迎的选择包括厨师,安可普和木偶。第一个挑战是选择一个适合您需求的工具。
在做出选择之前,你应该考虑几件事:
基础设施复杂度
大多数配置管理工具需要一个最小层次结构,由控制器计算机和将由其管理的节点组成。例如,Puppet要求在每个节点上安装_agent_ application,并在控制器计算机上安装_master_ application。另一方面,Ansible具有分散的结构,不需要在节点上安装额外的软件,而是依靠SSH来执行配置任务。对于较小的项目,简化的基础设施似乎更适合,但重要的是要考虑到可扩展性和安全性等方面,这些方面可能不会被工具强制执行。
一些工具可能有更多的组件和移动部件,这可能会增加基础设施的复杂性,影响学习曲线,并可能增加实施的总体成本。
学习曲线
正如本文前面提到的,CM工具提供定制语法,有时使用特定于域的语言(DSL),以及一组组成其自动化框架的功能。与传统编程语言一样,一些工具需要更高的学习曲线才能掌握。基础设施要求可能还会影响该工具的复杂性,以及您能够以多快的速度看到投资回报。
成本
大多数CM工具都提供免费或开源版本,并提供高级功能和服务的付费订阅。某些工具会比其他工具有更多的限制,因此根据您的特定需求和基础设施的增长方式,您可能最终不得不为这些服务付费。您还应该将培训视为一种潜在的额外成本,不仅在金钱方面,而且在让您的团队加快使用您最终选择的工具所需的时间方面。
高级工具
如前所述,大多数工具都提供付费服务,包括支持、扩展和高级工具。重要的是要分析您的特定需求、基础设施的规模以及是否需要使用这些服务。例如,管理面板是这些工具提供的一种常见服务,它们可以极大地促进从一个中心点管理和监控所有服务器的过程。即使你现在还不需要这样的服务,也要考虑一下未来可能需要的选择。
社区与支持
一个强大而热情的社区在支持和文档方面非常有资源,因为用户通常很乐意与其他用户分享他们的知识和扩展(模块,插件和配置脚本)。这有助于加快您的学习曲线,并避免付费支持或培训的额外成本。
常用工具概述
下表应该会让您快速了解当今市场上最流行的三种配置管理工具之间的主要区别:Ansible、Pupet和Chef。
看似 | ** 木偶** | ** 厨师** | |
---|---|---|---|
脚本语言 | YAML | 基于Ruby的自定义DSL | Ruby |
基础设施 | 控制机通过SSH在节点上进行配置 | PupPate Master同步PupPate节点上的配置 | Chef工作站向Chef Server推送配置,Chef节点从Chef Server更新 |
节点需要专用软件 | 不支持 | 支持 | 支持 |
提供集中控制点 | 否。任何计算机都可以成为控制器 | 是,通过木偶大师 | 是,通过Chef Server |
脚本术语 | 剧本/角色 | 清单/模块 | 食谱/食谱 |
任务执行顺序 | 顺序 | 非顺序 | 顺序 |
下一步
到目前为止,我们已经了解了服务器的配置管理是如何工作的,以及在选择构建配置管理基础设施的工具时要考虑哪些因素。在本系列的后续指南中,我们将亲身体验三种流行的配置管理工具:Ansible、Pupet和Chef。
为了让您有机会自己比较这些工具,我们将使用一个简单的服务器设置示例,每个工具都应该完全自动化。该安装程序包括一个Ubuntu 18.04服务器,该服务器运行一个简单的Web页面。
总结
配置管理可以通过提供一个框架来自动化流程并跟踪对系统环境所做的更改,从而随着时间的推移大大提高服务器的完整性。In下一个指南在本系列中,我们将看到如何使用_Ansible_ as工具在实践中实现配置管理策略。