¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Por qué falla un pod: describe y logs

Después de esta lección: Puedo leer describe y logs para nombrar el fallo de un pod.

Lección de 60 min14 comandosLaboratorio de Kubernetes: un clúster k3s de un nodo para cada alumno en una VM Ubuntu privada

Un pod roto cuenta por qué falla

Cuando un pod de Kubernetes no funciona, el clúster no dice «falló». Te da un estado y una lista de sucesos. Con kubectl describe y kubectl logs encuentras la causa casi siempre.

Un pedido de la librería online se queda sin procesar a las diez de la noche. Nadie sabe por qué. Leer esos dos sitios, en el orden correcto, te ahorra horas de pruebas al azar.

Al final de esta lección

Nota

Puedo leer describe y logs para nombrar el fallo de un pod.

Palabras clave

PalabraQué significaEjemplo
describela orden que cuenta todo sobre un objeto y sus sucesoskubectl describe pod
logslo que el programa del pod ha escritokubectl logs
Sucesouna nota que deja Kubernetes sobre algo que pasó
Pendingel pod existe, pero ningún nodo lo ha aceptado
ImagePullBackOffel pod no puede bajar su imagen y espera para reintentar
CrashLoopBackOffel pod arranca y se cae, y espera entre intentos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

STATUS dice por dónde empezar a buscar

El estado de un pod apunta a la familia del fallo. Con ImagePullBackOff, el problema es la imagen. Con Pending, el pod no tiene sitio. Con CrashLoopBackOff, el programa arranca y se para.

Para verlo, crea tres Deployments rotos en un namespace propio, taller. Son tuyos, sirven para practicar y no se parecen a los de la práctica del laboratorio.

Ejemplo: del estado a la orden

STATUSQué pasóQué orden usas
ErrImagePull o ImagePullBackOffNo se pudo bajar la imagenkubectl describe pod
PendingNingún nodo acepta el podkubectl describe pod
CrashLoopBackOff o ErrorEl programa arranca y se parakubectl logs
ContainerCreatingSe está preparandoEsperar y repetir get

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Crea el namespace taller

Comando
kubectl create namespace taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea un Deployment con imagen inexistente

Comando
kubectl create deployment imagen-mala --image=busybox:9.9 -n taller -- sleep 3600

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea un Deployment sin ninguna réplica

Comando
kubectl create deployment sin-sitio --image=busybox:1.37.0 --replicas=0 -n taller -- sleep 3600

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide un nodo con una etiqueta inexistente

Comando
kubectl patch deployment sin-sitio -n taller -p '{"spec":{"template":{"spec":{"nodeSelector":{"disco":"ssd"}}}}}'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pídele una réplica

Comando
kubectl scale deployment sin-sitio --replicas=1 -n taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea un programa que busca un archivo ausente

Comando
kubectl create deployment se-cae --image=busybox:1.37.0 -n taller -- cat /precios.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Espera medio minuto antes de mirar

Un fallo tarda en verse: Kubernetes lo intenta varias veces antes de rendirse. Espera unos 30 segundos y mira los estados.

Verás tres pods. Uno dirá ErrImagePull o ImagePullBackOff, otro Pending, y el tercero Error o CrashLoopBackOff. Cuál de los dos aparece depende del instante.

Mira los estados de los tres pods

Comando
kubectl get pods -n taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

describe muestra los sucesos del pod

kubectl describe pod imprime muchas líneas. La importante está al final, bajo Events: los sucesos, de más antiguo a más nuevo, con su motivo.

Con grep te quedas solo con la línea que buscas. En un pod con la imagen mala, el suceso Failed nombra la imagen que no se pudo bajar. En un pod sin sitio, FailedScheduling cuenta cuántos nodos había y por qué no valían.

Busca por qué no baja la imagen

Comando
kubectl describe pod -n taller -l app=imagen-mala | grep 'Failed to pull'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Busca por qué ningún nodo acepta el pod

Comando
kubectl describe pod -n taller -l app=sin-sitio | grep FailedScheduling

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

logs muestra lo que escribió el programa

Si el pod llegó a arrancar, su programa pudo escribir algo antes de pararse. kubectl logs lo muestra. Es la orden para CrashLoopBackOff.

Pero un pod que nunca arrancó no tiene log, porque su programa nunca corrió. Con Pending o con una imagen que no baja, logs no te cuenta nada y describe sí.

Lee el log del programa que se cae

Comando
kubectl logs deployment/se-cae -n taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide el log del pod sin imagen

Comando
kubectl logs deployment/imagen-mala -n taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que kubectl logs explica cualquier pod roto. Solo sirve si el programa llegó a correr y escribió algo. Si el pod está en Pending o no baja su imagen, empieza por describe: sus sucesos tienen la causa.

Arregla la imagen del primer Deployment

Comando
kubectl set image deployment/imagen-mala busybox=busybox:1.37.0 -n taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Espera a que el pod nuevo esté listo

Comando
kubectl rollout status deployment/imagen-mala -n taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Borra el namespace taller

Comando
kubectl delete namespace taller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sobre este laboratorio y su código: Laboratorio de Kubernetes: un clúster k3s de un nodo para cada alumno en una VM Ubuntu privada

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.