百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

ETCD——confd配置管理(etc 配置)

off999 2025-04-05 21:40 39 浏览 0 评论

confd简介

什么是confd

Confd是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。对应的后端存储可以是etcd,redis、zookeeper等。

confd用途

随着上线的服务越来越多,配置文件和配置项越来越复杂,管理和变更维护配置文件逐渐成为一件麻烦的事情。在这时候,就需要一套集中化的配置文件管理系统。一方面实现配置文件的统一管理,版本回溯,另一方面提供配置文件的批量自动下发,已经动态加载重启服务。而confd+etcd就是为解决上述问题提出的一种解决思路。

confd工作原理

使用confd

  • confd配置文件默认在/etc/confd中,可以通过参数-confdir指定。目录中包含两个子目录,分别是:conf.d templates。
  • confd会先读取conf.d目录中的配置文件(toml格式),然后根据文件指定的模板路径去渲染模板,再执行

接下来以NGINX配置为例,通过监听etcd存储变化,动态的修改NGINX主页。

安装confd

[root@tiaoban ~]# wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
[root@tiaoban ~]# mv confd-0.16.0-linux-amd64 /usr/local/bin/confd
[root@tiaoban ~]# chmod +x /usr/local/bin/confd
[root@tiaoban ~]# confd -version
confd 0.16.0 (Git SHA: 7217b0ca, Go Version: go1.10.2)

创建nginx资源文件

[root@tiaoban ~]# dnf -y install nginx 
[root@tiaoban ~]# systemctl start nginx
# 准备两个html文件目录
[root@tiaoban nginx]# pwd
/usr/share/nginx
[root@tiaoban nginx]# tree .
.
├── html
│   ├── 404.html
│   ├── 50x.html
│   ├── index.html
│   ├── nginx-logo.png
│   └── poweredby.png
├── modules
│   ├── mod-http-image-filter.conf
│   ├── mod-http-perl.conf
│   ├── mod-http-xslt-filter.conf
│   ├── mod-mail.conf
│   └── mod-stream.conf
├── v1
│   └── index.html
└── v2
    └── index.html

4 directories, 12 files
[root@tiaoban nginx]# cat v1/index.html 


	
		nginx-v1
		
	
		

hello nginx v1

[root@tiaoban nginx]# cat v2/index.html nginx-v2

hello nginx v2

创建配置目录

[root@tiaoban ~]# mkdir -p /etc/confd/{conf.d,templates}

confd目录主要使用两个核心的目录

  • conf.d:主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。
  • templates:配置模板Template,即基于不同组件的配置,修改为符合 Golang text templates的模板文件。

创建模板文件

Template定义了单一应用配置的模板,默认存储在/etc/confd/templates目录下,模板文件符合Go的text/template格式。

模板文件常用函数有base,get,gets,lsdir,json等。具体可参考
https://github.com/kelseyhightower/confd/blob/master/docs/templates.md。

此处的逻辑是使用root_dir变量,动态更新nginx的root文件目录,如果root_dir这个key不存在,则默认值为/usr/share/nginx/html。

[root@tiaoban ~]# cd /etc/confd/templates
[root@tiaoban templates]# cat nginx.tmpl
server {
        listen       80;
        server_name  ~^.*$;
        location / {
            root  {{getv "/root_dir" "/usr/share/nginx/html"}};
            index  index.html index.htm;
        }
    }

创建配置文件

模板源配置文件是TOML格式的文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。默认目录在/etc/confd/conf.d。

  • 必要参数

dest:目标文件(字符串类型)

keys : 键数组(字符串数组)

src :配置模板的相对路径(字符串)

  • 可选参数

gid:应该拥有该文件的gid。默认为有效的gid(整数)

mode:文件的权限模式(字符串)

uid:应该拥有该文件的uid。默认为有效的uid(整数)

reload_cmd:重新加载配置的命令(字符串)

check_cmd:检查配置的命令(字符串)

prefix:键前缀的字符串(字符串)

[root@tiaoban confd]# cat /etc/confd/conf.d/myapp-nginx.toml 
[template]
prefix = "/nginx" # 指定字符串前缀,便于区分不同confd项目
src = "nginx.tmpl" #配置模板相对路径
dest = "/etc/nginx/conf.d/myapp.conf" # 目标路径
mode = "0644" # 文件权限
keys = [
  "/root_dir"
] # 键数组,与模板使用的键对应
check_cmd = "/usr/sbin/nginx -t" # 配置检查命令
reload_cmd = "/usr/sbin/nginx -s reload" # 重新加载配置命令 

初始化etcd中的数据

先在etcd中创建一个名为/nginx/root_dir的键,值为/usr/share/nginx/v1。需要注意的是如果在配置文件中指定前缀,那么在创建键时键名为前缀+keys。

[root@tiaoban ~]# etcdctl put /nginx/root_dir '/usr/share/nginx/v1'
OK

启动confd的服务

confd支持以daemon或者onetime两种模式运行

  • onetime模式:只会生成一次配置,之后key无论变化不会再生成,一般很少使用这种模式。
[root@tiaoban ~]# confd -onetime -backend etcd -node http://127.0.0.1:2379
  • daemon模式:confd会监听后端存储的配置变化,根据配置模板动态生成目标配置文件。
[root@tiaoban ~]# confd -watch -backend etcdv3 -node http://192.168.10.100:2379
2023-03-22T22:04:55+08:00 tiaoban confd[5312]: INFO Backend set to etcdv3
2023-03-22T22:04:55+08:00 tiaoban confd[5312]: INFO Starting confd
2023-03-22T22:04:55+08:00 tiaoban confd[5312]: INFO Backend source(s) set to http://192.168.10.100:2379
2023-03-22T22:04:55+08:00 tiaoban confd[5312]: INFO Target config /etc/nginx/conf.d/myapp.conf out of sync
2023-03-22T22:04:55+08:00 tiaoban confd[5312]: INFO Target config /etc/nginx/conf.d/myapp.conf has been updated

由日志可知,已经成功根据模板文件和etcd的key生成了配置文件。

访问验证

查看生成的nginx配置文件

[root@tiaoban ~]# cat /etc/nginx/conf.d/myapp.conf 
server {
        listen       80;
        server_name  ~^.*$;
        location / {
            root  /usr/share/nginx/v1;
            index  index.html index.htm;
        }
    }

访问nginx服务,查看页面

[root@tiaoban ~]# curl 127.0.0.1/


  
    nginx-v1
  
  
    

hello nginx v1

ok,v1版本的nginx服务访问正常,接下来我们更新/nginx/root_dir,模拟版本更新操作

[root@tiaoban ~]# etcdctl put /nginx/root_dir '/usr/share/nginx/v2'
OK

观察confd日志,有检测到了etcd键值变化,并触发了自动更新操作

[root@tiaoban confd]# confd -watch -backend etcdv3 -node http://192.168.10.100:2379
2023-03-22T22:06:06+08:00 tiaoban confd[5344]: INFO Backend set to etcdv3
2023-03-22T22:06:06+08:00 tiaoban confd[5344]: INFO Starting confd
2023-03-22T22:06:06+08:00 tiaoban confd[5344]: INFO Backend source(s) set to http://192.168.10.100:2379
2023-03-22T22:06:06+08:00 tiaoban confd[5344]: INFO Target config /etc/nginx/conf.d/myapp.conf out of sync
2023-03-22T22:06:06+08:00 tiaoban confd[5344]: INFO Target config /etc/nginx/conf.d/myapp.conf has been updated
2023-03-22T22:09:25+08:00 tiaoban confd[5344]: INFO /etc/nginx/conf.d/myapp.conf has md5sum 86f04524c0f5e58d81f86649b6feef79 should be 47da5e695a2c5ad1e5561bec683a920c
2023-03-22T22:09:25+08:00 tiaoban confd[5344]: INFO Target config /etc/nginx/conf.d/myapp.conf out of sync
2023-03-22T22:09:25+08:00 tiaoban confd[5344]: INFO Target config /etc/nginx/conf.d/myapp.conf has been updated

查看新生成的nginx配置文件,并访问验证

[root@tiaoban ~]# cat /etc/nginx/conf.d/myapp.conf 
server {
        listen       80;
        server_name  ~^.*$;
        location / {
            root  /usr/share/nginx/v2;
            index  index.html index.htm;
        }
    }
[root@tiaoban ~]# curl 127.0.0.1/



nginx-v2


hello nginx v2

由此可见,confd实时监听/nginx/root_dir这个key的值变化,当键的值更新时,自动渲染模板文件,生成了新的nginx配置,并自动执行了nginx -t和nginx -s reload操作。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: