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