Troubleshooting en Kubernetes
Clase 21 de 24 • Curso de Kubernetes
Contenido del curso
Clase 21 de 24 • Curso de Kubernetes
Contenido del curso
Alfredo Olmedo
JORGE ERNESTO MATERA
José Gabriel González Pérez
José Gabriel González Pérez
Adolfo Armas
Yor Jaggy Castaño Pino
Guillermo Camarena Miramontes
Troubleshooting en Kubernetes
Resolver problemas en Kubernetes requiere una metodología estructurada para diagnosticar fallas en aplicaciones, nodos, Pods, o configuraciones del clúster.
1. Diagnóstico Inicial
**Verifica los componentes básicos del clúster:**kubectl get nodes kubectl get pods -A kubectl get services -A
Identifica errores: Busca estados como CrashLoopBackOff, Pending, o Error en Pods:kubectl get pods -n <namespace>
2. Problemas Comunes y Soluciones
A. Pods en estado Pending
Esto ocurre cuando Kubernetes no puede programar el Pod en un nodo.
Insufficient CPU o Insufficient memory).Aumenta los recursos del clúster: Escala los nodos.kubectl scale nodepool <nodepool-name> --replicas=3
Revisa los límites del Pod: Ajusta las solicitudes de recursos (requests y limits) en el manifiesto YAML.
B. Pods en CrashLoopBackOff
Esto indica que el contenedor del Pod falla repetidamente.
**Verifica los logs del Pod:**kubectl logs <pod-name> -n <namespace>
Investiga las causas comunes:
Soluciones:
C. Servicios no accesibles
El servicio no responde o no expone correctamente el tráfico.
LoadBalancer, verifica que se haya creado en el proveedor de la nube.D. Problemas con ConfigMaps o Secrets
Errores en la configuración de aplicaciones debido a ConfigMaps o Secrets incorrectos.
**Verifica los datos:**kubectl describe configmap <configmap-name> -n <namespace> kubectl describe secret <secret-name> -n <namespace>
Soluciones:
E. Fallas en Nodos
Un nodo puede no estar listo o tener problemas de rendimiento.
**Verifica el estado de los nodos:**kubectl get nodes kubectl describe node <node-name>
Soluciones:
Si un nodo está en NotReady, revisa los logs de kubelet:journalctl -u kubelet
Escala el clúster si hay nodos saturados.
3. Herramientas Útiles
Logs
Ver logs de Pods:kubectl logs <pod-name> -n <namespace>
Ver logs de un contenedor específico:kubectl logs <pod-name> -c <container-name> -n <namespace>
Describe
Eventos del clúster
Top (Uso de recursos)
4. Soluciones Proactivas
A. Liveness y Readiness Probes
Configura pruebas de vida y disponibilidad para garantizar que los contenedores se comporten como se espera:
livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 10
readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 10
B. Escalabilidad
Habilita el HPA para garantizar que la aplicación escale automáticamente en función de la demanda.
C. Monitoreo
5. Comandos de Limpieza
Elimina Pods en mal estado:kubectl delete pod <pod-name> -n <namespace>
Reinstala un Deployment:kubectl rollout restart deployment <deployment-name> -n <namespace>
Limpia todos los eventos:kubectl delete events -n <namespace>
6. Flujograma de Troubleshooting
Pending, CrashLoopBackOff, etc.).Tu imagen tapa mucho el codigo :(
Una manera de hacer que no tengas que especificar el namespace cuando creas un resource en tu cluster es definir el namespace predeterminado en la configuración de tu kubectl context:
kubectl config set-context \<context-name> --namespace=\<namespace-name>
Por defecto el namespace será default.
kubectl config set-context <context-name> --namespace=<namespace-name>
Profe, cuales son las herramientas que permiten automatizar el proceso de creación del deployments para no generar errores?
Gracias
Hola Adolfo, que buena pregunta! Lo ideal es que tengas versionados los archivos con los que creas tus objetos dentro del cluster. De esta forma, puedes usar alguna herramienta de CI/CD para crear estos Deployments y para las siguientes ocasiones que necesites actualizarlo solo debes usar el mismo CI/CD para ejecutar un comando cambiando el imageName de tus deployment. En cuanto a que CI/CD depende de tu caso de uso. en mi actual empresa usamos Jenkins o Github Actions, pero con AzureDevOps o AWS CodeBuild, etc puede funcionar perectamente.
En la clase anterior tuve problemas para conectar los nodos con los pods. El tema relacionado al agregar el sg, lo habia resuelto. Esto me tomo tiempo descubrirlo. Sugiero que antes de ver la clase anterior, se salte a este. O mencionarlo, algo.... Hay cosas que ya estan dados por hecho desde tu ambiente, que no se mencionan en los videos... Creo que por eso se nota que la gente abandono este curso....