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?
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
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
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
Vous pouvez utiliser le package suivant appelé kubectx qui facilite le basculement entre les clusters à l'aide de kubectx
et basculer entre les espaces de noms en utilisant kubens
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