V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ns2250225
V2EX  ›  程序员

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

  •  
  •   ns2250225 ·
    ns2250225 · 2019-02-21 08:49:07 +08:00 via Android · 5917 次点击
    这是一个创建于 2113 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 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
    前两天有个类似的帖子

    https://www.v2ex.com/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
    @rayingecho 感谢回复,场景时应用配置管理,比如 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
        27
    ql562482472  
       2023-02-08 11:26:46 +08:00
    如今使用 k8s 恐怕你这个就是 configmap 的使用场景了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4201 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:11 · PVG 12:11 · LAX 20:11 · JFK 23:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.