【问题标题】:How to get the current namespace of current context using kubectl如何使用 kubectl 获取当前上下文的当前命名空间
【发布时间】:2019-04-25 16:37:15
【问题描述】:

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

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

kubectl config get-contexts --no-headers | grep '*' | grep -Eo '\S+$'

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    如果您在上下文中选择了命名空间,这会很好用

    kubectl config view --minify -o jsonpath='{..namespace}'
    

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

    【讨论】:

    • 直截了当。考虑将kube-ps1 的建议添加到您的答案中。
    • 对我来说,这仅在省略 --minify 参数时有效:kubectl config view --output 'jsonpath={..namespace}'
    • --minify 从输出中删除当前上下文未使用的所有输出。因此需要正确打印当前的默认命名空间。如果它不打印任何内容,则您可能没有使用命名空间设置当前上下文。验证使用kubectl config current-context
    • 仅供参考,如果您已经在默认命名空间中;您可能没有得到任何作为此命令的响应。
    • 如果从命令行运行,在末尾添加 ; echo 会使响应更具可读性:kubectl config view --minify --output 'jsonpath={..namespace}'; echo
    【解决方案2】:

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

    当前命名空间中至少存在一个服务帐户,让我们利用它来检索当前命名空间:

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

    2。 kubectl

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

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

    3. kubens 插件

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

    # kubens -c
    default
    

    【讨论】:

    • 我喜欢kubens——很好地标注了它能够显示当前选定的ns。
    【解决方案3】:

    易于记忆的命令行

    kubectl config view | grep namespace
    

    【讨论】:

    • 这只是从您的配置中获取所有命名空间,而不仅仅显示当前使用的命名空间。您缺少“--minify”参数:“从输出中删除当前上下文未使用的所有信息”
    • 从 grep 响应中删除:kubectl config view | grep namespace: | cut -d":" -f2 | cut -d" " -f2
    • 仅供参考,如果您已经在默认命名空间中;您可能没有得到任何作为此命令的响应。
    • @ChrisHalcrow 请不要编辑以将答案更改为有意义的不同答案。 --minify [已经存在](stackoverflow.com/a/64242488/208273(); 不需要另一个答案。
    【解决方案4】:

    知道每个命名空间都会生成一个默认服务帐户,让我们使用它:

    kubectl describe sa default | grep Namespace
    

    【讨论】:

      【解决方案5】:

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

      $kubectl config view --minify | grep namespace
      

      【讨论】:

      • 这对我不起作用 - 它列出了多个命名空间,还列出了其他上下文中的命名空间!
      • 这将只查找命名空间值:kubectl config view --minify | grep -Po 'namespace: \K.*'
      猜你喜欢
      • 2012-02-12
      • 2018-02-13
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2022-06-26
      相关资源
      最近更新 更多