Kubernetes 在k8s yaml文件中,如何在容器中使用环境变量

Kubernetes 在k8s yaml文件中,如何在容器中使用环境变量,kubernetes,environment-variables,yaml,Kubernetes,Environment Variables,Yaml,例如,我制作了一个spark:2.4.3 docker图像,并在Dockerfile中设置了一个ENV spark_HOME 当我在yaml文件中使用SPARK\u HOME时(参见下面的代码),我得到了一个错误: ${SPARK_HOME}/sbin/start-master.sh:没有这样的文件或目录 这是否意味着我必须使用绝对路径 有没有办法在Kubernetes YAML文件中使用环境变量?没有办法 在Dockerfile中定义ENV时,您正在声明容器内部使用的变量 在.yaml文件中设

例如,我制作了一个spark:2.4.3 docker图像,并在Dockerfile中设置了一个ENV spark_HOME

当我在yaml文件中使用
SPARK\u HOME
时(参见下面的代码),我得到了一个错误:

${SPARK_HOME}/sbin/start-master.sh:没有这样的文件或目录

这是否意味着我必须使用绝对路径


有没有办法在Kubernetes YAML文件中使用环境变量?

没有办法

在Dockerfile中定义
ENV
时,您正在声明容器内部使用的变量

.yaml
文件中设置变量时,将在主机级别定义该变量

如果需要使用环境变量来运行程序,请使用bash脚本作为入口点:

#!/bin/bash
${SPARK_HOME}/sbin/start-master.sh \
--host 0.0.0.0
--port $(SPARK_MASTER_PORT) \
--webui-port $(SPARK_MASTER_WEBUI_PORT) \ 
&& tail -f $(SPARK_HOME)/logs/*

由于这个bash脚本是在容器中执行的,它将使用这些环境变量。

它不是这样工作的

在Dockerfile中定义
ENV
时,您正在声明容器内部使用的变量

.yaml
文件中设置变量时,将在主机级别定义该变量

如果需要使用环境变量来运行程序,请使用bash脚本作为入口点:

#!/bin/bash
${SPARK_HOME}/sbin/start-master.sh \
--host 0.0.0.0
--port $(SPARK_MASTER_PORT) \
--webui-port $(SPARK_MASTER_WEBUI_PORT) \ 
&& tail -f $(SPARK_HOME)/logs/*
由于此bash脚本在容器内执行,它将使用这些环境变量。

根据,
$(VAR)
(圆括号,如David Maze所写)适用于
args
。我的尝试表明,它也被替换为
命令中的

根据,

$(VAR)
(圆括号,如David Maze所写)适用于
args
。我的尝试表明它也在
命令中被替换

在pod规范中唯一有效的变量扩展形式是
$(variable_NAME)
;在
命令的第一行:
中,不识别花括号。pod规范中唯一有效的变量扩展形式是
$(variable_NAME)
;在
命令的第一行:
,不识别花括号。