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

问题描述 投票:7回答:3

我有一个在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>".

这似乎目前正在起作用。但是,我不相信这是实现这一目标的最佳方式。此外,运行此命令会显示容器中的所有环境变量 - 如果可能,我希望不打印。有人能指出我正确的方向吗?

kubernetes kubectl
3个回答
5
投票

在静态变量的情况下,我建议使用Config maps

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

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

要传递env变量,你可以像这样设置并添加分隔符';'变量和命令之间。


1
投票

bash -c "cd ../b/; env ENV_VARIABLE_1=ENV_VALUE_2 ENV_VARIABLE_2=ENV_VALUE_2 <cmd to run>"


1
投票

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

这比在命令行中拥有大量标志更加可重复。

© www.soinside.com 2019 - 2024. All rights reserved.