So wechseln Sie den Namespace in Kubernetes

84

Angenommen, ich habe zwei Namespaces k8s-app1 und k8s-app2

Mit dem folgenden Befehl kann ich alle Pods aus einem bestimmten Namespace auflisten

kubectl get pods -n <namespace>

Wir müssen allen Befehlen einen Namespace anhängen, um Objekte aus den jeweiligen Namespaces aufzulisten. Gibt es eine Möglichkeit, einen bestimmten Namespace festzulegen und Objekte aufzulisten, ohne den Namespace explizit einzuschließen?

P Ekambaram
quelle
Hallo, kubectl config set-context --helpvielleicht suchen Sie
Suresh Vishnoi

Antworten:

143

Ich mag meine Antworten kurz, auf den Punkt und mit Verweisen auf offizielle Dokumentation:

Antwort :

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

Von :

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
Der gestiefelte Kater
quelle
7
Es wird empfohlen, zu überprüfen, ob sich der aktuelle Namespace geändert hat, indem Sie den folgenden Befehl ausführenkubectl config view | grep namespace:
tet
41

Sie können entweder die kubectl-Befehle verwenden:

Nur Namespace wechseln:

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

Erstellen Sie einen neuen Kontext mit definiertem Namespace:

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

Oder verwenden Sie Addons wie kubectx & kubens . Der folgende Befehl wechselt den Kontext zu kube-system:

$ kubens kube-system

Eine andere einfache Alternative, die ich bevorzuge, Sie möchten keine Tools von Drittanbietern installieren, ist die Verwendung von Alias.

$ 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
quelle
Wie deaktiviert man den aktuellen Namespace?
Stephen
1
kubectl config set-context --current --namespace=""
Diego Mendes
24

Mit den folgenden Schritten konnte ich den Namespace wechseln

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

So habe ich getestet

# 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
quelle
1
Möglicherweise müssen Sie verwenden kubectl config view --minify | grep namespace:, um den aktuellen Namespace abzurufen.
dabest1
15

Sie können das folgende Paket namens kubectx verwenden, mit dem Sie mit kubectx ganz einfach zwischen Clustern wechseln können

Geben Sie hier die Bildbeschreibung ein

und zwischen Namespaces mit kubens wechseln

Geben Sie hier die Bildbeschreibung ein

Mohamed Saleh
quelle
11

Ich mochte kubectx und kubens nicht, weil sie dem Befehl kubectl einen weiteren Buchstaben für die Bash- Complection hinzufügen .

Also habe ich gerade ein winziges Kubectl- Plugin geschrieben:

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

Wenn Sie daran interessiert sind, überprüfen Sie https://github.com/kvaps/kubectl-use

kvaps
quelle
1
Dies muss bei weitem meine Lieblingsantwort sein! Obwohl es einen vernünftigen, aber leider langen Befehl gibt, dies zu tun, ohne kubectl-Befehle zu erweitern oder zu aliasen, ist diese Lösung nicht nur kurz und bündig zu verwenden, sondern zeigt auch - ganz gut -, wie man kubectl mit einem einfachen und verständlichen Unterbefehl richtig erweitert . Ich tippe meinen Hut auf Sie, guter Herr! ;-)
Saustrup
2

Ich habe eine Funktion in .zshrc erstellt

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

Dann rufe ich an ksns default

Ben Collins
quelle
-2

Eine Lösung

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Erklärung wie gewünscht

Es gibt ein npm-Paket, k8ssdas für steht K8S Switching between clusters and namespaces.

Die volle Nutzung ist

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

Wie in Ihrem Fall müssen Sie nur den Namespace wechseln, damit Sie den Befehl ohne Konfiguration verwenden können (da Sie bereits eine Konfigurationsdatei in die Datei eingefügt haben ~/.kube/config).

Erweiterte Verwendung

Wenn Sie zwischen verschiedenen Clustern wechseln müssen, müssen Sie mehrere Konfigurationsdateien in Ihrem Home-Verzeichnis ablegen. In diesem Fall können Sie das Paket README aufrufen , um weitere Informationen zu erhalten.

Jeff Tian
quelle