如何使用kubectl获取当前上下文的当前名称空间?

Mik*_*sov 13 kubernetes

我正在尝试使用获取当前使用的Kubernetes上下文的名称空间kubectl

我知道有一个命令,kubectl config get-contexts但我看到它无法在json / yaml中输出。我随附的唯一脚本是这样的:

kubectl config get-contexts --no-headers | grep '*' | grep -Eo '\S+$'
Run Code Online (Sandbox Code Playgroud)

Jos*_*sto 19

如果您在上下文中选择了名称空间,则此方法可以正常工作

kubectl config view --minify --output 'jsonpath={..namespace}'
Run Code Online (Sandbox Code Playgroud)

您始终可以使用kube-ps1在提示中显示当前上下文和名称空间

  • 如果从命令行运行添加 `; 最后的 echo` 使得响应稍微更具可读性:`kubectl config view --minify --output 'jsonpath={..namespace}'; 回声` (3认同)
  • 开门见山。考虑在您的答案中添加[kube-ps1](https://github.com/jonmosco/kube-ps1)的建议。 (2认同)
  • 仅供参考,如果您已经在默认命名空间中;您可能不会收到任何该命令的响应。 (2认同)

pet*_*o16 19

使用默认服务帐户:

kubectl describe sa default | grep Namespace
Run Code Online (Sandbox Code Playgroud)


fja*_*mes 16

1、使用当前命名空间的服务帐号

当前命名空间中至少存在一个服务帐户,因此使用它来检索当前命名空间:

NS=$(kubectl get sa -o=jsonpath='{.items[0]..metadata.namespace}')
Run Code Online (Sandbox Code Playgroud)

2.kubectl

有时kubectl config view --minify不会显示default命名空间,因此获取命名空间的更稳健的解决方案是:

NS=$(kubectl config view --minify --output 'jsonpath={..namespace}')
NS=$([ ! -z "$NS" ] && echo "$NS" || echo "default")
Run Code Online (Sandbox Code Playgroud)

3.kubens插件

kubens 插件,https://github.com/ahmetb/kubectx/blob/master/kubens,也是一个有趣的解决方案:

# kubens -c
default
Run Code Online (Sandbox Code Playgroud)


小智 10

这将打印当前正在使用的命名空间。

$kubectl config view --minify | grep namespace
Run Code Online (Sandbox Code Playgroud)


小智 9

易于记忆的命令行

kubectl config view --minify | grep namespace
Run Code Online (Sandbox Code Playgroud)

  • 这只是 grep 配置中的所有命名空间,而不仅仅是显示当前使用的命名空间。您缺少“--minify”参数:“从输出中删除当前上下文未使用的所有信息” (7认同)
  • 仅供参考,如果您已经在默认命名空间中;您可能不会收到任何该命令的响应。 (2认同)