对于大多数人来说,计算机并非一成不变。软件会被添加、删除和更新。配置也会被更改。想想自从你第一次启动计算机以来所做的更改。现在想象一下将这些更改应用到 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 社区版 | |
Puppet | Ruby | 开源 Puppet | |
Chef | Ruby | Chef | |
Ansible | Python | Ansible | |
SaltStack | Python | SaltOpen |
为什么你应该使用配置管理
如果前面 800 字还没有说服你,请试试这个轶事。多年前,我曾在一个由大约十几位系统管理员组成的团队工作,维护着一所大型研究型大学的高性能计算基础设施。我们能够以比员工人数增长快得多的速度增加机器数量,因为每台机器的边际成本非常小。从配置的角度来看,我们可以有效地将每个集群视为一台机器。在一次重组将我们团队的几名成员转移到一个尚未接受配置管理的团队之后,我们对我们所拥有的东西有了更好的认识。
有一天午餐时,我们一位不幸的同事告诉我们,在他的团队维护的 130 台左右的机器中,有近 100 种相同配置文件的变体。其中大多数在功能上是相同的,这让情况变得更糟。记住哪些更改是重要的,哪些机器进行了这些更改,增加了多少认知负担?而当需要更改该文件时,又需要投入多少精力?无论你维护 5,000 台机器还是 5 台机器,配置管理工具都能让工作变得更轻松。
5 条评论