对于配置管理大家有什么好的实践呀💐

2019-02-21 08:49:07 +08:00
 ns2250225
5970 次点击
所在节点    程序员
27 条回复
37Y37
2019-02-21 14:59:43 +08:00
@ns2250225 confd 就是个 client 端的 agnet,需要部署在 client 端,例如容器或者目标机器里,直接生成到 client 本地,然后 check 配置文件-->重新加载配置
ns2250225
2019-02-21 15:39:36 +08:00
@37Y37 那我想动态地修改 confd 的模板就比较困难了,因为是在容器里面
37Y37
2019-02-21 15:55:26 +08:00
@ns2250225 你可能没有仔细看文章,研究下吧,我也用在容器里,各种动态更新好用的不能行
ns2250225
2019-02-22 22:47:24 +08:00
@37Y37 那个 Web 的代码编辑器是什么来的呀
37Y37
2019-02-26 09:11:17 +08:00
ace
37Y37
2019-02-26 09:31:36 +08:00
@ns2250225 顺便再说一句我们为什么不需要考虑各个项目配置文件的不同,在 Docker 下是如何协作的

1. 为什么不需要考虑各个项目配置文件的不同,confd 模板文件我们并没有采用网上大部分的配置文件+kv 组合的方式,而是整个配置文件模板是一个 value,也就是说把配置文件的所有内容都存在一个 etcd 的 kv 中,而非存储配置文件中的个别内容,如下:
```
# cat /etc/confd/templates/nginx.conf.tmpl
{{getv "/conf/project/env/nginx/nginx.conf"}}
```

2. Docker 下的协作方式,我们是采用基础镜像+项目代码组成项目镜像的方式运行的,基础镜像包含项目的基础环境,其中就有 confd 服务,confd 服务有一个通用的 toml 配置,例如:
```
# cat /etc/confd/conf.d/nginx.conf.toml
[template]
src = "nginx.conf.tmpl"
dest = "/tmp/nginx.conf"

keys = [
"/conf/$PROJ/$ENVT/nginx/nginx.conf",
]

check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"
```

在启动 Docker 的时候加两个环境变量,PROJ 和 ENVT 分别表示当前运行的项目和环境,confd 根据上边的配置加上这两个变量信息自动去 etcd 里边找到对应的 key,拿 value 填充到 1 中的模板文件中

所以整个配置文件的更新过程,我们都只需要关心 kerrigan 里的内容,其他的都不需要关心,全部自动完成。
ql562482472
2023-02-08 11:26:46 +08:00
如今使用 k8s 恐怕你这个就是 configmap 的使用场景了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/537106

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX