如何在kubernetes中切换名称空间

时间:2019-03-27 09:24:40

标签: kubernetes namespaces

说,我有两个命名空间k8s-app1和k8s-app2

我可以使用以下命令列出特定命名空间中的所有Pod

kubectl get pods -n <namespace>

需要将命名空间附加到所有命令中,以列出各个命名空间中的对象。有没有一种方法可以设置特定的名称空间并列出对象,而无需显式地包括名称空间?

8 个答案:

答案 0 :(得分:2)

您可以使用kubectl命令:

kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

或使用插件,例如kubectx & kubens,以下命令会将上下文切换为kube-system

$ kubens kube-system

如果您不想安装第三方工具,另一种简便的选择是使用别名。

$ alias kubens='f(){ kubectl config set-context $(kubectl config current-context) --namespace="$@";  unset -f f; }; f'
$ kubens kube-system

答案 1 :(得分:2)

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

composer require google/apiclient:"^2.4.1"

然后我打电话给google/apiclient

答案 2 :(得分:1)

我能够按照以下步骤切换名称空间

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

答案 3 :(得分:1)

您可以使用以下名为kubectx的程序包,使用 kubectx

可以很容易地在群集之间切换

enter image description here

并使用 kubens

在名称空间之间切换

enter image description here

答案 4 :(得分:1)

简而言之,我喜欢我的回答,并提及官方文档:

答案

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

答案 5 :(得分:0)

解决方案

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR;根据要求进行解释

有一个名为k8ss的npm软件包,代表K8S Switching between clusters and namespaces

完整用法是

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

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

高级用法

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

答案 6 :(得分:0)

我不喜欢 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

答案 7 :(得分:0)

查看 https://krew.sigs.k8s.io/ 他们为不同用例提供了大量插件。

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

kubectl krew install kubens

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

kubens <namespace>