Kubernetes kubectl访问环境变量

17

有人知道为什么这个会出现空行吗:

kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST

但这个有效吗?

kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
5个回答

22

运行成功将取决于您用于kube的镜像。但通常来说,echo是一个内置的Bourne shell命令。

使用此命令:

$ kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST

您没有启动Bourne Shell环境,容器中也没有可执行的echo命令。实际上,kubectl所做的就是在客户端上运行echo $KUBERNETES_SERVICE_HOST!您可以尝试运行以下命令:

$ kubectl exec kube -- echo $PWD

你会看到这是客户端的主目录。

而使用这个命令:

$ kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'

您的环境中存在一个可执行文件sh,这是一种了解给定Kubernetes环境下Pod默认容器中内置的echo命令的Bourne Shell。


4

如果有必要,通常情况下可以不使用 sh -c 来实现,另一种方法是:

kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST

2
这个显示空行的原因与kubernetes或容器无关。在你的第一行中,$KUBERNETES_SERVICE_HOST是由你所运行的shell解释的。而你在该shell中没有设置KUBERNETES_SERVICE_HOST,所以它使用了一个空字符串。
根据你所看到的情况,我推断你正在尝试查找KUBERNETES_SERVICE_HOST变量你的kubernetes容器内的值。你的最后一个命令将为您执行此操作,我认为以下命令也会产生相同的效果。
kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'

顺便提一下,这个命令不起作用。被接受的答案提到 echo 命令只会在当前 shell 中执行。所以这个命令只会在当前 shell 中显示 $KUBERNETES_SERVICE_HOST - Luyang Du

2
在以下命令中:
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST $KUBERNETES_SERVICE_HOST从本地环境扩展。在执行该命令之前,shell会执行参数扩展。如果我们拼写变量名称错误或未定义,扩展仍将发生,但结果为空字符串。由于本地主机上未定义KUBERNETES_SERVICE_HOST,因此将导致结果为空字符串。实际上,这是将在容器中执行的命令:
kubectl exec kube -- echo
当我们想要抑制所有扩展时,使用单引号。因此,在本例中,以下命令有效,因为单引号抑制了参数扩展,并且命令未经修改地传递给容器。
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'

0

通常使用以下命令:

kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST

$KUBERNETES_SERVICE_HOST 将首先被扩展并作为参数提供给echo。在您的环境中,该变量可能未设置,从而产生一个空行。

至于命令:

kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'

在容器中创建了一个shell,并指示 (-c) 将 'echo $KUBERNETES_SERVICE_HOST' 视为命令字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接