Cómo crear Namespaces en Kubernetes
Un espacio de nombres es útil cuando varios equipos utilizan el mismo clúster. Se utiliza cuando existe la posibilidad de colisión de nombres. Puede ser un muro virtual entre varios clústeres. Por ejemplo, no podemos tener pods con el mismo nombre en un Clúster Kubernetes, pero utilizando Namespace podemos dividir virtualmente el Clúster y tener pods con el mismo nombre.
Algunas de las funcionalidades importantes de un Namespace son las siguientes.
- Ayuda a la comunicación entre pods utilizando el mismo espacio de nombres.
- Actúa como un clúster virtual que puede asentarse sobre el mismo clúster físico.
- Proporciona una separación lógica entre los equipos y sus entornos.
En este artículo, crearemos un espacio de nombres y crearemos un pod en el espacio de nombres recién creado. También veremos cómo se puede establecer un espacio de nombres como espacio de nombres predeterminado.
Requisitos previos
- Clúster Kubernetes con al menos 1 nodo trabajador.
Si quieres aprender a crear un Clúster Kubernetes. Esta guía te ayudará a crear un clúster Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu.
Qué haremos
- Crear espacios de nombres
Crear espacios de nombres
Para listar todos los espacios de nombres disponibles en el Cluster Kubernetes, ejecuta el siguiente comando Puedes tener múltiples espacios de nombres y los espacios de nombres pueden tener metadatos de espacio de nombres.
kubectl get namespace #Get all namespace in the cluster
Ahora vamos a intentar crear un pod en un espacio de nombres concreto que no existe.
Para crear un pod en el espacio de nombres «test-env» ejecuta el siguiente comando.
kubectl run nginx --image=nginx --namespace=test-env #Try to create a pod in the namespace that does not exist.
El pod no se creará en el espacio de nombres que no existe, por lo que primero tenemos que crear un espacio de nombres.
Para crear un espacio de nombres «test-env» ejecuta el siguiente comando (k8s create namespace).
kubectl create namespace test-env #Create a namespace
kubectl get namespace #Get a list of namespaces
Ahora tenemos un espacio de nombres en el que queremos crear un pod.
Para crear un pod en el espacio de nombres que hemos creado pasa la opción –namespace=test-env al comando.
kubectl run nginx --image=nginx --namespace=test-env #Create a pod in the namespace.
Si intentas obtener pods sin especificar el espacio de nombres no obtendrás detalles del pod.
kubectl get pods #Get a list of pods
Para obtener los detalles del pod que pertenece al espacio de nombres «test-env» utiliza el siguiente comando.
kubectl get pods --namespace=test-env #Get a list of pods in the specified namespace
Si quieres establecer tu espacio de nombres como espacio de nombres predeterminado para que no sea necesario especificar la opción de espacio de nombres en el comando, utiliza el siguiente comando.
kubectl config set-context --current --namespace=test-env #Set default namespace
Ahora no es necesario especificar el espacio de nombres en el comando para obtener los detalles del pod.
kubectl get pods #Get a list of pods from the default namespace
Para cambiar al espacio de nombres por defecto utiliza el siguiente comando.
kubectl config set-context --current --namespace=default #Check the namespace to default
kubectl get pods #Get a list of pods
Para comprobar cuál es el espacio de nombres por defecto utiliza los siguientes comandos.
kubectl config view --minify | grep namespace: #Extract the namespace from the kubernetes config file.
kubectl config set-context --current --namespace=test-env #Set default namespace in the config file.
kubectl config view --minify | grep namespace:
Para comprobar qué recursos de Kubernetes son un espacio de nombres, ejecuta el siguiente comando.
kubectl api-resources --namespaced=true #Get Kubernetes objects which can be in a namespaces
Para ver qué recursos de Kubernetes no están en un espacio de nombres, utiliza el siguiente comando.
kubectl api-resources --namespaced=false #Get a list of Kubernetes objects that can never be in a namespace
Puedes obtener detalles del espacio de nombres utilizando el comando que se menciona a continuación.
kubectl get namespaces #Get a list of namespaces.
kubectl describe namespace test-env #Get details of a namespace.
También se puede crear un espacio de nombres utilizando un archivo .yml.
vim namespace-using-file.yml #Create a namespace definition file
Ejecuta el siguiente comando para crear un espacio de nombres especificado en el archivo de definición de objetos.
kubectl create -f namespace-using-file.yml #Create a namespace using a .yml file
kubectl get namespaces #Get a list of namespaces
Cuando ya no necesites tu espacio de nombres, puedes eliminarlo simplemente utilizando el siguiente comando.
kubectl get namespaces #Get a list of namespaces
kubectl delete namespaces env-prod test-env #Delete a namespace
kubectl get namespaces #Get a list of namespaces
Utiliza el comando «kubectl change namespace» para cambiar a otro espacio de nombres.
Conclusión
En este artículo, hemos aprendido sobre los espacios de nombres, la creación de un espacio de nombres y el cambio del espacio de nombres predeterminado, comprobando los recursos de Kubernetes que están y no están en un espacio de nombres. También vimos cómo se puede crear un objeto Kubernetes, aquí pod, en un espacio de nombres de nuestra elección.