在 Kubernetes/Helm 中使用配置映射作为环境变量的优点

joz*_*joz 9 kubernetes kubernetes-helm

在创建部署时,我目前正在尝试找到一个应该将容器的环境变量外部化到配置映射中的原因。因此,不要使用定义环境变量

    env:
    - name: LANGUAGE
      value: "English"
Run Code Online (Sandbox Code Playgroud)

在deployment.yaml中使用

    env:
    - name: LANGUAGE
      valueFrom:
        configMapKeyRef:
          name: language
          key: LANGUAGE
Run Code Online (Sandbox Code Playgroud)

或者

      envFrom:
      - configMapRef:
          name: env-configmap
Run Code Online (Sandbox Code Playgroud)

还有一个额外的 configmap.yaml ,如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-configmap
data:
  LANGUAGE: English
Run Code Online (Sandbox Code Playgroud)

当然,当使用机密值时,应该从机密中读取它们,但这不适用于非机密变量。我看到的唯一优点是我可以重用这些配置映射,但除此之外,它只会使图表变得更加复杂,因为我现在必须确保 Pod 重新启动等......

那么:使用ConfigMaps读取环境变量还有哪些优点呢?

Rya*_*son 6

正如您所指出的,您可以重复使用 ConfigMap,以便图表的其他部分可以轻松地重复使用相同的环境变量。这有多有用取决于您有多少变量以及使用它们的位置。

ConfigMap 还可以作为集群中的对象供其他 Pod 使用,包括那些不属于图表的 Pod。这可能意味着您的 configmap 被安装在同一集群中的其他应用程序引用,或者您可能选择发布您的图表,然后它可能会打包为另一个图表中的依赖项。如果您的图表要用作另一个图表中的依赖项,那么它会使构建在您的图表之上的图表从 ConfigMap 引用部分配置变得更容易/更清晰。因此,有用性还取决于您打算如何使用图表。官方图表使用了大量的 ConfigMap,但他们有时会直接使用环境变量,并且出于不同的目的以多种方式使用 ConfigMap