confd配置管理

随着服务数量的增多,迫切需要一套配置管理服务,其实etcd+confd可以算是一套精简版的配置管理服务平台,可以使用confd监控模式或者搭配ansible进行服务配置的批量修改和生效。

安装部署

  1. 下载可执行文件
    wget https://github.com/kelseyhightower/confd/releases/download/v0.14.0/confd-0.14.0-linux-amd64
  2. 创建confd放置目录和环境
    mkdir -p /opt/confd/bin
    mv confd-0.14.0-linux-amd64 /opt/confd/bin/confd
    chmod +x /opt/confd/bin/confd
    加入/etc/profile
    export PATH="$PATH:/opt/confd/bin"
  3. 创建配置存放目录
    默认情况下,confd会读取/etc/confd目录下对应的conf.d和templates目录
    mkdir -p /etc/confd/{conf.d,templates}

使用入门

  1. 在/etc/confd/conf.d目录下创建一个模板资源配置,如nginx.toml
    [nginx]
    src = "nginx.conf.tmpl" #指定对应的templates目录下的模板文件名
    dest = "/path/to/save/file/nginx.conf" #指定最后生成的配置文件放置位置
    keys = [
        "/subdomain",
        "/upstream",
    ] #指定keys列表,如果template中涉及多个子keys,建议此处填写上级目录
    prefix = "/nginx" #指定keys的前缀,注意,template中的key可以省略prefix,直接用keys中的开始
    check_cmd = "/user/sbin/nginx -t -c {{.src}}" #此处{{.src}}表示生成的临时文件
    reload_cmd = "/etc/init.d/nginx reload" #执行重载命令
    
  2. 在/etc/confd/templates目录下创建对应的template模板nginx.conf.tmpl
    upstream {{getv "subdomain"}} {
    {{range getv "/upstream/*"}}
        server {{.}}
    {{end}}
    }
    
    server {
        server_name {{getv "/subdomain"}}.example.com;
        location / {
            proxy_pass http://{{getv "subdomain"}};
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
  3. 运行confd同步配置(此处省略了key入etcd的过程,请自行百度)
    由于使用了etcd3版本,所以需要指定为etcdv3
./confd -onetime -backend etcdv3 -node http://127.0.0.1:2379

NOTICE:此例子抄自官方quick-start-guide文档

Template Resources

默认情况下Template resources存储在/etc/confd/conf.d目录下

必要参数

  • dest (string) - 保存文件
  • keys (array of strings) - 一组key列表
  • src (string) - 关联的template路径

可选参数

  • gid (int) - 文件所属gid
  • mode (string) - 文件的权限
  • uid (int) - 文件所属uid
  • reload_cmd (string) - 使配置生效的命令
  • check_cmd (string) - 检查配置。使用{{.src}}指向生成的源文件
  • prefix (string) - keys的前缀

一些知识点

由于没有系统学习过go语言,所以把自己认为的一些知识点记录下,方便使用
* template中“{{.}}”表示所有值,“{{.Key}}”对应key,“{{.Value}}”对应value
* “{{range $dir := lsdir "/services/web"}}dir name:\$dir{{end}}”,range命令会轮询lsdir目录列表,且每次把值赋值给$dir。
* 在template resources配置文件中存在keys列表,建议使用通配,不要精确每个key,如果精确key,且没有写全,则会导致在生成template时只使用keys列表中的key。
* 为了保障安全性,建议对getv设置默认值,格式为:

{{getv "/key" "default_value"}}

总结

confd会对新生成的文件进行md5检验,如果和原来的配置文件不一样,则覆盖,对配置的自动管理还是很方便的,其实最关键的是要规范化,只有规范化之后,才能进行自动可配。

##参考文档汇总:
安装文档:https://github.com/kelseyhightower/confd/blob/master/docs/installation.md
快速开始教程:https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md
官方template-resources文档:https://github.com/kelseyhightower/confd/blob/master/docs/template-resources.md
template中支持的函数列表:https://github.com/kelseyhightower/confd/blob/master/docs/templates.md

发表评论

电子邮件地址不会被公开。 必填项已用*标注