代码之家  ›  专栏  ›  技术社区  ›  Abdul Ahmad

kubernetes为多个环境定义环境变量的干净方法

  •  0
  • Abdul Ahmad  · 技术社区  · 5 年前

    我正在使用一个web应用程序,我们将其部署到多个环境中;prod、staging、多个QA环境,甚至必要时还有一些开发人员环境。我们正在从elastic beanstalk迁移到kubernetes,并尝试以尽可能干净的方式设置config/yaml文件。问题是,我们已经为每个环境定义了一个yaml文件,其中包含一些秘密,这在大量复制/粘贴的情况下变得有点难以维护。以下是文件/内容的示例:

    免责声明 -这项工作主要由devops团队完成,我是一名网络工程师,试图帮助他们,所以我会尽可能地回答任何问题,但我可能没有所有正确的答案

    文件夹结构:

    - k8s // root folder
     - deployment.yaml
     - production
       - production-params.yaml
     - staging
       - staging-1-params.yaml
       - staging-2-params.yaml
       - qa-1-params.yaml
     - developers
       - some-dev-params.yaml
    

    每一个的内容 *-params.yaml 文件几乎是一样的,让我们看几个例子。

    生产参数。亚马尔

    apiVersion: 'kubernetes-client.io/v1'
    kind: ExternalSecret
    metadata:
      name: prod-params
    spec:
      backendType: systemManager
      data:
        - key:  /xxx/production/ENV_VAR_1
          name: ENV_VAR_1
        - key:  /xxx/production/ENV_VAR_2
          name: ENV_VAR_2
        - key:  /xxx/production/ENV_VAR_3
          name: ENV_VAR_3
        - key:  /xxx/production/ENV_VAR_4
          name: ENV_VAR_4
    

    登台1号参数。亚马尔

    apiVersion: 'kubernetes-client.io/v1'
    kind: ExternalSecret
    metadata:
      name: prod-params
    spec:
      backendType: systemManager
      data:
        - key:  /xxx/staging1/ENV_VAR_1
          name: ENV_VAR_1
        - key:  /xxx/staging1/ENV_VAR_2
          name: ENV_VAR_2
        - key:  /xxx/staging1/ENV_VAR_3
          name: ENV_VAR_3
        - key:  /xxx/staging1/ENV_VAR_4
          name: ENV_VAR_4
    

    其他每个params文件都是这样的,只有“key”中的文件路径发生了变化,但几乎是相同的。有没有办法让这些东西变得更有活力或更干净?我不是devops/k8s专业人士,我做了一些研究,似乎Helm在这里很有帮助,但不确定如何使用它来解决这个问题。我读了一篇有点帮助的教程,但我仍然感到困惑。如果有人知道任何资源或在过去解决过这个问题,我将非常感谢您的帮助

    0 回复  |  直到 5 年前
        1
  •  2
  •   David Maze    5 年前

    这是头盔擅长的替代品。如果你写了一个头盔图表,你可以使用它的模板语法来填充YAML的特定部分:

    # templates/external-secret.yaml
    apiVersion: 'kubernetes-client.io/v1'
    kind: ExternalSecret
    metadata:
      name: prod-params
    spec:
      backendType: systemManager
      data:
        - key:  /xxx/{{ .Values.environment }}/ENV_VAR_1
          name: ENV_VAR_1
        - key:  /xxx/{{ .Values.environment }}/ENV_VAR_2
          name: ENV_VAR_2
    {{/* etc. */}}
    

    然后,您可以提供每个环境的YAML设置文件:

    # production.yaml
    environment: production
    
    # staging-1.yaml
    environment: staging-1
    

    在部署应用程序时,可以将其中一个文件作为命令行选项提供,模板引擎可以看到该文件的内容 .Values .

    helm install the-app . -f staging-1.yaml
    

    这种方法可以让您将所有“相同”的东西放在 templates 目录,以及每个环境YAML值文件中每个环境不同的所有内容。

    推荐文章