Close

配置管理

配置管理如何帮助工程团队构建强大而稳定的系统

Ian Buchanan 头像
Ian Buchanan

首席解决方案工程师


20 世纪 50 年代,美国国防部制定了技术管理学科,以跟踪复杂系统开发过程中的变化。它给这个系统和各种迭代起了非常技术性的名称,直到 2001 年,它发布了一本综合性指南,建立了现在称为配置管理的技术管理系统。如今,配置管理不仅被国防部使用,还用于软件开发、IT 服务管理、土木工程、工业工程等。

什么是配置管理?


配置管理图

配置管理是一个系统工程流程,用于在产品整个生命周期中建立产品属性的一致性。在技术领域,配置管理是一种 IT 管理流程,用于跟踪 IT 系统的各个配置项目。IT 系统由精细度各不相同的 IT 资产组成。一项 IT 资产可能代表一款软件、一台服务器或一组服务器。下面重点介绍配置管理,因为它直接应用于 IT 软件资产和软件资产 CI/CD。

软件配置管理是一个系统工程流程,用于跟踪和监视对软件系统配置元数据的更改。在软件开发中,配置管理通常与版本控制和 CI/CD 基础架构一起使用。这篇文章重点介绍其在敏捷的 CI/CD 软件环境中的现代应用和使用。

为什么配置管理很重要?


代码库图标
相关资料

微服务与单体式架构

三环图标
查看解决方案

使用 Compass 来管理组件

配置管理通过使用自动管理和监控配置数据更新的工具,帮助工程团队构建强大而稳定的系统。复杂的软件系统由精细度和复杂程度不同的组件组成。有关更具体的示例,请参考微服务架构。微服务架构中的每个服务都使用配置元数据进行自身注册和初始化。软件配置元数据的一些示例包括:

  • CPU、RAM 等的计算硬件资源分配规范
  • 指定与其他服务、数据库或域的外部连接的端点
  • 密码和加密密钥等机密

这些配置值很容易成为马后炮,导致配置变得混乱和分散。想象一下,办公室里有许多带有密码和网址的便利贴。配置管理通过创建具有中央配置位置的“数据源”来解决这一难题。

Git 是管理配置数据的绝佳平台。将配置数据移至 Git 存储库可以实现版本控制,并将存储库作为数据源。版本控制还解决了另一个配置问题:意外的破坏性变更。通过使用代码审查和版本控制来管理意外变更有助于最大限度地减少停机时间。

配置值通常会添加、删除或修改。如果没有版本控制,这可能会导致问题。一个团队成员可以调整硬件分配值,以便软件在其个人笔记本电脑上更高效地运行。稍后将软件部署到生产环境中时,此新配置的效果可能不太理想,或者可能会中断。

版本控制和配置管理通过增加配置修改的可见性来解决此问题。当对配置数据进行更改时,版本控制系统会对其进行跟踪,从而允许团队成员查看修改的审核跟踪。

配置版本控制允许回滚或“撤消”配置功能,这有助于避免意外损坏。应用于配置的版本控制可以快速恢复到最后一个已知的稳定状态。

配置管理如何与 DevOps、CI/CD 和敏捷相结合


从历史上看,配置数据很难辩驳,很容易成为马后炮。它不是真正的代码,所以不会立即放入版本控制中,也不是一流的数据,所以它不会存储在主数据库中。传统的和小规模的系统管理通常是通过一系列脚本和临时流程来完成的。配置数据有时会被忽略,但这对系统运行至关重要。

云基础架构的兴起促成了新的基础架构管理模式的发展和采用。复杂的、基于云的系统架构通过使用配置数据文件进行管理和部署。这些新的云平台允许团队通过人和机器可读的数据文件(如 YAML)指定所需的硬件资源和网络连接。然后读取数据文件,并在云中配置基础架构。这种模式称为基础架构即代码 (IaC)。

DevOps 配置管理

在互联网应用开发的早期,硬件资源和系统管理主要是手动执行的。系统管理员在根据配置数据手动调配和管理硬件资源的同时,对配置数据进行辩驳。

配置管理是 DevOps 生命周期的关键部分。DevOps 配置是系统管理角色的演变和自动化,它为基础架构管理和部署带来了自动化。

DevOps 配置还将系统管理职责置于软件工程的保护之下。如今,企业利用它使软件工程师能够按需请求和调配所需的资源。这消除了软件开发团队等待来自单独系统管理团队的资源的潜在组织依赖关系瓶颈。

CI/CD 配置管理

CI/CD 配置管理利用基于拉取请求的代码审查工作流程将代码变更自动部署到实时软件系统。同样的流程可以应用于配置变更。可以设置 CI/CD,以便批准的配置变更请求可以立即部署到正在运行的系统。GitOps 工作流程就是一个很好的例子。

敏捷的配置管理

配置管理使敏捷团队能够清楚地对配置工作进行分类并确定优先级。配置工作的示例包括日常工作和任务,例如:

  • 更新生产 SSL 证书
  • 添加新的数据库端点
  • 更改开发、暂存和生产电子邮件服务的密码。
  • 为新的第三方集成添加 API 密钥

配置管理平台到位后,团队就可以了解配置任务所需的工作。配置管理工作可以确定为其他工作的依赖关系,并作为敏捷冲刺的一部分进行适当处理。

配置管理工具


配置管理工具:Terraform、Saltstack、Puppet、Git、Chef、Ansible 和 Docker

Git

Git 是业界领先的版本控制系统,用于跟踪代码变更。在 Git 存储库中将配置管理数据与代码一起添加可提供整个项目的整体版本控制视图。Git 是高级配置管理中的基础工具。下方列出的其他配置管理工具旨在存储在 Git 存储库中,并利用 Git 版本控制跟踪。

Docker

Docker 引入了容器化,这是一种高级的配置管理形式,就像配置锁定一样。Docker 基于名为 Dockerfile 的配置文件,该文件包含一系列命令,这些命令经过评估以重建预期的操作系统状态快照。Docker 从这些 Dockerfile 创建容器,这些文件是预配置应用的快照。Dockerfile 提交到 Git 存储库以进行版本跟踪,并需要额外的配置管理才能将它们部署到基础架构。

Terraform

Terraform 是 HasiCorp 推出的开源配置管理平台。Terraform 使用 IaC 来配置和管理集群、云基础架构或服务。Terraform 支持 Amazon Web Services (AWS)、Microsoft Azure 和其他云平台。对于服务器、数据库和队列等常见基础架构组件,每个云平台都有自己的表示形式和接口。Terraform 为云平台构建了配置工具的抽象层,使团队能够编写其基础架构的可重复定义文件。

Ansible、Salt Stack、Chef、Puppet

Ansible、Salt Stack、Chef 和 Puppet 是 IT 自动化框架。这些框架自动化了许多传统系统管理员的流程。每个框架都使用一系列配置数据文件(通常是 YAML 或 XML),这些文件由可执行文件进行评估。

配置数据文件指定了配置系统时要执行的操作序列。然后,这些操作将由可执行文件运行。不同系统的可执行文件在语言上有所不同——Ansible 和 Salt Stack 基于 Python,Chef 基于 Ruby。此工作流程类似于运行临时 shell 脚本,但通过各自的平台生态系统提供了更加结构化和精致的体验。这些工具将带来实现 CI/CD 所需的自动化。

如何实施配置管理


识别

配置管理的第一个操作是信息收集。配置数据应从不同的应用环境、开发、暂存和生产环境中汇总和编译所有正在使用的组件和服务。应识别密码和密钥等任何机密数据,并进行安全加密和存储。此时,应将配置数据组织到数据文件中,这些文件可以作为中心数据源。

基线

配置数据经过聚合和整理后,就可以建立基线。基线配置是一种已知的配置状态,它将成功运行相关软件而不会出错。此基线通常是通过查看正常运行的生产环境的配置并提交这些配置设置来创建的。

版本控制

您的开发项目应使用版本控制系统。如果没有,请安装 Git,初始化项目的存储库,然后将配置数据文件添加到存储库中。在将配置数据添加到存储库之前,请注意以下几点:确保任何机密数据(如密码或密钥)都使用外部密钥加密。意外提交到存储库的机密数据是一个巨大的风险。需要将它从存储库历史记录中清除,否则就有可能被利用。

审计

组织配置数据并将其添加到存储库中,可以实现协作和系统配置的可见性。然后,软件团队用来审查和编辑代码的流行拉取请求工作流程可以应用于配置数据文件。这有助于建立审计和会计系统。应用于配置的任何变更都必须经过团队的审核和接受。这增加了配置变更的责任感和可见性。

IT 运营和 CMDB


到目前为止,我们已经讨论了配置管理,因为它适用于敏捷开发和 CI/CD 环境中的软件资产。IT 运营团队也在积极管理配置,并在配置管理数据库 (CMDB) 中进行管理。CMDB 存储有关硬件、软件和网络组件以及它们之间关系的信息。IT 运营团队关心的是相互依赖关系、许可证、合同,以及确保一切正常运行所需的服务和预算。有 IT 运营团队管理相互依赖关系以及软件团队管理配置即代码,组织可以尽享稳定的系统和出色的正常运行时间。

总之...


配置管理是管理复杂软件系统的必要工具。缺少配置管理会导致可靠性、正常运行时间和系统扩展能力方面的严重问题。许多当前的软件开发工具都内置了配置管理功能。Bitbucket 提供了一个功能强大的配置管理系统,该系统围绕 Git 拉取请求工作流程和 CI/CD 管道构建。

Ian Buchanan
Ian Buchanan

虽然 Ian 在 Java 和 .NET 领域拥有丰富而深厚的经验,但他最广为人知的身份是对大型企业采取敏捷开发方法的拥护者。目前,他专注于新兴的 DevOps 文化和可支持更好的持续集成、持续交付和数据分析的工具。在他的职业生涯中,他成功管理了处在各个生命周期阶段的所有企业软件开发工具。他曾推动了企业范围的流程改善,提高了工作效率、产品质量和客户满意度。他建立了多个重视自我导向和自我管理的跨国团队。不说话或编码的时候,Ian 总是沉迷于解析器、元编程和领域特定语言。通过 @devpartisan 关注 Ian。


分享此文章
下一主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

Compass 社区

克服障碍插图

教程:创建组件

地图插图

免费试用 Compass

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up