Ir al contenido principal

Contextos y Namespaces. Todo lo que hay que saber sobre estos conceptos para el examen CKA.

Conceptos:

  • Namespaces: Son divisiones lógicas dentro de un clúster de Kubernetes que permiten aislar y organizar recursos. Son especialmente útiles cuando múltiples equipos o aplicaciones comparten el mismo clúster, facilitando la gestión y evitando conflictos de nombres.

  • Contextos: Un contexto en Kubernetes es una combinación de un clúster, un usuario y un namespace predeterminado. Facilita la conexión y operación en diferentes entornos sin necesidad de especificar estos parámetros en cada comando.


 Puedes crear múltiples contextos que apunten al mismo clúster, pero con diferentes combinaciones de usuario y namespace. Ejemplos:

Mismo clúster, diferentes namespaces: Esto es útil si trabajas en distintos entornos (desarrollo, staging, producción) dentro del mismo clúster.

Mismo clúster, diferentes usuarios: Permite que distintos usuarios tengan configuraciones personalizadas según sus permisos y roles.

Contextos para diferentes clústeres: Facilita la administración de múltiples clústeres desde una única configuración.

 Básicamente, los contextos son combinaciones de:

  • Clúster (definido por --cluster)
  • Usuario (definido por --user)
  • Namespace (definido por --namespace)
La diferencia principal entre tener dos namespaces y tener dos contextos configurados para cada namespace radica en cómo manejas y accedes a los recursos dentro de los namespaces en Kubernetes.


  • Si trabajas en pocos namespaces y no cambias de uno a otro frecuentemente, usar -n <namespace> o cambiar el namespace temporalmente puede ser suficiente.
  • Si trabajas en varios namespaces de forma regular, tener contextos separados es más eficiente porque facilita el cambio entre ellos sin errores.

    Uso de Contextos vs. Especificar Namespaces en Comandos:

    La principal diferencia entre tener múltiples namespaces y configurar contextos para cada uno radica en la eficiencia y facilidad de uso:

    • Uso de -n <namespace>: Es útil para cambios ocasionales de namespace. Sin embargo, puede ser propenso a errores si olvidas especificar el namespace en cada comando.

    • Configuración de contextos: Es más eficiente si trabajas regularmente con múltiples namespaces, ya que establece un namespace predeterminado, reduciendo la posibilidad de errores y la necesidad de especificar el namespace en cada comando

  •  Los namespaces predeterminados de tu clúster, organizan los recursos y dividen el clúster lógicamente, manteniendo la infraestructura básica y las aplicaciones de usuario separadas. Para trabajar eficazmente con Kubernetes, es clave entender qué namespace utilizar según el propósito del recurso:

    Para prepararte adecuadamente para el CKA, es esencial que practiques la creación y gestión de contextos y namespaces. Familiarízate con los comandos mencionados y asegúrate de entender cómo interactúan los contextos con los namespaces y usuarios.

    Parte práctica:

    Puedes crear un contexto directamente desde kubectl

    El comando principal que se utiliza para manejar contextos es kubectl config, que trabaja directamente con el archivo ~/.kube/config.


    Cómo crear un contexto manualmente desde kubectl

    1. Verifica los clústeres, usuarios y namespaces configurados
      Antes de crear un contexto, necesitas asegurarte de que los clústeres y usuarios estén correctamente configurados.

      kubectl config get-clusters kubectl config get-users kubectl get namespaces
    2. Ver el contexto actual.

      kubectl config current-context

    3. Ver el contenido del archivo kubeconfig.

      kubectl config view

      Sin opción --minify:

      Incluye detalles de todos los clústeres, usuarios y contextos en el archivo de configuración.

      Con opción --minify:

      Incluye solo la configuración activa.

    4. Crea el nuevo contexto
      Usa el siguiente comando para crear un contexto:

      kubectl config set-context <nombre-del-contexto> \ --cluster=<nombre-del-cluster> \ --namespace=<nombre-del-namespace> \ --user=<nombre-del-usuario>
      • --cluster: El nombre del clúster al que se conectará este contexto.
      • --namespace: El namespace predeterminado para este contexto.
      • --user: El usuario que se autentica con el clúster.

      Ejemplo:
      Supongamos que tienes un clúster llamado mi-cluster, un usuario admin-user y quieres trabajar en el namespace produccion:

      kubectl config set-context contexto-produccion \ --cluster=mi-cluster \ --namespace=produccion \ --user=admin-user
    5. Verifica que el contexto haya sido creado
      Lista los contextos para confirmar que se creó correctamente:

      kubectl config get-contexts
    6. Cambia al nuevo contexto
      Una vez que has creado el contexto, puedes cambiar a él usando:

      kubectl config use-context <nombre-del-contexto>

      En el ejemplo anterior:

      kubectl config use-context contexto-produccion

    Consejo adicional: Crear contextos en un archivo de configuración separado

    Si necesitas crear un contexto para un nuevo clúster sin modificar tu archivo ~/.kube/config, puedes usar un archivo de configuración independiente. Ejemplo:

    1. Genera un nuevo archivo de configuración de Kubernetes (por ejemplo, nuevo-config).

    2. Usa el comando kubectl para especificar el archivo al crear el contexto:

      kubectl --kubeconfig=nuevo-config config set-context <nombre-del-contexto> \ --cluster=<nombre-del-cluster> \ --namespace=<nombre-del-namespace> \ --user=<nombre-del-usuario>
    3. Usa ese archivo con la opción --kubeconfig cuando necesites interactuar con el clúster:

      kubectl --kubeconfig=nuevo-config get pods

    Eliminar un contexto si ya no lo necesitas

    Si creaste un contexto y ya no lo necesitas, puedes eliminarlo:

    kubectl config delete-context <nombre-del-contexto>

    Comandos útiles relacionados con namespaces

    1. Listar todos los namespaces:

      kubectl get namespaces
    2. Cambiar entre namespaces:

      • Con el comando kubectl, puedes especificar un namespace en cada solicitud con -n.
      kubectl get pods -n kube-system
      • O puedes cambiar el namespace por defecto con un contexto:
      kubectl config set-context --current --namespace=kube-system
    3. Crear un namespace nuevo:

      kubectl create namespace mi-namespace
    4. Eliminar un namespace:

      kubectl delete namespace mi-namespace
    5.  Listar todos los Pods de todos los namespaces en el contexto que estás utilizando actualmente:

      kubectl get pods --all-namespaces

    Escenario Común en el Examen CKA:

    • Configurar y gestionar namespaces para pruebas y luego eliminarlos al finalizar, asegurándote de no afectar recursos críticos.

    Trucazo que no tiene que con el CKA ni para usarlo en el exámen:

    Usar el prompt del shell

    Puedes personalizar tu shell (por ejemplo, bash o zsh) para que muestre el contexto y namespace actuales en el prompt. Aquí tienes un ejemplo para bash:

    function kube_ps1() { echo "$(kubectl config current-context):$(kubectl config view --minify --output 'jsonpath={..namespace}' || echo 'default')" }     export PS1='[\u@\h $(kube_ps1)]\$ '

    Esto agregará el contexto y el namespace al prompt.

    Comentarios

    Entradas populares de este blog

    Autenticación y Autorización (Kubernetes).

    La autenticación en Kubernetes es un aspecto crítico para la seguridad y control de acceso dentro de un clúster. Kubernetes proporciona varios mecanismos de autenticación para usuarios y cuentas de servicio, que deben pasar a través del API Server para realizar cualquier operación. En este artículo, revisaremos cómo funciona la autenticación y cómo puedes usar herramientas como kubectl y curl para interactuar de manera segura con el clúster. En primer lugar, ¿Qué es la autenticación y la autorización? •     Autenticación:  Es el proceso de verificar quién es un usuario. Responde a la pregunta "¿Quién eres?". •     Autorización: El proceso de determinar qué acciones puede realizar un usuario autenticado. Responde a la pregunta "¿Qué puedes hacer?". Primer paso: Autenticación. La autenticación en Kubernetes es el proceso mediante el cual el sistema verifica la identidad de los usuarios y cuentas de servicio que intentan acceder al clúster.  ...

    Tip 1. Exámen CKA. Economiza y optimiza tu tiempo; Usa --help con el paginador Less en la ayuda.

    📘 Domina los comandos --help y el uso de less en el examen CKA Durante el examen CKA (Certified Kubernetes Administrator) , uno de los recursos más potentes y completamente permitidos es el uso del --help en los comandos de Kubernetes. Además, puedes combinarlo con el paginador less para buscar y navegar fácilmente entre opciones. ✅ ¿Está permitido usar --help ? Sí, está 100% permitido . Puedes usar el --help de cualquier comando disponible en el entorno del examen: kubectl --help kubeadm init --help kubelet --help kubectl explain pod.spec.containers Estos comandos muestran la ayuda y las opciones disponibles directamente desde el sistema, sin necesidad de ir a la documentación. 🔍 ¿Cómo usar less para buscar rápidamente? Cuando la salida del comando es larga, puedes usar | less para verla de forma paginada y navegar más cómodamente. kubeadm init --help | less Una vez dentro de less , puedes buscar cualquier texto escribiendo /texto . Por ejemplo: /pod-networ...

    TLS Bootstrapping en Kubernetes: Qué es, cómo funciona y por qué importa en el examen CKA

                                                           Uno de los conceptos que a menudo pasan desapercibidos en la administración de Kubernetes —pero que resultan clave tanto en entornos reales como en el examen CKA— es el TLS Bootstrapping . En este artículo entenderás qué es, cómo funciona, qué lo diferencia del kubeadm join tradicional y cómo puede aparecer en el examen. ¿Qué es TLS Bootstrapping? TLS Bootstrapping es el proceso por el cual el kubelet , el agente que corre en cada nodo, obtiene automáticamente un certificado TLS firmado por el clúster para autenticarse con el kube-apiserver . En otras palabras: permite que un nuevo nodo se una de forma segura al clúster sin necesidad de copiar manualmente los certificados. ¿Por qué es necesario? Cuando añades un nuevo nodo worker, su kubelet necesita autentic...