使用 Kubernetes 1.19.3,我使用 3 种不同的方式初始化环境变量值:
-
env
pod 定义中具有显式键/值的字段
-
envFrom
using configMapRef
and secretRef
当键名重复时,如下例所示,DUPLIK1
and DUPLIK2
使用不同的值多次定义。
Kubernetes 使用什么优先规则为变量分配最终值?
# create some test Key/Value configs and Key/Value secrets
kubectl create configmap myconfigmap --from-literal=DUPLIK1=myConfig1 --from-literal=CMKEY1=CMval1 --from-literal=DUPLIK2=FromConfigMap -n mydebugns
kubectl create secret generic mysecret --from-literal=SECRETKEY1=SECval1 --from-literal=SECRETKEY2=SECval2 --from-literal=DUPLIK2=FromSecret -n mydebugns
# create a test pod
cat <<EOF | kubectl apply -n mydebugns -f -
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: container1
image: busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: DUPLIK1
value: "Key/Value defined in field env"
envFrom:
- configMapRef:
name: myconfigmap
- secretRef:
name: mysecret
restartPolicy: Never
EOF
显示环境变量值。结果是确定性的。删除资源+重新创建总是会得到相同的结果。
kubectl logs pod/pod1 -n mydebugns
CMKEY1=CMval1
DUPLIK1=Key/Value defined in field env
DUPLIK2=FromSecret
SECRETKEY1=SECval1
SECRETKEY2=SECval2
清理测试资源
kubectl delete pod/pod1 -n mydebugns
kubectl delete cm/myconfigmap -n mydebugns
kubectl delete secret/mysecret -n mydebugns
来自库伯内特斯docs https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables:
envVar
:要在容器中设置的环境变量列表。
无法更新。
envFrom
:填充环境变量的源列表
容器。源中定义的键必须是 C_IDENTIFIER。
当容器被关闭时,所有无效的键都将被报告为一个事件。
开始。当一个键存在于多个源中时,关联的值
最后一个来源将优先。由 Env 定义的值
具有重复键的将优先。无法更新。
上面的链接清楚地说明了env
将优先于envFrom
并且无法更新。
此外,当多个资源中存在引用的键时,与最后一个源关联的值将覆盖所有先前的值。
根据上述内容,您看到的结果是预期的行为:
-
DUPLIK1
添加为env
字段,因此无法更新
-
DUPLIK2
添加为envFrom
因此,秘密中的那个优先,因为它是最后定义的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)