我很好奇ConfigMap和部署在kubernetes中的工作原理。
我想使用ConfigMap中的值作为部署窗格的参数。我用不同的图像试过这个,发现……
Kubernetes只能直接理解括号中的环境变量引用 $(VAR) ;例如,参见中的注释 定义容器的命令和参数 。
$(VAR)
args: [ "cmd", "$(BUCKET_NAME)", "$(OUTPUT_DATA)", "$(key)" ]
Kubernetes本身知道环境变量是什么并且替换,因此容器被启动为 cmd gs://bucket-name/ /data key 。
cmd gs://bucket-name/ /data key
command: ["sh"] args: - c - | echo $key echo ${BUCKET_NAME} echo $(OUTPUT_PATH)
Kubernetes扩大了 $(OUTPUT_PATH) 但是不理解任何其他形式的大括号,所以其他字符串按原样发送。既然你通过shell明确地运行它,两者都是 $key 和 ${BUCKET_NAME} 是标准的shell变量扩展,因此shell会扩展这些值。
$(OUTPUT_PATH)
$key
${BUCKET_NAME}
args: [ "cmd", "${BUCKET_NAME}", "${OUTPUT_DATA}", "${key}" ]
Kubernetes不会使用花括号扩展内容,并且没有shell或其他任何东西来扩展这些变量,因此变量字符串(而不是它们的内容)按原样传递。