Kubernetes - 每个环境的不同设置

ger*_*lus 4 kubernetes

我们有一个在GKE Kubernetes上运行的应用程序,它希望auth url(用户将通过他的浏览器重定向)作为环境变量传递.

我们在每个环境中使用不同的命名空间

所以我们当前的pod配置看起来像这样:

  env:
    - name: ENV
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: AUTH_URL
      value: https://auth.$(ENV).example.org 
Run Code Online (Sandbox Code Playgroud)

所有工作都令人惊讶,我们可以拥有任意数量的动态环境,我们只需要应用-f config.yaml,它可以完美地工作而无需更改单个配置文件和任何第三方脚本.

现在生产我们想要使用不同的域,因此一般模式https://auth.$(ENV).example.org不再起作用.

我们有什么选择?

  1. 由于配置是在git repo中,因此为prod环境创建一个单独的分支
  2. 有一个默认的ConfigMap和一个特定的prod环境,并通过一些脚本运行它(如果存在prod-config.yaml然后使用它,否则使用config.yaml) - 但是这种方法我们不能再直接使用kubectl了
  3. 将此配置移动到应用程序级别,并为prodenv 配置单独的配置文件- 但这种情况与12factor应用程序相反?
  4. 其他...?

jax*_*orm 6

这似乎是使用掌舵的理想机会!

它很容易上手,只需将分蘖安装到您的群集中即可.

Helm使您能够创建可以安装到群集中的"图表"(类似于包).你可以很容易地模拟这些.作为一个例子,你可能有config.yaml看起来像这样:

env:
  - name: AUTH_URL
    value: {{ .Values.auth.url }} 
Run Code Online (Sandbox Code Playgroud)

然后,在掌舵图表中,您有一个values.yaml包含url默认值的内容,例如:

auth:
  url: https://auth.namespace.example.org
Run Code Online (Sandbox Code Playgroud)

您可以使用--values带有helm 的选项指定每个环境values.yaml文件,甚至可以使用--sethelm上的标志在使用时覆盖它们helm install.

请查看此处的文档,以获取有关值和模板如何在helm中工作的信息.它似乎非常适合您的用例