Kubectl设置环境变量并运行命令

时间:2018-07-02 02:33:05

标签: kubernetes kubectl

我有一个在Kubernetes上运行的容器,我想从本地终端运行命令。基于容器的yaml文件的容器的工作目录位于/opt/gopath/src/a/。但是,我想在目录/opt/gopath/src/b/上运行命令。此外,在运行此命令之前,我还需要设置某些临时环境变量。所以目前,这就是我正在做的:

kubectl exec $pod_name -- bash -c "cd ../b/; env ENV_VARIABLE_1=ENV_VALUE_2 && env ENV_VARIABLE_2=ENV_VALUE_2 && <cmd to run>".

这似乎目前有效。但是,我不认为这是实现此目标的最佳方法。另外,运行此命令将显示容器中的所有环境变量-如果可能的话,我不希望将其打印出来。有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:5)

对于静态变量,我建议使用Config maps

由于您需要使用本地shell中的临时变量,因此无需使用冗长而复杂的命令,因为exec将您的终端连接到正在运行的Container(pod)。我测试了您的问题,并在本地系统上创建了一个简单的环境变量。我使用了您提供的语法:

kubectl exec -it $pod_name -- sh -c 'key=123 key2=121; echo "$key $key2"'

要传递环境变量,您可以像这样设置并添加定界符';'在变量和您的命令之间。

答案 1 :(得分:2)

这已经很晚了,但我相信它将非常有帮助。

envsubst可以一口气解决此问题。

以下命令将YAML文件中的env变量替换为实际值。

cat <filename>.yaml | envsubst | kubectl apply -f -

答案 2 :(得分:1)

i

答案 3 :(得分:1)

我建议在清单.yaml文件中指定详细信息(包括env变量),然后执行kubectl create -f manifest.yaml

与在命令行中包含大量标志相比,它具有更高的可重复性。