五大配置管理工具

了解配置管理工具,并找出哪种最适合您的DevOps组织。
480 位读者喜欢这篇文章。
gears and lightbulb to represent innovation

Opensource.com

DevOps正在不断发展并受到越来越多的关注,因为组织发现它如何帮助他们生产更好的应用程序并缩短软件产品的上市时间。

DevOps的核心价值 是文化(Culture)、自动化(Automation)、度量(Measurement)和共享(Sharing)(CAMS),一个组织对这些价值的坚持程度会影响其成功程度。

  • 文化 将人员和流程结合在一起;
  • 自动化 为DevOps创建框架;
  • 度量 允许改进;以及
  • 共享 实现了CAMS循环中的反馈环。

另一个DevOps概念是几乎所有事物都可以通过代码进行管理:服务器、数据库、网络、日志文件、应用程序配置、文档、自动化测试、部署流程等等。

在本文中,我将重点介绍自动化的一个方面:配置管理。作为“基础设施即代码”(IaC)的一部分,配置管理工具使得可以使用经过测试和验证的软件开发实践,通过纯文本定义文件来管理和配置数据中心。

通过操作简单的配置文件,DevOps团队可以使用应用程序开发最佳实践,例如版本控制、测试、小规模部署和设计模式。简而言之,这意味着可以编写代码来配置和管理基础设施以及自动化流程。

为什么使用配置管理工具?

配置管理工具使更改和部署更快、可重复、可扩展、可预测,并能够维护所需状态,从而将受控资产置于预期状态。

使用配置管理工具的一些优势包括

  • 遵循编码约定,使其更容易浏览代码
  • 幂等性,这意味着无论代码执行多少次,最终状态都保持不变
  • 分布式设计,以改进管理大量远程服务器

一些配置管理工具使用拉取模型,其中安装在服务器上的代理定期运行,从中央存储库拉取最新的定义并将其应用于服务器。其他工具使用推送模型,其中中央服务器触发对托管服务器的更新。

五大配置管理工具

有各种各样的配置管理工具可用,每种工具都有使其在某些情况下比其他情况更好的特定功能。然而,下面按字母顺序介绍的五大配置管理工具,都有一些我认为对于DevOps成功至关重要的共同点:它们都具有开源许可证、使用外部化配置定义文件、无人值守运行并且可脚本化。所有描述均基于工具的软件存储库和网站的信息。

Ansible

“Ansible是一个极其简单的IT自动化平台,可让您的应用程序和系统更易于部署。避免编写脚本或自定义代码来部署和更新您的应用程序——使用接近于普通英语的语言进行自动化,使用SSH,无需在远程系统上安装代理。”——GitHub存储库

Ansible是我最喜欢的工具之一;我几年前开始使用它,并爱上了它。您可以使用Ansible从命令行对服务器列表执行相同的命令。您还可以使用它通过写入YAML文件的“playbook”来自动化任务,这有助于团队和非技术人员之间的沟通。它的主要优点是简单、无代理且易于阅读(尤其是对于非程序员而言)。

由于不需要代理,因此服务器上的开销更少。以推送模式(默认模式)运行时,SSH连接是必要的,但如果需要,可以使用拉取模式。Playbook可以使用最少量的命令编写,也可以将其扩展以用于更复杂的自动化任务,这些任务可能包括角色、变量和由其他人编写的模块。

您可以将Ansible与其他工具结合使用,以创建一个中央控制台来控制流程。这些工具包括Ansible Works(AWX)、Jenkins、RunDeck和ARA,ARA在运行playbook时提供可追溯性

CFEngine

“CFEngine 3是一个流行的开源配置管理系统。它的主要功能是为大规模计算机系统提供自动化配置和维护。”——GitHub存储库

CFEngine由Mark Burgess于1993年推出,作为一种用于自动化配置管理的科学方法。目标是处理计算机系统配置中的熵,并通过终态“收敛”来解决它。“收敛”意味着期望的终态,并详细说明了幂等性作为达到期望终态的能力。Burgess的研究在2004年得到了发展,当时他提出了承诺理论作为代理之间自愿合作的模型。

当前版本的CFEngine结合了承诺理论,并使用在每台服务器上运行的代理,这些代理从中央存储库中拉取配置。它需要一些专业知识来处理配置,因此最适合技术人员。

Chef

“一个系统集成框架,旨在将配置管理的优势带给您的整个基础设施。”——GitHub存储库

Chef使用用Ruby编写的“recipes”来保持您的基础设施运行最新且合规。这些recipes描述了一系列应处于特定状态的资源。Chef可以在客户端/服务器模式或名为chef-solo的独立配置中运行。它与主要的云提供商有很好的集成,可以自动配置和配置新机器。

Chef拥有坚实的用户基础,并提供完整的工具集,允许具有不同技术背景和技能的人员围绕recipes进行交互。但是,在其基础上,它是一个更偏向技术的工具。

Puppet

“Puppet,一个用于您的Linux、Unix和Windows系统的自动化管理引擎,根据集中规范执行管理任务(例如添加用户、安装软件包和更新服务器配置)。”——GitHub存储库

Puppet最初被认为是一个面向运维和系统管理员的工具,现已巩固为配置管理工具。它通常在客户端-服务器架构中工作,代理与服务器通信以获取配置指令。

Puppet使用声明性语言或Ruby来描述系统配置。它以模块化方式组织,清单文件包含保持一切按要求的期望状态目标。Puppet默认使用推送模型,并且可以配置拉取模型。

Salt

“用于自动化管理和配置任何规模的基础设施或应用程序的软件。”—— GitHub存储库

Salt的创建是为了高速数据收集和扩展到数万台服务器以上。它使用Python模块来处理配置细节和特定操作。这些模块管理Salt的所有远程执行和状态管理行为。配置模块需要一定的技术技能。

Salt使用客户端-服务器拓扑(Salt master作为服务器,Salt minions作为客户端)。配置保存在Salt状态文件中,其中描述了保持系统处于所需状态所需的一切。

结论

DevOps工具的格局一直在不断发展,密切关注这些变化非常重要。我希望本文能鼓励您进一步探索这些概念和工具。如果是这样,云原生计算基金会(CNCF)在云原生景观项目中维护了一个很好的参考。

接下来阅读
标签
Marco Bravo's photo
我目前在加拿大的OVHcloud担任DevOps系统管理员,我感兴趣的领域是信息技术(IT),特别是信息安全、开发、运维和云计算。您可以在Twitter上通过@marcobravoram联系我。让我们开始对话吧。如果您不知道,请提问 – 如果您知道,请分享!~ 开源心态

5 条评论

很好的文章 Marco,我们在这里使用 Puppet 作为 Linux 基础设施的一部分。我会更多地探索你评论的其他工具。 问候!

我真的很高兴您参与讨论!

开始配置自动化世界的优秀指南。谢谢。

© . All rights reserved.