88
votes

Comment changer d'espace de noms dans Kubernetes

Dites, j'ai deux espaces de noms k8s-app1 et k8s-app2

Je peux lister tous les pods d'un espace de noms spécifique en utilisant la commande ci-dessous

kubectl get pods -n <namespace>

Nous devons ajouter un espace de noms à toutes les commandes pour répertorier les objets des espaces de noms respectifs. Existe-t-il un moyen de définir un espace de noms et des objets de liste spécifiques sans inclure explicitement l'espace de noms?


1 commentaires

Salut kubectl config set-context --help peut-être que vous recherchez


7 Réponses :


24
votes

J'ai pu changer d'espace de noms en suivant les étapes ci-dessous

# 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

Voici comment j'ai testé

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


1 commentaires

Vous devrez peut-être utiliser kubectl config view --minify | grep namespace: pour obtenir l'espace de noms courant.



43
votes

Vous pouvez utiliser les commandes kubectl:

Changer d'espace de nom uniquement:

$ 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

Créez un nouveau contexte avec un espace de noms défini:

$ kubens kube-system 

Ou utilisez des addons, comme kubectx & kubens , la commande ci-dessous basculera le contexte sur kube-system :

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

Une autre alternative simple que je préfère, si vous ne souhaitez pas installer d'outils tiers, un moyen simple consiste à utiliser un alias.

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


2 commentaires

comment désinstaller l'espace de noms actuel?


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



15
votes

Vous pouvez utiliser le package suivant appelé kubectx qui facilite le basculement entre les clusters à l'aide de kubectx

entrez la description de l'image ici

et basculer entre les espaces de noms à l'aide de kubens

entrez la description de l'image ici


0 commentaires

148
votes

J'aime mes réponses courtes, précises et avec des références à la documentation officielle:

Réponse :

# permanently save the namespace for all subsequent kubectl commands in that context.
kubectl config set-context --current --namespace=ggckad-s2

De :

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

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


1 commentaires

Il est kubectl config view | grep namespace: de valider que l'espace de noms actuel a changé en exécutant la commande suivante kubectl config view | grep namespace:



-2
votes

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

TLDR; Explication comme demandé

Il existe un package npm appelé k8ss qui signifie K8S Switching between clusters and namespaces .

L'utilisation complète est

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

Comme dans votre cas, il vous suffit de changer d'espace de noms, vous pouvez donc utiliser la commande sans aucune configuration (car vous avez déjà mis un fichier de configuration dans le ~/.kube/config ).

Utilisation avancée

Si vous devez basculer entre différents clusters, vous devez placer plusieurs fichiers de configuration dans votre répertoire personnel. Dans ce cas, vous pouvez accéder au package README pour en savoir plus.


0 commentaires

11
votes

Je n'ai pas aimé kubectx et kubens car ils ajoutent une lettre supplémentaire pour bash-complection à la commande kubectl .

Je viens donc d'écrire un petit plugin 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".

Si cela vous intéresse, consultez https://github.com/kvaps/kubectl-use


1 commentaires

Cela doit être ma réponse préférée de loin! Bien qu'il existe une commande assez raisonnable mais malheureusement longue pour le faire sans étendre ou aliaser les commandes kubectl, cette solution n'est pas seulement courte et agréable à utiliser, mais elle montre également - assez bien - comment étendre correctement kubectl avec une sous-commande simple et compréhensible . Je vous lève mon chapeau, bon monsieur! ;-)



2
votes

J'ai créé une fonction en .zshrc

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

Ensuite, j'appelle ksns default


0 commentaires