对于配置管理大家有什么好的实践呀 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ns2250225
V2EX    程序员

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

  •  
  •   ns2250225
    ns2250225 2019-02-21 08:49:07 +08:00 via Android 6381 次点击
    这是一个创建于 2430 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2019-02-21 13:50:28 +08:00
    感谢大家的回复啊,我的场景主要是,Nginx 的配置管理,看了下 Apollo,感觉并不能管理 Nginx 的配置呀,而且应用它还需要修改老项目的代码才行,
    27 条回复    2023-02-08 11:26:46 +08:00
    mm200p
        1
    mm200p  
       2019-02-21 09:03:14 +08:00
    zookeeper 不能实现你的需求么?
    pl01665077
        2
    pl01665077  
       2019-02-21 09:07:04 +08:00
    直接存放在环境变量~
    bantao
        3
    bantao  
       2019-02-21 09:11:17 +08:00
    携程开源阿波罗?
    Akagi201
        4
    Akagi201  
       2019-02-21 09:33:22 +08:00
    consul?
    Sharuru
        5
    Sharuru  
       2019-02-21 09:35:22 +08:00
    xcold
        6
    xcold  
       2019-02-21 09:39:46 +08:00   1
    huhujin
        7
    huhujin  
       2019-02-21 09:40:48 +08:00
    携程 阿波罗
    37Y37
        8
    37Y37  
       2019-02-21 09:46:25 +08:00   1
    前两天有个类似的帖子

    t/536210#reply13

    我们有实践是基于 etcd+conf 做的,基于配置文件的管理,对运维友好,

    实践方案: https://mp.weixin.qq.com/s/uGUvV4jl4YIvNztuepdC8A

    携程 阿波罗对开发友好,如果开发语言用的 java,这个就更合适了
    jingxyy
        9
    jingxyy  
       2019-02-21 10:06:11 +08:00   1
    说一个对于小型系统的实践方案吧
    使用简单格式的单一配置文件(方便查看、修改),通过环境变量指定配置文件路径(方便部署、切换,比如开发环境、生产环境等),配置文件不进 git (防止敏感信息泄露),git 库里放一个 config_example.json 之类的东西(方便队友),然后再约定一套命名机制。
    zxfreedom
        10
    zxfreedom  
       2019-02-21 10:25:31 +08:00
    阿波罗+1
    willvvvvv1
        11
    willvvvvv1  
       2019-02-21 13:21:37 +08:00
    阿波罗+2
    rayingecho
        12
    rayingecho  
       2019-02-21 13:38:24 +08:00   1
    场景都没有说, 有点没头没尾的
    应用配置管理(Apollo), 服务注册中心(Consul), 基础设施配置管理(Ansible) 都可以叫配置管理
    ns2250225
        13
    ns2250225  
    OP
       2019-02-21 13:45:50 +08:00
    @rayngecho 感谢回复,场景时应用配置管理,比如 Nginx 的配置管理,刚刚看了下 Apollo,好像并不能管理 Nginx 的配置呀,而且它需要 APP-KEY,需要修改老项目的代码才能应用配置,感觉不太合适
    passerbytiny
        14
    passerbytiny  
       2019-02-21 13:50:09 +08:00
    https://zh.wikipedia.org/wiki/%E7%B5%84%E6%85%8B%E7%AE%A1%E7%90%86

    为什么楼上的都回以为是配置文件 /配置项的管理。
    ns2250225
        15
    ns2250225  
    OP
       2019-02-21 13:53:11 +08:00
    @passerbytiny ,我没表述好
    rayingecho
        16
    rayingecho  
       2019-02-21 13:55:13 +08:00
    @ns2250225
    这个是 Ansible 的典型场景
    这些词其实也不是公认的名词, 确切地说 Apollo 只是一个配置中心, 应用需要自己来做一些集成
    另外: 楼主你是全干工程师吗...前几天还看你问 k8s...
    ns2250225
        17
    ns2250225  
    OP
       2019-02-21 14:00:12 +08:00
    @37Y37 感谢回复啊,因为主要是要管理 Nginx 的配置文件,暂时看来是您的方案比较适合我们,请问那个 web ui 能够开源吗
    ns2250225
        18
    ns2250225  
    OP
       2019-02-21 14:03:42 +08:00
    @rayingecho 最近要把虚拟机的项目迁移到 k8s 集群上面,好多东西要弄,暂时的方案是 Rancher 作为 K8s 的管理层,自己写了个 Web 界面调用 Rancher 作为应用层,CI/CD 就用 Rancher 的,负载均衡就用了 MetalLB,可是配置文件管理还是比较头大,其实还有日志管理的想借鉴下大家的意见,路很长啊感觉
    37Y37
        19
    37Y37  
       2019-02-21 14:17:28 +08:00
    @ns2250225 不好意思 web ui 暂时不开源,不过这个没什么技术壁垒,基本上都是操作 etcd 的 web 解密,会开发的话实现很简单

    看了上边说的那些要走的路,感觉都是 ops 相关的,我们都有实践过,且写过相关的文章介绍,感兴趣的可以看看,包括但不限于 CI/CD,日志管理等等
    ns2250225
        20
    ns2250225  
    OP
       2019-02-21 14:35:54 +08:00
    @37Y37 嗯,以关注,还有个问题想请教下,你们是怎样把 confd 生成的配置文件,推送到容器或者目标机器的呀
    37Y37
        21
    37Y37  
       2019-02-21 14:59:43 +08:00
    @ns2250225 confd 就是个 client 端的 agnet,需要部署在 client 端,例如容器或者目标机器里,直接生成到 client 本地,然后 check 配置文件-->重新加载配置
    ns2250225
        22
    ns2250225  
    OP
       2019-02-21 15:39:36 +08:00
    @37Y37 那我想动态地修改 confd 的模板就比较困难了,因为是在容器里面
    37Y37
        23
    37Y37  
       2019-02-21 15:55:26 +08:00
    @ns2250225 你可能没有仔细看文章,研究下吧,我也用在容器里,各种动态更新好用的不能行
    ns2250225
        24
    ns2250225  
    OP
       2019-02-22 22:47:24 +08:00
    @37Y37 那个 Web 的代码编辑器是什么来的呀
    37Y37
        25
    37Y37  
       2019-02-26 09:11:17 +08:00
    ace
    37Y37
        26
    37Y37  
       2019-02-26 09:31:36 +08:00   1
    @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 /td>
        27
    ql562482472  
       2023-02-08 11:26:46 +08:00
    如今使用 k8s 恐怕你这个就是 configmap 的使用场景了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4721 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 01:06 PVG 09:06 LAX 18:06 JFK 21:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86