【问题标题】:kubernetes clean way to define environment variables for multiple environmentskubernetes 为多个环境定义环境变量的干净方式
【发布时间】:2021-06-06 10:48:01
【问题描述】:

我正在使用一个网络应用程序,我们将其部署到多个环境; 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 文件的内容几乎相同,我们来看几个例子。

生产参数.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

staging-1-params.yaml

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

和其他所有参数文件都是这样,只有“键”中的文件路径发生变化,但几乎相同。有没有办法让这些变得更动态或更干净?我不是 devops/k8s 专业人士并且做了一些研究,似乎 Helm 在这里可以提供帮助,但不知道如何使用它来解决这个问题。我读了一个有点帮助的教程,但我仍然感到困惑。如果有人知道任何资源或过去曾解决过此问题,我将非常感谢您的帮助

【问题讨论】:

标签: kubernetes kubernetes-helm


【解决方案1】:

这是 Helm 擅长的替代品。如果您编写 Helm 图表,则可以使用其模板语法来填写 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 值文件中。

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多