对于大多数人来说,计算机并非一成不变。软件会被添加、删除和更新。配置也会被更改。想想您第一次启动计算机以来对其所做的更改。现在想象一下将这些更改应用到 10 台、100 台或 1,000 台甚至更多的计算机上。配置管理工具使得实施和强制执行这些更改成为可能。
配置管理的雏形
使用“黄金镜像”(操作系统和某些应用程序的预配置副本)作为初始安装过程的一部分复制到机器上是配置管理的先驱。使用这种方法,您知道您管理的每台计算机都从一个共同的起点开始,即使它们随着时间的推移而发生偏离。但是,这种偏离的可能性意味着从现在起六个月后,您无法真正预测每台机器的状态。而且黄金镜像不是很灵活。
配置管理系统演进的下一步是我称之为“安装管理”工具的东西。这些工具提供了更大的灵活性,并且基本上允许自动化“正常”安装。Kickstart(Fedora 和 Red Hat 使用)、Preseed(Debian 及其衍生版本使用)以及 Solaris 的 jumpstart 都是安装管理工具。它们允许机器安装所需的配置和软件包。基本逻辑运算符允许进行更精细的控制,而自定义的安装后脚本进一步扩展了这一点。但是,后续更改仍然是手动过程。
配置管理功能
配置管理工具应运而生。每种工具都是独特的,但它们都为重要的功能提供一定程度的支持。
强制执行。 配置强制执行可能是配置管理工具最重要的功能。通过定期运行并确保机器配置到所需状态,配置管理工具可以防止配置漂移。配置漂移可能以多种方式发生:软件包更新、在线调试、“乐于助人”的同事等等。无论原因是什么,能够自信地说“这台机器就是这样配置的”是缩短事件解决时间和减少意外情况的好方法。
实现协作。 配置管理工具使团队成员更容易协作。只需进行一次更改,即可在整个基础设施中更新配置。在机器上手动编辑配置只会导致意想不到的差异。通过将所有配置放在一个地方,您可以避免踩到别人的(包括未来的您)脚趾。
版本控制友好。 当然,实现协作的最佳方法是将所有内容都放在版本控制系统中。下面列出的所有工具都使用某种形式的文本进行配置。这意味着您可以利用您最喜欢的版本控制系统的好处。版本控制的好处超出了本文的范围,但请相信我的经验,您真的、真的希望将您的配置放在版本控制系统中。
启用变更控制流程。 由于配置管理工具是文本化的并且对 VCS 友好,因此您可以像对待代码一样对待基础设施变更。更改可以作为差异或合并请求提交,并在批准前进行代码审查。拥有明确列举的带有时间戳的更改可以使重建事件变得更加容易。通过原子更改,您可以按照您感到舒适的速率发布它们,而不是一次性将大量更改抛向您的基础设施。
抽象化。 很少有系统管理员维护完全同构的环境。即使您是一家完全使用 Linux 的公司,您也可能支持多个发行版,或者至少是同一发行版的多个版本。借助配置管理工具,许多特定于操作系统的配置实现都为您抽象化了。例如,相同的配置文件可用于管理在 Red Hat 和 Ubuntu 系统上安装 Apache HTTPD。
一些配置管理工具
如今存在着出色的配置管理工具,正等待您去试用。下表列出了一些最流行的工具,但还有更多工具。如今,大多数配置管理工具除了 Linux 外,还支持 Windows 和 Unix。
工具 | 语言 | FLOSS 版本 | |
---|---|---|---|
CFEngine | C | CFEngine Community | |
Puppet | Ruby | Open Source Puppet | |
Chef | Ruby | Chef | |
Ansible | Python | Ansible | |
SaltStack | Python | SaltOpen |
为什么您应该使用配置管理
如果前面 800 字还没有说服您,请试试这个轶事。多年前,我曾在一个由大约十几位系统管理员组成的团队工作,维护一所大型研究型大学的高性能计算基础设施。我们能够比员工人数增长更快地增加机器数量,因为每台机器的边际成本非常小。从配置的角度来看,我们可以有效地将每个集群视为一台机器。在一次重组将我们团队的几名成员调到一个没有采用配置管理的团队后,我们对我们拥有的东西有了更好的认识。
有一天午餐时,我们一位不幸的同事告诉我们,在他的小组维护的大约 130 台机器中,有近 100 个相同配置文件的变体。其中大多数在功能上是相同的,这使得情况更加糟糕。记住哪些更改是重要的,哪些机器进行了这些更改增加了多少认知负担?当需要更改该文件时,又需要付出多少努力?无论您维护 5,000 台机器还是五台,配置管理工具都会使工作变得更轻松。
5 条评论