288 votes

Comment changer d'espace de nom dans Kubernetes ?

Disons que j'ai deux espaces de noms, k8s-app1 et k8s-app2.

Je peux lister tous les pods d'un espace de nom spécifique en utilisant la commande suivante

kubectl get pods -n <namespace>

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

1 votes

Bonjour kubectl config set-context --help Vous cherchez peut-être

475voto

PussInBoots Points 1129

J'aime que mes réponses soient courtes, directes et qu'elles fassent référence à la documentation officielle :

Réponse : :

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

De :

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

26 votes

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

124voto

Diego Mendes Points 136

Il y a quelques options :

  • Changement d'espace de noms uniquement à l'aide des commandes kubectl : :

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

  • Ou bien, créez un nouveau contexte avec un espace de nom défini :

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

  • Ou bien, utilisez des modules complémentaires, comme kubectx & kubens la commande ci-dessous fera passer le contexte à kube-system :

    $ kubens kube-system

  • Ou, une autre alternative facile que j'aime sans installer d'outils tiers, est l'utilisation de 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

0 votes

Comment désactiver l'espace de noms actuel ?

8 votes

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

45voto

P Ekambaram Points 1998

J'ai pu changer d'espace de nom en utilisant les étapes suivantes

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

Voici comment j'ai testé

# 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

2 votes

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

32voto

kvaps Points 344

Je n'ai pas aimé kubectx y kubens parce qu'ils ajoutent une lettre de plus pour bash-complection à kubectl commandement.

Donc j'ai juste écrit minuscule 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".

Si vous vous y intéressez, vérifiez https://github.com/kvaps/kubectl-use

2 votes

C'est de loin ma réponse préférée ! Alors qu'il existe une commande tout à fait raisonnable mais malheureusement longue pour faire cela sans étendre ou aliaser les commandes kubectl, cette solution est non seulement courte et douce à utiliser, mais elle démontre aussi - assez joliment - comment étendre correctement kubectl avec une sous-commande simple et compréhensible. Je vous tire mon chapeau, mon bon monsieur ;-)

29voto

Mohamed Saleh Points 114

Vous pouvez utiliser le paquet suivant appelé kubectx qui permettent de passer très facilement d'un cluster à l'autre à l'aide de kubectx

enter image description here

et le passage d'un espace de nom à l'autre en utilisant kubens

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X