美文网首页
第三方容器应用的配置文件管理方法

第三方容器应用的配置文件管理方法

作者: Daniels_Cai | 来源:发表于2018-01-15 17:07 被阅读396次

背景

第三方的容器应用程序,都不尽相同, 其配置文件的管理方法也多是多样,难以统一管理, 我们需要一种统一管理第三方配置文件的方法,同时要和我们的配置中心consul 集成。

Docker的 volume机制

我们知道docker 可以将宿主机的目录,挂载到容器中, 这相当于容器可是使用宿主机的目录,来存放持久化的数据。
同时,docker 提供了另外一种volume 机制可以从一个容器挂载另外一个容器的目录。 通过这个机制,我们可以将应应用程序运行的容器和配置文件存放的容器分离。

如何配置

我们以 promethus alertmanager 为例,讲解如何做到 配置文件和应用程序的分离,并将配置文件放到 配置中心上。

promethus alertmanager 的配置文件路径是 /etc/alertmanager/config.yml , 我们需要另外一个容器将 /etc/alertmanager 这个目录保存到 这个容器中。

docker-compose 文件如下

version: '2'
services:
  alertmanager:
    image: registry.datayes.com/cache/prometheus/alertmanager
    stdin_open: true
    tty: true
    volumes_from: 
    - config
    labels:
      io.rancher.container.pull_image: always
      io.rancher.sidekicks: config
  config:
    image: registry.datayes.com/base/alertmanager-base:1.0.0-442
    stdin_open: true
    tty: true
    volumes: 
    - /etc/alertmanager/
    environment:
      CONSUL_SERVER: ${CONSUL_SERVER}
      CONSUL_TOKEN: ${CONSUL_TOKEN}
      CONSUL_SPACE: ${CONSUL_SPACE}
      OVERWRITE_CONSUL_PATH_FOLDER: ${OVERWRITE_CONSUL_PATH_FOLDER}
    labels:
      io.rancher.container.pull_image: always

我们的应用程序容器为 alertmanager, 存放配置文件的容器为 config 。

config容器完成了如下功能

  1. 容器启动时,从consul 上获取配置文件,保存到容器中。
  2. 将自身的 /etc/alertmanager/ 暴露出来,供其他容器挂载。

alertmanager 完成的功能是

  1. 挂载 config 容器的volumes
  2. 使用sidekicks 保证两个容器在同一宿主机上

获取配置

config 容器使用的基础镜像中,包含了和 consul 集成的脚本(datayes-init) , 该脚本可以在每次容器启动时从 consul上获取配置文件,保存到对应的路径下。

datayes-init.conf 的配置文件如下, 该文件表示从 consul 的 config.yml 中获取内容,以文件形式保存到 /etc/alertmanager/config.yml

mode: file
file:
  - config.yml: /etc/alertmanager/config.yml

暴露volumes

这里只需要定义出暴露的volume 路径即可, 不需要填写映射路径。

    volumes: 
    - /etc/alertmanager/

挂载volumes

在 alertmanger 的容器定义中,增加 volumes_from 字段, 只需要填写目标容器的名称即可。 行为模式就是读取 config 容器定义的 volumes, 挂载路径保持一致。

    volumes_from: 
    - config

k8s 中如何配置

k8s 的pod功能, 非常好的解决了这个需求。

  1. pod 是容器组的概念, pod中的一组容器一定会在同一宿主机上。 这个实现比sidekicks 更好,同时是 k8s 的原生功能。
  2. pod 容器组使用的是同一个文件系统。 所以连volume 挂载都不需要做了。

从这里可以可以看出k8s pod设计的前瞻性, 而不是小白普遍认为的过度设计。

总结

第三方容器的配置文件,可以通过引入另一个独立存放配置文件的容器解决。 这个配置文件容器根据设定好的规则,从配置中心获取配置,并保存在本地目录中。配置文件容器将路径挂载给应用程序容器使用,实现了应用和配置的分离管理。 为了保证这两个容器在同一宿主机上, 我们需要使用 rancher的 sidekicks功能。而k8s 原生的 pod 就可以满足这个需求。

注: 本文中使用 容器替代了 服务的概念, 以方便读者理解。 docker-compose 中的 alertmanager 和 config 都是服务。

相关文章

  • 第三方容器应用的配置文件管理方法

    背景 第三方的容器应用程序,都不尽相同, 其配置文件的管理方法也多是多样,难以统一管理, 我们需要一种统一管理第三...

  • Docker的Dockerfile

    Dockerfile 配置容器化应用 • MariaDB:• 命令行选项• 配置文件• 容器化方式运行MariaD...

  • kubernetes 特殊存储卷ConfigMap

    理解ConfigMap ConfigMap允许您将配置文件从容器镜像中解耦,从而增强容器应用的可移植性。 Conf...

  • docker 命令存档

    启动,暂停和重启 进入运行容器修改文件 一个命令分解 一个实际应用 进入运行中容器,修改配置文件,重启容器

  • Kubernetes(十二)之ConfigMap资源对象

    ConfigMap资源对象 介绍 ConfigMap对象实现了将配置文件从容器镜像中解耦,从而增强了容器应用的可移...

  • 3、Docker中常见问题

    1、直接docker容器中配置文件,导致容器无法启动 容器中的配置文件被修改错误,导致容器无法启动,容器无法启动则...

  • Docker搭建Nacos1.4+Seata1.4+MySQL8

    1. 运行nacos容器 2. 运行seata容器 3. copy配置文件 4. 删除容器 5. 修改配置文件注册...

  • Spring Boot 2.0 的配置绑定类Bindable居然

    1. 前言 在开发Spring Boot应用时会用到根据条件来向Spring IoC容器注入Bean。比如配置文件...

  • Spring5(2) - IOC容器(1)

    IOC容器(1) 代码应用 (1) person类 (2)配置文件 (3)测试 (4)我们的另外一种测试方法:Sp...

  • docker初探

    简介 Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意...

网友评论

      本文标题:第三方容器应用的配置文件管理方法

      本文链接:https://www.haomeiwen.com/subject/oesdoxtx.html