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

kubernetes为多个环境定义环境变量的干净方法,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我正在使用一个web应用程序,我们将其部署到多个环境中;prod、staging、多个QA环境,甚至必要时还有一些开发人员环境。我们正在从elastic beanstalk迁移到kubernetes,并尝试以尽可能干净的方式设置config/yaml文件。问题是,我们已经为每个环境定义了一个yaml文件,其中包含一些秘密,这在大量复制/粘贴的情况下变得有点难以维护。以下是文件/内容的示例: 免责声明-这项工作主要由devops团队完成,我是一名网络工程师,试图帮助他们,因此我会尽可能地回答任何问

我正在使用一个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
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
staging-1-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
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在这里很有帮助,但不确定如何使用它来解决这个问题。我读了一篇有点帮助的教程,但我仍然感到困惑。如果有人知道任何资源或在过去解决过这个问题,我将非常感谢您的帮助

这是Helm擅长的替代品。如果编写舵图,可以使用其模板语法填充YAML的特定部分:

#模板/external-secret.yaml
apiVersion:'kubernetes client.io/v1'
种类:外部秘密
元数据:
名称:prod params
规格:
后端类型:systemManager
数据:
-键:/xxx/{{.Values.environment}}/ENV_VAR_1
姓名:ENV_VAR_1
-键:/xxx/{{.Values.environment}}/ENV_VAR_2
姓名:ENV_VAR_2
{{/*etc.*/}
然后,您可以提供每个环境的YAML设置文件:

#production.yaml
环境:生产
#staging-1.yaml
环境:staging-1
当您要部署应用程序时,您可以将其中一个文件作为命令行选项提供,并且该文件的内容将以
.Values
的形式对模板引擎可见

helm安装应用程序-f-1.yaml

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

这是Helm擅长的替代品。如果编写舵图,可以使用其模板语法填充YAML的特定部分:

#模板/external-secret.yaml
apiVersion:'kubernetes client.io/v1'
种类:外部秘密
元数据:
名称:prod params
规格:
后端类型:systemManager
数据:
-键:/xxx/{{.Values.environment}}/ENV_VAR_1
姓名:ENV_VAR_1
-键:/xxx/{{.Values.environment}}/ENV_VAR_2
姓名:ENV_VAR_2
{{/*etc.*/}
然后,您可以提供每个环境的YAML设置文件:

#production.yaml
环境:生产
#staging-1.yaml
环境:staging-1
当您要部署应用程序时,您可以将其中一个文件作为命令行选项提供,并且该文件的内容将以
.Values
的形式对模板引擎可见

helm安装应用程序-f-1.yaml

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

请看这篇关于使用Kustomize管理不同配置的文章:请看这篇关于使用Kustomize管理不同配置的文章: