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?
kubernetes
namespaces
P Ekambaram
quelle
quelle
kubectl config set-context --help
vielleicht suchen SieAntworten:
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
quelle
kubectl config view | grep namespace:
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
quelle
kubectl config set-context --current --namespace=""
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
quelle
kubectl config view --minify | grep namespace:
, um den aktuellen Namespace abzurufen.Sie können das folgende Paket namens kubectx verwenden, mit dem Sie mit kubectx ganz einfach zwischen Clustern wechseln können
und zwischen Namespaces mit kubens wechseln
quelle
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
quelle
Ich habe eine Funktion in .zshrc erstellt
ksns() { kubectl config set-context --current --namespace="$1" }
Dann rufe ich an
ksns default
quelle
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,
k8ss
das für stehtK8S 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.
quelle