Jak zmienić przestrzeń nazw w Kubernetes

92

Powiedzmy, mam dwie przestrzenie nazw k8s-app1 i k8s-app2

Mogę wyświetlić listę wszystkich podów z określonej przestrzeni nazw, używając poniższego polecenia

kubectl get pods -n <namespace>

Musimy dołączyć przestrzeń nazw do wszystkich poleceń, aby wyświetlić listę obiektów z odpowiednich przestrzeni nazw. Czy istnieje sposób na ustawienie określonej przestrzeni nazw i listy obiektów bez jawnego dołączania przestrzeni nazw?

P Ekambaram
źródło
Cześć, kubectl config set-context --helpmoże być, którego szukasz
Suresh Vishnoi

Odpowiedzi:

157

Lubię moje odpowiedzi krótkie, rzeczowe iz odniesieniami do oficjalnej dokumentacji:

Odpowiedź :

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

Od :

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
Kot w butach
źródło
7
Dobrą praktyką jest sprawdzenie, czy bieżąca przestrzeń nazw uległa zmianie, wykonując następujące poleceniekubectl config view | grep namespace:
tet
45

Możesz użyć poleceń kubectl:

Zmień tylko przestrzeń nazw:

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

Utwórz nowy kontekst ze zdefiniowaną przestrzenią nazw:

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

Lub użyj dodatków, takich jak kubectx i kubens , poniższe polecenie zmieni kontekst na kube-system:

$ kubens kube-system 

Inną prostą alternatywą, którą wolę, jeśli nie chcesz instalować narzędzi innych firm, prostym sposobem jest użycie aliasu.

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

$ kubens kube-system    //Switch to a different namespace
$ kubectx docker        //Switch to separate context
Diego Mendes
źródło
jak usunąć aktualną przestrzeń nazw?
stephen
1
kubectl config set-context --current --namespace=""
Diego Mendes
24

Udało mi się zmienić przestrzeń nazw, wykonując poniższe czynności

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

Tak właśnie przetestowałem

# 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
P Ekambaram
źródło
1
Być może będziesz musiał użyć, kubectl config view --minify | grep namespace:aby uzyskać aktualną przestrzeń nazw.
dabest1
15

Możesz użyć następującego pakietu o nazwie kubectx, który bardzo ułatwia przełączanie się między klastrami za pomocą kubectx

wprowadź opis obrazu tutaj

i przełączanie się między przestrzeniami nazw za pomocą kubens

wprowadź opis obrazu tutaj

Mohamed Saleh
źródło
13

Nie podobały mi się kubectx i kubens, ponieważ dodają jeszcze jedną literę dla komplementacji bash do polecenia kubectl .

Właśnie napisałem małą wtyczkę 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".

Jeśli Cię to interesuje, sprawdź https://github.com/kvaps/kubectl-use

kvaps
źródło
1
To zdecydowanie moja ulubiona odpowiedź! Chociaż istnieje całkiem rozsądne, ale niestety długie polecenie, aby to zrobić bez rozszerzania lub aliasowania poleceń kubectl, to rozwiązanie jest nie tylko krótkie i przyjemne w użyciu, ale także - całkiem ładnie - pokazuje, jak prawidłowo rozszerzyć kubectl za pomocą prostego i zrozumiałego polecenia . Chylę czoło, dobry panie! ;-)
Saustrup
2

Utworzyłem funkcję w .zshrc

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

Wtedy dzwonię ksns default

Ben Collins
źródło
-2

Rozwiązanie

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Wyjaśnienie zgodnie z żądaniem

Jest to pakiet o nazwie npm k8ssco oznacza K8S Switching between clusters and namespaces.

Pełne wykorzystanie jest

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

Tak jak w twoim przypadku, musisz tylko zmienić przestrzeń nazw, więc możesz użyć polecenia bez żadnej konfiguracji (ponieważ umieściłeś już plik konfiguracyjny w ~/.kube/config).

Zaawansowane użycie

Jeśli chcesz przełączać się między różnymi klastrami, musisz umieścić wiele plików konfiguracyjnych w katalogu domowym. W takim przypadku możesz przejść do pakietu README, aby dowiedzieć się więcej.

Jeff Tian
źródło