Kubernetes生成动态配置文件



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

我将如何实现它?

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

的创建
  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. 配置文件内容

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

我们可以使用头盔生成config-templatesconfig-file-structure,然后将其安装在吊舱内的所需地点(例如config/redis.yaml)。然后,可以在集装箱运行时使用公用事业将这些配置模式转换为适当的文件。

基于环境/环境的动态创建配置文件可以使用以下方式实现。

Bash Way (使用evalcat):

  1. 创建一个名为 inator的文件,带有以下内容

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

  3. 执行
  4. 考虑到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}

最新更新