Kubernetes生成dynamicconfiguration文件

我想根据从envvariables收集的值( ex.redis_host )生成dynamicconfiguration文件(redis,数据库),这些variables在服务和服务之间会有所不同,并将其放在特定的位置( config/redis.yml )。

我将如何能够实现它?

dynamicconfiguration文件生成可以包括创build

  1. configuration文件结构

    例如redis.yaml的configuration文件可能会用于开发,登台和生产环境。 例如:

    分期

     ${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} 
  2. configuration文件内容

    configuration文件的内容可以再次被dynamic填充。

我们可以使用helm生成config-templates或者config-file-structure ,并将它们挂载在pod内部的必要位置(比如config / redis.yaml)。然后这些configuration模板可以使用容器上的实用程序转换/渲染成适当的文件运行。

使用以下方法可以实现基于environment / environment_variables的configuration文件的dynamic创build。

Bash方式 (使用evalcat ):

  1. 使用以下内容创build一个名为inator的文件

     #!/bin/bash eval "cat <<EOF $(<$1) EOF " | tee $1 >/dev/null 
  2. 使inator成为可执行文件,并将其放置在Docker镜像中,并将其作为ENTRYPOINT脚本执行

  3. 考虑到env varibles在avod / container中是可用的

    例如:分期

     $ 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模板来填充环境variables中的configuration文件。

看看这个博客文章环境variables模板了解更多信息。

也许掌舵人可以帮助你在这里。 Helm允许你模拟你的k8s yaml文件并将它们绑定到一个可部署的k8s包中。 您的configuration文件可能被放置在ConfigMaps中,也可以用helm进行模板化。 在图表模板指南中可以看到详细的操作过程。

在部署时填充这些模板的一种方法是:

 helm upgrade --install my-service /path/to/my/chart/package --set my.value=${MY_VALUE_ENV_VAR}