我正在使用一个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可以在这里提供帮助,但不确定如何使用它来解决这个问题。我读了一个教程,有点帮助,但我仍然很困惑。如果有人知道任何资源或在过去解决了这个问题,我真的很感激帮助
这是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值文件中。