DevOps之配置管理

简介: 配置与代码分离

什么是配置管理

在《持续交付—发布可靠软件的系统方法》一书是这样对配置管理进行定义的:

“配置管理是指一个过程,通过该过程,所有与项目相关的产物,以及它们之间的关系都被唯一定义、修改、存储和检索。”


一个应用程序是由软件代码、运行数据以及配置信息共同组成。在 《12 因素应用》(The Twelve-Factor App)中提到,应用程序的配置在不同部署环境(开发环境、测试环境、生产环境等)之间会有很大的差异。比如:数据库连接地址、缓存连接地址、第三方证书等。因此,需要将代码和配置分离,通过配置文件屏蔽各个部署环境的差异。


12 因素应用中也推荐将应用的配置存储于环境变量中。环境变量可以非常方便地在不同的部署间做修改,却不用动一行代码。因此,这里的配置主要是指应用程序的配置,配置管理主要是指如何存储不同环境的应用程序配置,以保证各个环境使用的都是同一份代码。


配置信息的描述和存储

配置信息的描述

通常情况下,配置项以键值对的形式来表示,比如 spring.application.name=serviceA,这代表一个配置项。应用程序使用配置文件来存储多个配置项,通过层级来组织配置项,特别是当以 yaml 格式展现时,层级会更加清晰,这也是目前采用最多的展现形式。除此之外还有 properties、xml 等形式。


配置信息的存储

配置信息比较常见的存储形式有数据库、版本控制库、文件目录、环境变量等。下面介绍一下每种形式的优缺点。

  • 数据库:优点是可以充分利用数据库的检索功能,能够按不同的条件查询配置项,可以维护多个环境的配置。缺点是需要对配置项进行建模,开发单独的配置管理系统用于管理数据库中的配置项。另外,配置项的版本、版本的回退都需要单独维护。


  • 版本控制库:优点是可以充分利用版本控制库本身的特性,对配置项的变更进行版本控制和变更追溯,非常容易地获取任意时刻的版本以及版本的回退,并且不需要开发额外的系统。此外,它也能管理多个环境的配置。缺点是不支持单个配置项的查询功能,每次更新都需要全量更新。


  • 文件目录:优点是直接从本地获取,不依赖于其他系统。缺点是不能有效地进行版本控制,每个环境都是单独的文件目录,不能有效管理和控制多环境下的配置信息。


  • 环境变量:优点是方便设置与读取,能够更好地与脚本集成,与每个环境绑定。缺点是不能有效地进行版本控制。


配置管理的时机

在应用程序生命周期中,不少阶段可以对应用程序进行配置,比如构建、部署、启动、运行和发布阶段。下面介绍下这几个阶段的是如何进行配置的。

  • 构建阶段:在构建时,可以将配置文件直接添加到生成的二进制文件中。这种方式由于二进制文件与配置文件捆绑在一起,每个环境都需要生成一个单独的二进制文件,违反了12 因素应用中的原则,所以不推荐使用该方法。


  • 部署阶段:在安装应用程序时,部署脚本或安装程序获取必需的配置信息。这种方式可以保证在二进制文件是同一个,遵循了 12 因素应用中将代码和配置分离的原则。


  • 启动阶段:在应用程序启动时,将配置文件加载进来。该方式需要保证影响应用程序启动的配置信息能够获取,否则程序无法启动。


  • 运行时阶段:在应用程序运行时,动态的变更配置文件。该方式主要用于在不需要停止服务的情况下变更配置信息。


  • 发布阶段:是指在应用程序真正发布上线的时候,将配置文件改为生产环境的版本。该方式只是用于生产环境发布,由于此时发布的软件和之前测试的是同一个,因此测试通过是具备发布上线条件的。


配置管理的实现方式

配置管理目前常见的实现方式:

  • 有 Spring Boot 的 Profile 形式;
  • 基于 Git 的配置管理;
  • 配置管理系统如携程的 Apollo;
  • 配置管理数据库 CMDB。


目录
相关文章
|
安全 Devops Ruby
2019 DevOps 必备面试题——配置管理篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君:CODING 戴维奥普斯 现在让我们来看看您对配置管理的了解程度。
|
4天前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
35 3
|
4天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第15天】 在当今的云计算时代,企业为了保持竞争力,不断寻求提高软件交付速度和服务质量的方法。本文将探讨如何通过结合DevOps原则和容器化技术来构建一个既高效又稳定的云基础设施。文章首先介绍了DevOps的核心概念及其如何促进开发与运维的协作,然后详细阐述了容器化技术如何优化应用部署和运行环境。最后,通过一个实际案例分析,展示了这种融合策略在提升自动化水平、加快部署速度以及增强系统稳定性方面的具体成效。
|
4天前
|
运维 监控 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第14天】 在当今快速迭代的软件发展环境中,传统的IT运维模式已难以满足业务需求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效且稳定的云基础设施。文中不仅分析了DevOps的核心理念及其对于提升运维效率的影响,还深入剖析了容器化技术如Docker和Kubernetes在自动化部署、弹性伸缩及微服务架构中的关键作用。此外,文章还将分享一系列实践经验,帮助读者理解如何在实际工作中将DevOps与容器化技术有效结合,以支持业务的敏捷性和可靠性。
18 2
|
4天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第14天】 随着云计算的普及和企业数字化转型的深入,构建一个高效、稳定且能快速响应市场变化的云基础设施已成为众多组织的技术战略核心。本文将探讨如何通过DevOps文化和容器化技术的结合,实现自动化运维流程,提升服务部署效率,确保系统的可扩展性和高可用性。我们还将分析面临的挑战及解决方案,并展示在实际案例中的应用成果。
6 0
|
4天前
|
安全 Devops 测试技术
深入了解阿里云云效DevOps:构建高效软件开发实践
阿里云云效DevOps,集成CI/CD与自动化测试,提升开发效率。支持持续集成确保代码质量,自动化测试加速交付,多环境及灰度发布保障安全可靠性。助团队构建高效开发实践,增强竞争力。
19 1
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。
|
4天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第1天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效、稳定且可扩展的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作的影响,随后详细介绍了容器化技术的基本概念、优势以及在现代云环境中的关键作用。接着,文中以一系列真实案例为基础,分析了将DevOps与容器化相结合时所面临的挑战和解决方案,并提出了一套实施框架。最后,文章总结了这种融合实践对提高运维效率、加快产品上市速度和保障系统稳定性的积极影响,同时对未来的技术趋势进行了展望。

热门文章

最新文章