例如,我有两个名称空间k8s-app1和k8s-app2

我可以使用下面的命令列出来自特定名称空间的所有pod

kubectl get pods -n <namespace>

我们需要将namespace附加到所有命令中,以列出来自各自名称空间的对象。是否有一种方法可以设置特定的名称空间和列表对象而不显式地包括名称空间?


我可以使用下面的步骤切换名称空间

kubectl config set-context $(kubectl config current-context) --namespace=<namespace>
kubectl config view | grep namespace
kubectl get pods

这就是我的测试方法

# Create namespaces k8s-app1, k8s-app2 and k8s-app3
master $ kubectl create ns k8s-app1
namespace/k8s-app1 created
master $ kubectl create ns k8s-app2
namespace/k8s-app2 created
master $ kubectl create ns k8s-app3
namespace/k8s-app3 created

# Create Service Account app1-sa in k8s-app1
# Service Account app2-sa in k8s-app2
# Service Account app3-sa in k8s-app3
master $ kubectl create sa app1-sa -n k8s-app1
serviceaccount/app1-sa created
master $ kubectl create sa app2-sa -n k8s-app2
serviceaccount/app2-sa created
master $ kubectl create sa app3-sa -n k8s-app3
serviceaccount/app3-sa created

# Switch namespace
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app1
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl config view | grep namespace
    namespace: k8s-app1
master $ kubectl get sa
NAME      SECRETS   AGE
app1-sa   1         1m
default   1         6m
master $
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app2
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl get sa
NAME      SECRETS   AGE
app2-sa   1         2m
default   1         7m
master $
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app3
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl get sa
NAME      SECRETS   AGE
app3-sa   1         2m
default   1         7m

有以下几种选择:

仅使用kubectl命令切换命名空间::

kubectl config set-context --current --namespace=<namespace>

或者,创建一个定义了namespace的新上下文:

kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev

或者,使用插件,如kubectx和kubens,下面的命令将上下文切换到kube-system:

$ kubens kube-system 

或者,另一个我喜欢的不安装第三方工具的简单替代方案是使用bash别名(linux)。

$ alias kubens='kubectl config set-context --current --namespace '
$ alias kubectx='kubectl config use-context '

// Usage
$ kubens kube-system    //Switch to a different namespace
$ kubectx docker        //Switch to separate context

您可以使用以下名为kubectx的包,它可以很容易地在使用kubectx的集群之间切换

以及使用kubens在名称空间之间切换


我希望我的回答简明扼要,并参考官方文件:

答:

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

来自:

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

# permanently save the namespace for all subsequent kubectl commands in that context.
kubectl config set-context --current --namespace=ggckad-s2

一个解决方案

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR;按要求解释

有一个名为k8ss的npm包,它代表K8S在集群和名称空间之间切换。

完整的用法是

k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace

与您的示例一样,您只需要切换名称空间,因此无需任何配置就可以使用该命令(因为您已经在~/.kube/config中放置了配置文件)。

高级用法

如果您需要在不同的集群之间切换,那么您需要在主目录中放置多个配置文件。在这种情况下,您可以访问README包以了解更多信息。


我不喜欢kubectx和kubens,因为他们在kubectl命令中增加了一个bash-补全字母。

所以我写了一个小的kubectl-use插件:

# kubectl use prod
Switched to context "prod".

# kubectl use default
Switched to namespace "default".

# kubectl use stage kube-system
Switched to context "stage".
Switched to namespace "kube-system".

如果你感兴趣,请登录https://github.com/kvaps/kubectl-use


我在.zshrc中创建了一个函数

ksns() { kubectl config set-context --current --namespace="$1" }

然后我调用ksns默认


看看https://krew.sigs.k8s.io/他们有很多不同用例的插件。

安装 https://krew.sigs.k8s.io/docs/user-guide/setup/install/

kubectl krew install kubens

然后运行以下命令将为您设置当前上下文

kubens <namespace> 

Kubectx—用于切换上下文/集群。可以安装“brew install kubectx” Kubens—用于在集群中的名称空间之间切换。也可以安装“brew install kubens”


Kubie可以切换上下文和名称空间。 如果您安装了FZF,体验将大大改善。

kubie ctx show the list of available contexts (if fzf is installed, display a selectable menu of contexts) kubie ctx <context> switch the current shell to the given context (spawns a shell if not a kubie shell) kubie ctx - switch back to the previous context kubie ctx <context> -r spawn a recursive shell in the given context kubie ctx <context> -n <namespace> spawn a shell in the given context and namespace kubie ns show the list of available namespaces (if fzf is installed, display a selectable menu of namespaces) kubie ns <namespace> switch the current shell to the given namespace kubie ns - switch back to the previous namespace kubie ns <namespace> -r spawn a recursive shell in the given namespace