使用Kubernetes 1.19.3,我使用3种不同的方法初始化env变量值:
- pod定义中带有显式键/值的
env
字段 envFrom
使用configMapRef
和secretRef
当键名重复时,如下面的示例所示,DUPLIK1
和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
型
1条答案
按热度按时间1hdlvixo1#
来自Kubernetes文档:
envVar
:要在容器中设置的环境变量列表。无法更新。envFrom
:要在容器中填充环境变量的源列表。源中定义的键必须是C_IDENTIFIER。当容器启动时,所有无效键都将作为事件报告。当键存在于多个源中时,与最后一个源关联的值将优先。由具有重复键的Env定义的值将优先。无法更新。上面的链接明确指出
env
将优先于envFrom
,并且无法更新。此外,当引用的键存在于多个资源中时,与最后一个源关联的值将覆盖所有以前的值。
基于以上所述,您看到的结果是预期的行为:
DUPLIK1
作为env
字段添加,因此无法更新DUPLIK2
被添加为envFrom
,因此来自秘密的那个优先,因为它是在最后定义的