Kubernetes kubectl 访问环境变量
Kubernetes kubectl access environment variables
有谁知道为什么这个没有(显示空行):
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
但是这个有用吗?
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
运行 是否成功取决于您为 kube
使用的图像。但一般来说 echo
是一个 built-in 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
可执行文件,它是 Bourne Shell,它在您的默认容器中理解给定 Kubernetes 环境的 built-in echo
命令吊舱。
显示空行的原因与kubernetes或容器无关。在你的第一行中,$KUBERNETES_SERVICE_HOST
被 解释,shell 你在 中是 运行。并且您不能在 shell 中设置 KUBERNETES_SERVICE_HOST,因此它使用空字符串。
根据您所看到的情况,我推断您正在尝试找出 KUBERNETES_SERVICE_HOST 变量 inside 您的 kubernetes 容器的值。你的最后一个命令会为你做这件事,我怀疑下面的命令也会做同样的事情。
kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'
一个通常在没有 sh -c
的情况下工作的选项是:
kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST
在以下命令的情况下:
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'
有谁知道为什么这个没有(显示空行):
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
但是这个有用吗?
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
运行 是否成功取决于您为 kube
使用的图像。但一般来说 echo
是一个 built-in 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
可执行文件,它是 Bourne Shell,它在您的默认容器中理解给定 Kubernetes 环境的 built-in echo
命令吊舱。
显示空行的原因与kubernetes或容器无关。在你的第一行中,$KUBERNETES_SERVICE_HOST
被 解释,shell 你在 中是 运行。并且您不能在 shell 中设置 KUBERNETES_SERVICE_HOST,因此它使用空字符串。
根据您所看到的情况,我推断您正在尝试找出 KUBERNETES_SERVICE_HOST 变量 inside 您的 kubernetes 容器的值。你的最后一个命令会为你做这件事,我怀疑下面的命令也会做同样的事情。
kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'
一个通常在没有 sh -c
的情况下工作的选项是:
kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST
在以下命令的情况下:
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'