我可以设置默认命名空间吗?也就是说:
$ kubectl get pods -n NAMESPACE
它让我不必每次都输入,特别是当我大部分时间都在同一命名空间时。
我可以设置默认命名空间吗?也就是说:
$ kubectl get pods -n NAMESPACE
它让我不必每次都输入,特别是当我大部分时间都在同一命名空间时。
你也可以使用临时的 Linux 别名:
alias k='kubectl -n kube-system '
然后像这样使用它
k get pods
就是这样 ;)
我曾经使用下面显示的别名,并将变量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/,以获取查看当前命名空间的命令: