web-dev-qa-db-fra.com

Comment changer d'espace de noms dans Kubernetes

Dis, 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 spécifique et de répertorier des objets sans inclure explicitement l'espace de noms?

46
P Ekambaram

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

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

Voilà 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
21
P Ekambaram

J'aime mes réponses courtes, précises et avec des références à 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
81
PussInBoots

Vous pouvez soit utiliser les commandes kubectl:

Changer l'espace de noms uniquement:

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

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

kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

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

$ kubens kube-system

Une autre alternative facile que je préfère, vous ne voulez pas installer d'outils tiers, c'est d'utiliser l'alias.

$ alias kubens='f(){ kubectl config set-context $(kubectl config current-context) --namespace="$@";  unset -f f; }; f'
$ kubens kube-system
14
Diego Mendes

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

enter image description here

et basculer entre les espaces de noms en utilisant kubens

enter image description here

10
Mohamed Saleh

Je n'ai pas aimé kubectx et kubens car ils en ajoutent un de plus lettre pour bash-complection à kubectl command.

Je viens donc d'écrire un minuscule 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, vérifiez https://github.com/kvaps/kubectl-use

5
kvaps