我有一个在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>".
这似乎目前有效。但是,我不认为这是实现此目标的最佳方法。另外,运行此命令将显示容器中的所有环境变量-如果可能的话,我不希望将其打印出来。有人能指出我正确的方向吗?
答案 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
与在命令行中包含大量标志相比,它具有更高的可重复性。