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