我想根据从env变量收集的值(ex.redis_host
)生成动态配置文件(redis,数据库),这些变量将因服务对服务而有所不同,并将其放在特定位置(config/redis.yml
))。
我将如何实现它?
动态配置文件生成可以包括
的创建配置文件结构:
例如,redis.yaml的配置文件可能会用于开发,分期,生产环境。例如:
分期
${ENVIRONMENT}: host: ${REDIS_HOST} namespace: ${REDIS_NAMESPACE} port: 6379
生产:
${ENVIRONMENT}: host: ${REDIS_HOST} namespace: ${REDIS_NAMESPACE} port: 6379 connect_timeout: ${REDIS_CONNECT_TIMEOUT} timeout: {REDIS_TIMEOUT}
配置文件内容:
配置文件的内容可以再次动态填充。
我们可以使用头盔生成config-templates
或config-file-structure
,然后将其安装在吊舱内的所需地点(例如config/redis.yaml)。然后,可以在集装箱运行时使用公用事业将这些配置模式转换为适当的文件。
基于环境/环境的动态创建配置文件可以使用以下方式实现。
Bash Way (使用eval
和cat
):
创建一个名为
inator
的文件,带有以下内容#!/bin/bash eval "cat <<EOF $(<$1) EOF " | tee $1 >/dev/null
使Inator作为可执行文件,并将其放置在Docker映像中,并将其作为入门点脚本
执行考虑到env变量在POD/Container内是可用的
eg:分期
$ env ENVIRONMENT=staging REDIS_HOST=abc.com REDIS_NAMESPACE=inator $ cat config/redis.yaml ${ENVIRONMENT}: host: ${REDIS_HOST} namespace: ${REDIS_NAMESPACE} port: 6379 $ ./inator config/redis.yaml $ cat config/redis.yaml staging: host: abc.com namespace: inator port: 6379
生产
$ env ENVIRONMENT=production REDIS_HOST=redis.prod.com REDIS_NAMESPACE=prod REDIS_CONNECT_TIMEOUT=5 TIMEOUT=10 $ cat config/redis.yaml ${ENVIRONMENT}: host: ${REDIS_HOST} namespace: ${REDIS_NAMESPACE} port: 6379 connect_timeout: ${REDIS_CONNECT_TIMEOUT} timeout: {REDIS_TIMEOUT} $ ./inator config/redis.yaml $ cat config/redis.yaml production: host: redis.prod.com namespace: prod port: 6379 connect_timeout: 5 timeout: 10
优点:无需其他包裹。
dockerize方法:
Dockerize是简化Docker容器中运行应用程序的实用程序。它在内部使用GO模板来填充环境变异的配置文件。
请查看此博客文章环境变量模板以获取更多信息。
也许Helm可以在这里为您提供帮助。Helm允许您将K8S YAML文件模板并将其捆绑到一个可部署的K8s软件包中。您的配置文件可能放在ConfigMaps中,也可以用舵机模板。如何在图表模板指南中详细说明。
在部署时间填充这些模板的一种方法是:
helm upgrade --install my-service /path/to/my/chart/package --set my.value=${MY_VALUE_ENV_VAR}