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

发表于:2018-3-02 14:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Daniels_Cai    来源:简书

  背景
  第三方的容器应用程序,都不尽相同, 其配置文件的管理方法也多是多样,难以统一管理, 我们需要一种统一管理第三方配置文件的方法,同时要和我们的配置中心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 都是服务。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号