我能否在Kubernetes中设置默认命名空间?

61

我可以设置默认命名空间吗?也就是说:

$ kubectl get pods -n NAMESPACE

它让我不必每次都输入,特别是当我大部分时间都在同一命名空间时。


1
你正在寻找环境变量吗?创建环境变量 - alberand
Kubectx和kubens一起提供了很大的灵活性。 - Omer Sen
“default”命名空间就是一个命名空间,您基本上正在询问如何将“当前”命名空间设置为在我的bash会话或kubectlConfig内保存输入的努力,这个问题已经得到了回答。 - Karan Kaw
3个回答

112

是的,你可以根据文档设置 命名空间,如下所示:

$ kubectl config set-context --current --namespace=NAMESPACE

另外,您可以使用kubectx来实现这一点。


17

你也可以使用临时的 Linux 别名:

alias k='kubectl -n kube-system '

然后像这样使用它

k get pods

就是这样 ;)


1
考虑使用kubectl-aliases项目来完成类似的操作 :) - Eduardo Baitello
@EduardoBaitello 我的系统上有很多别名,但我只使用其中一小部分,这让我感到不安。 - Alex

1

我曾经使用下面显示的别名,并将变量N设置为要使用的命名空间。

# Set N=-nNamespace  if N isn't set then no harm, no namespace will be used
alias k='kubectl $N'
alias kg='kubectl get $N'
alias ka='kubectl apply $N'
alias kl='kubectl logs $N'

要切换到my-apps命名空间,我会使用:

N=-nmy-apps

在此之后,执行以下命令:

kg pods

实际上运行的是kubectl get -nmy-apps pods命令。

注意:如果bash变量N未设置,该命令仍然可以正常工作并按照kubectl默认方式运行。

要覆盖在N变量中设置的命名空间,只需添加--namespace选项,如-nAnotherNamespace,将使用最后一个定义的命名空间。

当然,为了更永久地(在当前shell中)切换,我只需设置如下的N变量:

N=-nAnotherNamespace
kg pods

虽然上述方法可行,但我了解到 kubens(与 kubectx 捆绑在一起,参见 github)更加持久,因为它会更新我的 $HOME/.kube/config 文件,添加一行指定当前使用的 k8s 集群要使用的命名空间(以下示例中为 dev)

contexts:
  - context:
        cluster: dev
        namespace: AnotherNamesapce  <<< THIS LINE IS ADDED by kubens
        user: user1
    name: dev
current-context: dev

但是所有的kubeens所做的就是使用已经构建在kubectl中的功能:

kubectl config set-context --current --namespace=AnotherNamespace

所以,一个更容易输入的简单别名同样有效,因此我选择了ksn作为(kubectl set namespace)的别名。

function ksn(){
  kubectl config set-context --current --namespace=$@
}

现在,为了切换上下文,我只需使用内置于 kubectl 中的功能! 要切换到命名空间 AnotherNamespace,我使用以下命令:

ksn AnotherNamespace

哒哒!最简单的“内置”解决方案。

摘要

对于bash用户,请将以下内容添加到您的$HOME/.bashrc文件中。

    function ksn(){
        if [ "$1" = "" ]
        then
            kubectl config view  -v6 2>&1 | grep 'Config loaded from file:' | sed -e 's/.*from file: /Config file:/'
            echo Current context: $(kubectl config current-context)
            echo Default namespace: $(kubectl config view --minify | grep namespace: | sed 's/.*namespace: *//')
        elif [ "$1" = "--unset" ]
        then
            kubectl config set-context --current --namespace=
        else
            kubectl config set-context --current --namespace=$1
        fi
    }

这让你可以设置命名空间,查看你的命名空间或删除默认命名空间(使用--unset)。请参见下面的三个命令:

# Set namespace
ksn AnotherNamespace

# Display the selected namespace
ksn
Config file: /home/user/.kube/config
Current context: dev
Default namespace: AnotherNamespace

# Unset/remove a default namespace
ksn --unset

另请参阅:https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/,以获取查看当前命名空间的命令:


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