confd 是一款开源轻量配置管理工具,通过将存储于 etcd、Dynamodb、Redis、Vault、Zookeeper 等后端存储系统的数据与配置模板结合起来使用,可实现保持配置处于最新状态的目的。confd 支持的后端存储系统不包括 ACM,因此本文以支持 ACM 的定制版 confd 为例,介绍如何使用 confd 以无侵入的方式使用 ACM 配置。

教程概述

以 API/SDK 方式使用 ACM 配置的方式是一种侵入式的方式,因为需要改造您的业务代码。与此相对,使用 confd 则可在不改造业务代码的情况下使用 ACM 配置。本教程以一个示例说明如何安装 confd,如何搭配使用 confd 和 ACM 来管理配置,以及如何使用 confd 的监听功能。

准备工作

  • 在本地安装 Go:confd 的构建依赖于 Go 1.10 或更高版本。

  • 登录 ACM控制台,并创建一个示例配置。

    • Data ID:myapp.database.url
    • Group:不填写,即使用默认 Group。
    • 配置内容:jdbc:mysql://localhost:3306/dbName

以源码方式安装定制版 confd

请按照以下步骤安装定制版 confd。

  1. 创建 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
  2. 解压下载的 confd 源码。

    tar -xvf v0.19.2.tar.gz
  3. nacos-confd-0.19.2 移动至 confd 目录,并在该目录中通过编译命令生成可执行文件。

    mv nacos-confd-0.19.2 confd
    cd confd
    make
  4. 将生成的可执行文件拷贝至 /usr/local/bin 目录并执行该文件。如果能执行则说明 confd 安装成功。

    sudo cp bin/confd /usr/local/bin
    confd

搭配使用定制版 confd 和 ACM 管理配置

请按照以下步骤来搭配使用 confd 和 ACM。

  1. 创建 confd 所需的目录用来存放模板资源配置文件和模板文件。

    mkdir -p /etc/confd/{conf.d,templates}
  2. 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",
    ]
  3. 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"}}
  4. 启动 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 就会重新生成配置文件。

  1. 以监听模式启动 confd。

    confd -watch -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}
  2. 登录 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