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

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

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

    https://www.v2ex.com/t/536210#reply13

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

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

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

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

    看了上边说的那些要走的路,感觉都是 ops 相关的,我们都有实践过,且写过相关的文章介绍,感兴趣的可以看看,包括但不限于 CI/CD,日志管理等等
        20
    ns2250225   242 天前
    @37Y37 嗯,以关注,还有个问题想请教下,你们是怎样把 confd 生成的配置文件,推送到容器或者目标机器的呀
        21
    37Y37   242 天前
    @ns2250225 confd 就是个 client 端的 agnet,需要部署在 client 端,例如容器或者目标机器里,直接生成到 client 本地,然后 check 配置文件-->重新加载配置
        22
    ns2250225   242 天前
    @37Y37 那我想动态地修改 confd 的模板就比较困难了,因为是在容器里面
        23
    37Y37   242 天前
    @ns2250225 你可能没有仔细看文章,研究下吧,我也用在容器里,各种动态更新好用的不能行
        24
    ns2250225   241 天前
    @37Y37 那个 Web 的代码编辑器是什么来的呀
        25
    37Y37   237 天前
    ace
        26
    37Y37   237 天前   ♥ 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 里的内容,其他的都不需要关心,全部自动完成。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2271 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 15:31 · PVG 23:31 · LAX 08:31 · JFK 11:31
    ♥ Do have faith in what you're doing.