confd 是一款开源轻量配置管理工具,通过将存储于 etcd、Dynamodb、Redis、Vault、Zookeeper 等后端存储系统的数据与配置模板结合起来使用,可实现保持配置处于最新状态的目的。confd 支持的后端存储系统不包括 ACM,因此本文以支持 ACM 的定制版 confd 为例,介绍如何使用 confd 以无侵入的方式使用 ACM 配置。
教程概述
以 API/SDK 方式使用 ACM 配置的方式是一种侵入式的方式,因为需要改造您的业务代码。与此相对,使用 confd 则可在不改造业务代码的情况下使用 ACM 配置。本教程以一个示例说明如何安装 confd,如何搭配使用 confd 和 ACM 来管理配置,以及如何使用 confd 的监听功能。
准备工作
以源码方式安装定制版 confd
请按照以下步骤安装定制版 confd。
创建 confd 目录,并将 confd 源码下载至该目录。
mkdir -p $GOPATH/src/github.com/kelseyhightower cd $GOPATH/src/github.com/kelseyhightower wget https://github.com/nacos-group/nacos-confd/archive/v0.19.2.tar.gz
解压下载的 confd 源码。
tar -xvf v0.19.2.tar.gz
将 nacos-confd-0.19.2 移动至 confd 目录,并在该目录中通过编译命令生成可执行文件。
mv nacos-confd-0.19.2 confd cd confd make
将生成的可执行文件拷贝至 /usr/local/bin 目录并执行该文件。如果能执行则说明 confd 安装成功。
sudo cp bin/confd /usr/local/bin confd
搭配使用定制版 confd 和 ACM 管理配置
请按照以下步骤来搭配使用 confd 和 ACM。
创建 confd 所需的目录用来存放模板资源配置文件和模板文件。
mkdir -p /etc/confd/{conf.d,templates}
在 conf.d 目录下创建 TOML 格式的 confd 模板资源配置文件。
vim /etc/confd/conf.d/myconfig.toml
在该资源配置文件中添加以下内容。
- src 参数指定 confd 模板文件
- dest 参数指定生成的配置文件
- keys 参数指定将模板渲染成配置文件所需的配置内容
[template] src = "myconfig.conf.tmpl" dest = "/tmp/myconfig.conf" keys = [ "/myapp/database/url", ]
在 templates 目录下创建 confd 模板文件。
vim /etc/confd/templates/myconfig.conf.tmpl
在该模板文件中添加以下内容。其含义为通过 getv 从 ACM 获取 Data ID 为
myapp.database.url
的配置内容。说明 在模板中必须将 ACM 的 Data ID 由myapp.database.url
转换为/myapp/database/url
格式,即以斜线(/)代替句点(.)并在开头增加一个斜线。database.url = {{getv "/myapp/database/url"}}
启动 confd。
说明 请将代码中的 {endpoint}、{namespace}、{accessKey}、{secretKey} 分别替换为 ACM 控制台上命名空间详情对话框内的 End Point、命名空间 ID、AccessKey、SecretKey。confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}
启动 confd 后,如果在 /tmp 目录下生成了包含以下内容的 myconfig.conf 文件,则说明 confd 已成功获取 ACM 配置内容。
database.url = jdbc:mysql://localhost:3306/dbName
开启 confd 监听
如果按照上述方法操作,confd 生成一次配置文件后就会退出。只要在 confd 启动命令中添加 -watch 参数即可监听后端系统(在本示例中为 ACM)的配置变更,一旦配置内容发生变化,confd 就会重新生成配置文件。
以监听模式启动 confd。
confd -watch -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}
登录 ACM 控制台,将示例配置 myapp.database.url 更改为以下内容并发布配置。
jdbc:mysql://localhost:3306/dbName2
如果在 /tmp 目录下生成了包含以下内容的 myconfig.conf 文件,则说明执行成功。
database.url = jdbc:mysql://localhost:3306/dbName2
更多信息
关于 ACM 定制版 confd 的详细信息参见 https://github.com/nacos-group/nacos-confd。