提问者:小点点

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


我正在使用一个Web应用程序,我们可以将其部署到多个环境中;prod、staging、多个QA环境,必要时甚至还有一些开发人员环境。我们正在从弹性豆茎迁移到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文件中的每一个的内容几乎相同,让我们看几个示例。

生产-params. yam l

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-params. yam l

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文件都是这样的,只有“键”中的文件路径在变化,但它几乎是相同的。有没有一种方法可以让这些有点动态或更干净?我不是devops/k8s专业人士,并做了一些研究,似乎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

当您去部署应用程序时,您可以提供其中一个文件作为命令行选项,文件的内容将作为对模板引擎可见。值

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

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