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.

  1. Ayuda a la comunicación entre pods utilizando el mismo espacio de nombres.
  2. Actúa como un clúster virtual que puede asentarse sobre el mismo clúster físico.
  3. 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

  1. 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

  1. 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

get-namespaces para kubernetes namespace

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

crear espacio de nombres

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

crear-pod-en-el-espacio-nombrado-creado

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

configurar-el-espacio-de-nombres-en-config

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

volver al espacio de nombres por defecto

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:

comprobar-espacio-de-nombres-actual

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

recursos-con-namespace

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

recursos-sin-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.

describe-namespace

También se puede crear un espacio de nombres utilizando un archivo .yml.

vim namespace-using-file.yml #Create a namespace definition file

crear-espacio-de-nombres-usando-archivo-yml

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

get-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

eliminar-espacios-de-nombre

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.

También te podría gustar...