随着组织发现 DevOps 如何帮助他们生产更好的应用程序并缩短软件产品的上市时间,DevOps 正在不断发展并获得 traction。
DevOps 的核心价值观 是文化(Culture)、自动化(Automation)、度量(Measurement)和共享(Sharing)(CAMS),组织对这些价值观的坚持程度会影响其成功程度。
- 文化将人员和流程结合在一起;
- 自动化为 DevOps 创建了一个框架;
- 度量允许改进;并且
- 共享在 CAMS 循环中实现了反馈环。
另一个 DevOps 概念是几乎所有事物都可以通过代码进行管理:服务器、数据库、网络、日志文件、应用程序配置、文档、自动化测试、部署流程等等。
在本文中,我将重点介绍自动化的一个方面:配置管理。作为基础设施即代码(IaC)的一部分,配置管理工具使得可以使用经过测试和验证的软件开发实践,通过纯文本定义文件来管理和配置数据中心。
通过操作简单的配置文件,DevOps 团队可以使用应用程序开发的最佳实践,例如版本控制、测试、小规模部署和设计模式。简而言之,这意味着可以编写代码来配置和管理基础设施,以及自动化流程。
为什么使用配置管理工具?
配置管理工具使更改和部署更快、可重复、可扩展、可预测,并能够保持期望的状态,从而使受控资产进入期望的状态。
使用配置管理工具的一些优势包括:
- 遵守编码约定,使代码更易于理解
- 幂等性,这意味着无论代码执行多少次,最终状态都保持不变
- 分布式设计,以改进管理大量远程服务器
一些配置管理工具使用拉取模型,其中安装在服务器上的代理定期运行,从中央存储库拉取最新的定义并将其应用到服务器。其他工具使用推送模型,其中中央服务器触发对受管服务器的更新。
顶级 5 款配置管理工具
有各种各样的配置管理工具可用,每种工具都有特定的功能,使其在某些情况下比其他情况更好。然而,下面按字母顺序介绍的顶级五款配置管理工具,有几个共同点,我认为这些共同点对于 DevOps 的成功至关重要:它们都具有开源许可证,使用外部化的配置定义文件,无人值守运行,并且是可脚本化的。所有描述均基于来自工具软件存储库和网站的信息。
Ansible
“Ansible 是一个极其简单的 IT 自动化平台,使您的应用程序和系统更易于部署。避免编写脚本或自定义代码来部署和更新您的应用程序——使用接近纯英文的语言进行自动化,使用 SSH,无需在远程系统上安装代理。”——GitHub 仓库
Ansible 是我最喜欢的工具之一;我几年前开始使用它,并爱上了它。您可以使用 Ansible 从命令行对服务器列表执行相同的命令。您还可以使用它来自动化任务,使用写入 YAML 文件中的“playbooks”,这有助于团队和非技术人员之间的沟通。它的主要优点是它简单、无代理且易于阅读(特别是对于非程序员)。
因为不需要代理,所以服务器上的开销更少。在推送模式(默认模式)下运行时,SSH 连接是必要的,但如果需要,可以使用拉取模式。Playbooks 可以用最少的一组命令编写,也可以扩展到更复杂的自动化任务,这些任务可能包括角色、变量和由其他人编写的模块。
您可以将 Ansible 与其他工具结合使用,以创建一个中央控制台来控制流程。这些工具包括 Ansible Works (AWX)、Jenkins、RunDeck 和 ARA,它们在运行 playbooks 时提供可追溯性。
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 来描述系统配置。它以模块化方式组织,manifest 文件包含期望状态目标,以保持一切符合要求。Puppet 默认使用推送模型,也可以配置拉取模型。
Salt
“用于自动化管理和配置任何规模的基础设施或应用程序的软件。”—— GitHub 仓库
Salt 的创建是为了高速数据收集和扩展到数万台服务器以上。它使用 Python 模块来处理配置细节和特定操作。这些模块管理 Salt 的所有远程执行和状态管理行为。配置模块需要一定的技术技能。
Salt 使用客户端-服务器拓扑(Salt master 作为服务器,Salt minions 作为客户端)。配置保存在 Salt 状态文件中,这些文件描述了保持系统处于期望状态所需的一切。
结论
DevOps 工具的格局一直在发展,关注这些变化非常重要。我希望本文能鼓励您进一步探索这些概念和工具。如果是这样,云原生计算基金会(CNCF)在云原生景观项目 (Cloud Native Landscape Project) 中维护了一个很好的参考。
5 条评论