Скажем, у меня есть два пространства имен k8s-app1 и k8s-app2

Я могу перечислить все модули из определенного пространства имен, используя команду ниже

kubectl get pods -n 

Нам нужно добавить пространство имен ко всем командам, чтобы вывести список объектов из соответствующих пространств имен. Есть ли способ установить конкретное пространство имен и список объектов без явного включения пространства имен?

P Ekambaram

Ответов: 8

Ответы (8)

Мне удалось переключить пространство имен, используя следующие шаги

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

This is how i have tested

# 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

Решение

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Explanation as requested

There is a npm package called k8ss which stands for K8S Switching between clusters and namespaces.

The full usage is

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

As in your case, you only need to switch namespace, so you can use the command without any configuration (as you already put a config file in the ~/.kube/config).

Advanced Usage

If you need to switch between different clusters then you need to put multiple config files in your home directory. In this case you can go to the package README to learn more.

Я создал функцию в .zshrc

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

Then I call ksns default

Проверить https://krew.sigs.k8s.io/ У них есть множество плагинов для разных случаев использования.

For installation https://krew.sigs.k8s.io/docs/user-guide/setup/install/

kubectl krew install kubens

then after running the following command will set the current context for you

kubens  

Вы можете использовать следующий пакет под названием kubectx, который упрощает переключение между кластерами с помощью kubectx

enter image description here

and switching between namespaces using kubens

enter image description here

Мне не нравились kubectx и kubens, потому что они добавляют еще одну букву для завершения bash в команду kubectl.

So I just wrote tiny kubectl-use plugin:

# 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".

If you interesting to it, check https://github.com/kvaps/kubectl-use

Мне нравятся мои ответы кратко, по делу и со ссылками на официальную документацию:

Answer:

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

From:

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

Есть несколько вариантов:

  • Switch namespace only using the kubectl commands::
kubectl config set-context --current --namespace=
  • Or, Create a new context with namespace defined:
kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev
  • Or, Use addons, like kubectx & kubens, the below command will switch the context to kube-system:
$ kubens kube-system 
  • Or, Another easy alternative that I like without installing third party tools, is using bash alias(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

2022 WebDevInsider