Deployment 替代容器等级库中定义的环境值
我有一个configmap,其中我在Deployment 替代容器等级库中定义的环境值,deployment,kubernetes,environment-variables,containers,configmap,Deployment,Kubernetes,Environment Variables,Containers,Configmap,我有一个configmap,其中我在数据部分定义了以下键值映射: apiVersion: v1 kind: ConfigMap metadata: namespace: test name: test-config data: TEST: "CONFIGMAP_VALUE" 然后在容器的定义中(在部署/状态集清单中),我有以下内容: env: - name: TEST value: "ANOTHER_VALUE"
数据
部分定义了以下键值映射:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: test
name: test-config
data:
TEST: "CONFIGMAP_VALUE"
然后在容器的定义中(在部署/状态集清单中),我有以下内容:
env:
- name: TEST
value: "ANOTHER_VALUE"
envFrom:
- configMapRef:
name: test-config
执行此操作时,我希望configmap中的值(TEST=“configmap\u value”)将覆盖容器规范中指定的(默认)值(TEST=“other\u value”),但事实并非如此(TEST总是从容器规范中获取值)。我找不到任何关于此的相关文档-是否可以实现这样的环境变量值覆盖?来自:
envFrom
:用于在容器中填充环境变量的源列表。源中定义的键必须是C_标识符。当容器启动时,所有无效密钥都将作为事件报告。当一个键存在于多个源中时,与最后一个源关联的值将优先。具有重复键的环境定义的值将优先。无法更新
因此,上面明确指出,env将优先于envFrom
当一个键存在于多个源中时,与最后一个源关联的值将优先
因此,有关覆盖,请参见以下内容:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: default
name: test-config
data:
TEST: "CONFIGMAP_VALUE"
---
apiVersion: v1
kind: Pod
metadata:
name: busy
namespace: default
spec:
containers:
- name: busybox
image: busybox
env:
- name: TEST
value: "DEFAULT_VAULT"
- name: TEST
valueFrom:
configMapKeyRef:
name: test-config
key: TEST
command:
- "sh"
- "-c"
- >
while true; do
echo "$(TEST)";
sleep 3600;
done
检查:
kubectl logs busy -n default
CONFIGMAP_VALUE
如果我在Docker映像中有一个entrypoint.sh,它也有一个由export TEST=123456生成的相同环境变量,该怎么办?@focuszheng则优先考虑,因为它是最后运行的。