Cómo cambiar el espacio de nombres en kubernetes

84

Digamos, tengo dos espacios de nombres k8s-app1 y k8s-app2

Puedo enumerar todos los pods de un espacio de nombres específico usando el siguiente comando

kubectl get pods -n <namespace>

Necesitamos agregar espacios de nombres a todos los comandos para listar objetos de los respectivos espacios de nombres. ¿Hay alguna forma de establecer un espacio de nombres específico y enumerar objetos sin incluir el espacio de nombres explícitamente?

P Ekambaram
fuente
Hola kubectl config set-context --help, puede que estés buscando
Suresh Vishnoi

Respuestas:

143

Me gustan mis respuestas breves, al grano y con referencias a documentación oficial:

Respuesta :

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
El gato con botas
fuente
7
Es una buena práctica validar que el espacio de nombres actual ha cambiado ejecutando el siguiente comandokubectl config view | grep namespace:
tet
41

Puede utilizar los comandos de kubectl:

Cambiar solo el espacio de nombres:

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

Cree un nuevo contexto con espacio de nombres definido:

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

O use complementos, como kubectx y kubens , el siguiente comando cambiará el contexto a kube-system:

$ kubens kube-system

Otra alternativa fácil que prefiero, no desea instalar herramientas de terceros, es usar alias.

$ 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
Diego Mendes
fuente
¿Cómo se desactiva el espacio de nombres actual?
Stephen
1
kubectl config set-context --current --namespace=""
Diego Mendes
24

Pude cambiar el espacio de nombres usando los pasos a continuación

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

Así es como he probado

# 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
P Ekambaram
fuente
1
Puede que tenga que utilizar kubectl config view --minify | grep namespace:para obtener el espacio de nombres actual.
dabest1
15

Puede usar el siguiente paquete llamado kubectx que hace que sea muy fácil cambiar entre clústeres usando kubectx

ingrese la descripción de la imagen aquí

y cambiar entre espacios de nombres usando kubens

ingrese la descripción de la imagen aquí

Mohamed Saleh
fuente
11

No me gustó kubectx y kubens porque están agregando una letra más para bash-complection al comando kubectl .

Así que acabo de escribir un pequeño complemento de uso de kubectl :

# 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 le interesa, consulte https://github.com/kvaps/kubectl-use

kvaps
fuente
1
¡Esta tiene que ser mi respuesta favorita de lejos! Si bien existe un comando bastante razonable, pero desafortunadamente largo, para hacer esto sin extender o crear un alias en los comandos de kubectl, esta solución no solo es corta y agradable de usar, sino que también, bastante bien, demuestra cómo extender kubectl correctamente con un subcomando simple y comprensible. . ¡Me quito el sombrero ante usted, buen señor! ;-)
Saustrup
2

Creé una función en .zshrc

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

Entonces llamo ksns default

Ben Collins
fuente
-2

Una solución

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Explicación según lo solicitado

Hay un paquete npm llamado k8ssque significa K8S Switching between clusters and namespaces.

El uso completo es

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

Como en su caso, solo necesita cambiar el espacio de nombres, para que pueda usar el comando sin ninguna configuración (como ya puso un archivo de configuración en el ~/.kube/config).

Uso avanzado

Si necesita cambiar entre diferentes clústeres, debe colocar varios archivos de configuración en su directorio de inicio. En este caso, puede ir al paquete README para obtener más información.

Jeff Tian
fuente