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?
7 Réponses :
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
Vous devrez peut-être utiliser kubectl config view --minify | grep namespace:
pour obtenir l'espace de noms courant.
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>
comment désinstaller l'espace de noms actuel?
kubectl config set-context --current --namespace=""
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 à l'aide de kubens
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
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:
k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace
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
).
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.
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
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! ;-)
J'ai créé une fonction en .zshrc
ksns() { kubectl config set-context --current --namespace="$1" }
Ensuite, j'appelle ksns default
Salut
kubectl config set-context --help
peut-être que vous recherchez