confd是一个轻量级的配置管理工具,支持etcd作为后端数据源,通过读取数据源数据,保证本地配置文件为最新;不仅如此 ,它还可以在配置文件更新后,检查配置文件语法有效性,以重新加载应用程序使配置生效。这里需要说明的是,confd虽然支持rancher作为数据源,但考虑易用性和扩展性等原因,最终我们还是选择了etcd。
和大多数部署方式一样,我们把confd部署在web server所在的ECS上,便于confd在监测到数据变化后及时更新配置文件和重启程序。confd的相关配置文件和模板文件部署在默认路径/etc/confd下,目录结构如下:
/etc/confd/ ├── conf .d├── confd .toml└── templates
confd.toml是confd的主配置文件,使用TOML格式编写,因为我们etcd是集群部署,有多个节点,而我又不想把confd的指令搞的又臭又长,所以将interval、nodes等选项写到了这个配置文件里。
cond.d目录存放web server的模板配置源文件,也使用TOML格式编写。该文件用于指定应用模板配置文件路径(src)、应用配置文件路径(dest)、数据源的key信息(keys)等。
templates目录存放web server下每个应用的模板配置文件。它使用Go支持的text/template语言格式进行编写。在confd从etcd中读取到最新应用注册信息后,通过下面的语句写入模板配置文件中:
{{rangegetvs"/${APP_NAME}/*"}}server {{.}}; {{end}}
图13: 应用发现示意图
通过supervisor管理confd进程。confd在运行后会每隔5秒对etcd进行轮询,当某个应用服务的K/V更新后,confd会读取该应用存储在etcd中的数据,写入到模板配置文件中,生成这个应用配置文件,最后由confd将配置文件写入到目标路径下,重新加载nginx程序使配置生效。(代码请参考:https://zhuanlan.zhihu.com/idevops)
总结
本文是五阿哥运维技术团队针对Docker容器技术在如何在持续交付过程中探索和实践,目前已经将发布部署权限开放给应用开发的owner,实现7*24小时“一站式”的持续交付,整体提高了公司的研发过程的交付能力。
接下来会不断优化持续交付过程中遇到的各种场景,逐渐完善容器云平台,同时会将容器云平台各种功能,总结的经验和教训不断分享给大家,给大家在工作中一些参考,避免走重复的“弯路”。
作者简介:刘晓明,五阿哥钢铁电商平台(wuage.com)运维技术负责人,拥有10年的互联网开发和运维经验。一直致力于运维工具的开发和运维专家服务的推进,赋能开发,不断提高研发效能。