配置管理的预备知识
在《持续交付》第二章的小结中,作者写道:配置管理是本书其他内容的基础。没有配置管理,根本谈不上持续集成、发布管理以及部署流水线。
可以看出,配置的管理是多么的重要。在小结中,作者使用以下几个问题来判断你的配置管理做得是否好:
•是否仅依靠保存于版本控制系统的数据(除了生产数据),就可以从无到有重建生产系统?•是否可以将应用程序回滚到以前某个正确的状态?•是否确保在测试、试运行和正式上线时以同样的方式创建部署环境?
如果你的配置管理流程比较好的话,所有的问题都应该是肯定的。
经过笔者长时间的一线配置管理的经验,要想更好实践《持续交付》中的配置管理,笔者认为配置管理中心应该能做到:
1.配置项的定义与配置的存储的解耦。比如应用可能会从Nacos中读取,也可以从环境变量里读取。2.配置项之间的相互引用:消除重复配置项。比如MySQL的连接字符串,可能同时在应用a的配置和应用b的配置中出现。3.配置项版本化:配置项变更跟踪;4.配置项的定义与配置的格式的解耦。比如同一个配置项在应用a使用的是XML格式,但是应用b使用的是YAML格式。5.配置项的自动化校验:当用户引入一个错误的配置项时,我们应该可以知道。6.配置项的作用域功能。7.配置项分组功能:比如按环境对配置项进行分组。8.配置项加密功能。
目前没有一个配置中心能实现以上所有的功能。但是,基于Ansible再配合其它工具,我们可以很低成本地实现以上大部分功能,虽然有些粗糙。
基于Ansible和Nacos的实践
本文以Ansible结合Nacos为例介绍如何更好的进行配置管理。
在本案例中,Ansible担任了配置中心的角色,实现配置项的定义,描述配置项与配置格式(XML、YAML、Properties)之间关系,描述配置项与配置存储(Nacos)之间的关系。Nacos纯粹只是一个存储配置的角色。