Introducción
En este laboratorio aprenderá técnicas esenciales para interactuar con Pods en ejecución. Estas son habilidades fundamentales de depuración en Kubernetes, ya que las cargas de trabajo suelen estar distribuidas y no son directamente visibles como los procesos locales.
Aprenderá tres técnicas de depuración muy útiles:
- Registros: leer el historial de la aplicación para saber qué está informando.
- Exec: entrar en el contenedor para inspeccionarlo y ejecutar comandos.
- Redirección de puertos: crear un túnel temporal para acceder a la aplicación desde su equipo local.
Estas habilidades son fundamentales para cualquier ingeniero de DevOps o desarrollador. Al finalizar este laboratorio, podrá investigar con confianza los Pods en ejecución.
Consultar registros
En este paso aprenderá a consultar los registros de un Pod en ejecución. Considere los registros como la «voz» de su aplicación. Si algo falla, normalmente son el primer lugar donde buscar pistas.
Internamente, kubectl logs suele leer lo que el proceso principal del contenedor escribió en la salida estándar y en el error estándar. Por eso muchas aplicaciones en contenedores están diseñadas para registrar información en el terminal en lugar de escribirla en archivos locales. En Kubernetes, la salida del terminal es más fácil de recopilar y exponer de forma coherente.
El entorno iniciará el Pod my-nginx en segundo plano. Primero, espere hasta que se haya creado:
until kubectl get pod my-nginx > /dev/null 2>&1; do sleep 2; done
Después, espere hasta que su contenedor esté listo:
kubectl wait --for=condition=ready pod/my-nginx --timeout=300s
Ahora compruebe que se está ejecutando:
kubectl get pods
Debería ver my-nginx con el estado Running. Si todavía no está listo, espere un momento y vuelva a intentarlo.
Cuando el Pod esté en ejecución, use el comando kubectl logs para leer lo que el contenedor ha escrito en la salida estándar:
kubectl logs my-nginx
Como Nginx es un servidor web estable, al principio puede estar silencioso y mostrar poca información, o simplemente mostrar un mensaje que indique que está listo para aceptar conexiones.
Para observar los registros en tiempo real, como si estuviera viendo una transmisión en directo, añada la opción -f (follow):
kubectl logs -f my-nginx
Verá el cursor parpadeando mientras espera nuevos mensajes. Esto resulta útil para observar en directo el tráfico entrante. Presione Ctrl+C para dejar de seguir los registros y volver al prompt del terminal.
Ejecutar comandos dentro del contenedor
En este paso irá más allá de la consulta de registros y ejecutará comandos dentro del Pod. Es posible que necesite comprobar si existe un archivo de configuración, verificar que una herramienta está instalada o probar la conectividad de red desde dentro del Pod.
Puede hacerlo con el comando kubectl exec, que permite ejecutar un comando dentro de un contenedor en ejecución. Normalmente se utiliza para abrir un intérprete de comandos interactivo y, en la práctica, entrar en el contenedor.
Esta es una distinción importante: kubectl exec no le «traslada» a otra máquina como lo hace SSH. Solicita al kubelet del nodo que inicie un proceso nuevo dentro de un contenedor que ya está en ejecución. Por eso verá el sistema de archivos y el entorno del contenedor, no el entorno del terminal local.
Ejecute el siguiente comando para abrir un intérprete bash dentro del Pod my-nginx:
kubectl exec -it my-nginx -- /bin/bash
Veamos qué significan las opciones:
-i(Interactive): mantiene abierta la entrada para que pueda escribir.-t(TTY): asigna un pseudo-terminal para que aparezca como un prompt de comandos normal.--: indica a kubectl que «todo lo que aparece después es un comando para el contenedor, no para kubectl».
El prompt debería cambiar a algo parecido a root@my-nginx:/#. Ahora se encuentra dentro del contenedor específico del clúster de Kubernetes.
Pruebe a mostrar los archivos del directorio para confirmar que está en un entorno nuevo:
ls -F
Está viendo los archivos del contenedor de Nginx, completamente separados de los archivos del espacio de trabajo de LabEx.
Inspeccionar el entorno
En este paso inspeccionará el entorno dentro del contenedor. Una tarea habitual de depuración consiste en comprobar qué sistema operativo (SO) utiliza el contenedor. Esto le permite saber qué comandos, como apt o apk, están disponibles.
Este paso también presenta un concepto habitual de los contenedores: la imagen del contenedor determina las herramientas y los archivos del espacio de usuario que están disponibles. Dos Pods pueden utilizar «Linux» y, aun así, ser muy diferentes: una imagen puede estar basada en Debian, otra en Alpine y otra puede no contener prácticamente ninguna herramienta de shell.
Mientras el prompt siga siendo root@my-nginx:/#, ejecute este comando para leer el archivo que contiene información sobre la versión del sistema operativo:
cat /etc/os-release
Verá información que identifica la distribución de Linux, probablemente «Debian GNU/Linux». Esto se debe a que la imagen oficial de Nginx está basada en Debian.
Cuando termine de explorar, debe salir del contenedor y volver al terminal principal. Escriba:
exit
El prompt volverá a ser labex:~/project.
Para confirmar que ha completado esta investigación, cree un archivo llamado os_version.txt y escriba en él el nombre del sistema operativo que encontró, por ejemplo, «Debian».
echo "Debian" > ~/project/os_version.txt
Redirección de puertos
En este paso accederá al Pod de Nginx mediante la redirección de puertos. De forma predeterminada, los Pods están aislados. Son como casas dentro de una comunidad cerrada: pueden comunicarse entre sí, pero los usuarios externos, como usted desde su terminal local, no pueden acceder a ellos fácilmente.
Para acceder desde su equipo local al servidor web que se ejecuta en my-nginx, puede crear un «túnel temporal» mediante la redirección de puertos.
La redirección de puertos es una comodidad para la depuración, no la forma habitual de publicar aplicaciones en producción. Crea un túnel temporal desde su estación de trabajo actual hasta un Pod. Es ideal para inspecciones y pruebas rápidas, porque evita crear un Service completo o modificar la política de red externa.
Ejecute el siguiente comando para redirigir el puerto local 8080 al puerto 80 del Pod:
kubectl port-forward my-nginx 8080:80 &
Observe el carácter & al final. Indica a Linux que ejecute este proceso en segundo plano. Si lo omite, el comando bloqueará el terminal y no podrá escribir nada más hasta detenerlo.
Debería aparecer un mensaje como Forwarding from 127.0.0.1:8080 -> 80.
Ahora puede acceder a la página web de Nginx a través de este túnel mediante curl:
curl localhost:8080
Debería ver el código HTML de la página «Welcome to nginx!». ¡La operación se ha realizado correctamente! Ha accedido al clúster y ha obtenido datos a través del túnel.
Resumen
En este laboratorio practicó las tres habilidades esenciales para depurar aplicaciones de kubernetes:
- Registros: consultar la salida de la aplicación con
kubectl logs. - Exec: entrar en el entorno del contenedor con
kubectl execpara inspeccionar archivos y ejecutar comandos. - Redirección de puertos: acceder localmente a servicios internos con
kubectl port-forward.
Estas herramientas son su estetoscopio y su máquina de rayos X. Siempre que encuentre un problema en Kubernetes, serán las primeras herramientas que utilizará para diagnosticarlo.


