Kubernetes/Helm 对环境变量使用配置映射的优势
Advantage of using configmaps for environment variables with Kubernetes/Helm
在创建部署时,我目前正在尝试寻找将容器的环境变量外化到配置映射中的原因。
所以不要用
定义环境变量
env:
- name: LANGUAGE
value: "English"
在deployment.yaml中使用
env:
- name: LANGUAGE
valueFrom:
configMapKeyRef:
name: language
key: LANGUAGE
或
envFrom:
- configMapRef:
name: env-configmap
还有一个 configmap.yaml 像这样:
apiVersion: v1
kind: ConfigMap
metadata:
name: env-configmap
data:
LANGUAGE: English
当然,使用机密值时,应该从机密中读取,但这不适用于非机密变量。我看到的唯一优势是我可以重用这些配置映射,但除此之外,它只会使图表更加复杂,因为我现在必须确保 pods 重新启动等...
那么:使用ConfigMaps读取环境变量还有哪些优势呢?
正如您所指出的,您可以重新使用 ConfigMap,以便图表的其他部分可以 。这有多大用处取决于您拥有多少变量以及它们在多少地方被使用。
ConfigMap 也可用作集群中的对象,其他 Pods 可以使用,包括那些不属于您的图表的对象。这可能意味着您的 configmap 被安装在同一集群中的其他应用程序引用,或者可能是您选择发布图表,然后它可能被打包为另一个图表中的依赖项。如果您的图表要用作另一个图表的依赖项,那么它会使构建在您图表之上的图表有点 easier/cleaner 从 ConfigMap 引用您的部分配置。因此,有用性还取决于您打算如何使用图表。 official charts use a lot of ConfigMaps but they do sometimes use environment variables directly and they use ConfigMaps in a variety of ways for different purposes.
通过使用 configmap,您可以将配置与 pod 定义分开。 ConfigMap 的一个优点是它允许您使变量的值可供其他 Pods 或不一定包含在图表中的应用程序访问。
您可以在运行时更新这些值,而无需更新部署。这意味着您可能不需要重新启动您的应用程序 (pods)。如果您不使用配置映射,则每次更新值时,您的应用程序(或 Pod)都将被重新创建。
虽然它确实增加了一些额外的复杂性,但对于何时使用 ConfigMap 可能会有很大的偏好因素。由于您的 ConfigMap 键是环境变量的名称
您可以使用 envForm 来简化您的部署,如图所示 here
在创建部署时,我目前正在尝试寻找将容器的环境变量外化到配置映射中的原因。 所以不要用
定义环境变量 env:
- name: LANGUAGE
value: "English"
在deployment.yaml中使用
env:
- name: LANGUAGE
valueFrom:
configMapKeyRef:
name: language
key: LANGUAGE
或
envFrom:
- configMapRef:
name: env-configmap
还有一个 configmap.yaml 像这样:
apiVersion: v1
kind: ConfigMap
metadata:
name: env-configmap
data:
LANGUAGE: English
当然,使用机密值时,应该从机密中读取,但这不适用于非机密变量。我看到的唯一优势是我可以重用这些配置映射,但除此之外,它只会使图表更加复杂,因为我现在必须确保 pods 重新启动等...
那么:使用ConfigMaps读取环境变量还有哪些优势呢?
正如您所指出的,您可以重新使用 ConfigMap,以便图表的其他部分可以
ConfigMap 也可用作集群中的对象,其他 Pods 可以使用,包括那些不属于您的图表的对象。这可能意味着您的 configmap 被安装在同一集群中的其他应用程序引用,或者可能是您选择发布图表,然后它可能被打包为另一个图表中的依赖项。如果您的图表要用作另一个图表的依赖项,那么它会使构建在您图表之上的图表有点 easier/cleaner 从 ConfigMap 引用您的部分配置。因此,有用性还取决于您打算如何使用图表。 official charts use a lot of ConfigMaps but they do sometimes use environment variables directly and they use ConfigMaps in a variety of ways for different purposes.
通过使用 configmap,您可以将配置与 pod 定义分开。 ConfigMap 的一个优点是它允许您使变量的值可供其他 Pods 或不一定包含在图表中的应用程序访问。
您可以在运行时更新这些值,而无需更新部署。这意味着您可能不需要重新启动您的应用程序 (pods)。如果您不使用配置映射,则每次更新值时,您的应用程序(或 Pod)都将被重新创建。
虽然它确实增加了一些额外的复杂性,但对于何时使用 ConfigMap 可能会有很大的偏好因素。由于您的 ConfigMap 键是环境变量的名称
您可以使用 envForm 来简化您的部署,如图所示 here