open-hackathon icon indicating copy to clipboard operation
open-hackathon copied to clipboard

容器化后将配置与代码分离

Open hyponet opened this issue 5 years ago • 5 comments

现在的配置主要是修改 config.py,但是这样挂载配置的方式比较难做到配置和代码分离。

比较推荐的实践是使用文本格式的配置文件,比如 .yml.json.conf 等,在部署时,直接指定相应的文件,在容器启动时,将文本文件通过 volume 挂载到容器中,容器中的程序启动时 load。

在 K8s 中,一般通过 ConfigMap 托管文本配置文件,然后在 Deployment 配置使用该 ConfigMap,Pod 启动时,文本配置会通过 Volume 挂载在容器中。

样例: 在 K8s 使用 nginx 配置文件: https://gist.github.com/petitviolet/d36f33d145d0bbf4b54eb187b79d0244

hyponet avatar Apr 02 '20 12:04 hyponet

要不通过检查machine-id, /proc/self/cgroup来判断是不是Docker环境,然后再考虑是利用config_docker还是config_sample

99Kies avatar Apr 02 '20 16:04 99Kies

没有必要用这么黑魔法的方法,还是工程化一点,使用最普遍的方案解决。

而且就算判断出是是容器,采用了 config_docker,那么修改配置的时候需要重新 build 镜像,这点就非常的没必要。

hyponet avatar Apr 03 '20 05:04 hyponet

改动比较简单,config.py 的上层逻辑不会改动(依赖 config.py 的部分)

原有工作原理:

  1. config.py 中通过常量记录的配置(或者启动时 load 环境变量赋值给常量)
  2. 业务逻辑直接或间接从 config.py 中读取常量

改进:

  1. config.py 启动时从 yaml 配置文件拉取配置,并赋值给常量
  2. 业务逻辑不做任何改变,因为业务逻辑只从 config.py 中读,并不 care config.py 的常量值从哪来的

注意点: yaml 的配置文件地址的获取: 方案一:指定目录,比如 /etc/open-hackathon/config.yml 方案二:通过环境变量,config.py 读取 CONFIG_FILE_PATH 环境变量,得知配置文件在哪 方案三:先读环境变量,在从默认指定目录读取

hyponet avatar Apr 03 '20 13:04 hyponet

client server端都需要优化

99Kies avatar Apr 04 '20 15:04 99Kies

client server端都需要优化

@99Kies 水歌他们在重写 web,在 「重构」看板上的任务可以不考虑 client

hyponet avatar Apr 10 '20 13:04 hyponet