Kubernetes生成动态配置文件

时间:2017-12-15 11:28:26

标签: docker kubernetes kubernetes-helm

我想基于从env变量收集的值(ex.redis_host)生成动态配置文件(redis,数据库),这些变量因服务而异,并将其放在特定位置(config/redis.yml )。

我将如何实现它?

2 个答案:

答案 0 :(得分:2)

动态配置文件生成可以包括

的创建
  1. 配置文件结构

    例如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}
    
  2. 配置文件内容

    配置文件的内容可以再次动态填充。

  3. 我们可以使用helm生成config-templatesconfig-file-structure并将它们安装在pod中所需的位置(比如config / redis.yaml)。然后可以将这些配置模板转换/渲染为适当的在容器运行时使用实用程序的文件。

    可以使用以下方法实现基于environment / environment_variables动态创建配置文件。

    Bash Way (使用evalcat):

    1. 使用以下内容创建名为inator的文件

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

    3. 考虑到env varibles可以在pod /容器中使用

      例如: 分期

      $ 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
      
    4. 优点: 无需额外包装。

      dockerize方式

      dockerize是一个简化在docker容器中运行应用程序的实用程序。它在内部使用go模板从环境变量标签中填充配置文件。

      有关详细信息,请查看此博文Environment Variable Templates

答案 1 :(得分:1)

也许helm可以帮到你。 Helm允许您模拟k8s yaml文件并将它们捆绑到一个可部署的k8s包中。 您的配置文件可能放在ConfigMaps中,也可以使用helm进行模板化。如何详细完成这一点可以在chart template guide

中看到

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

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