Esta guía te ayuda a diagnosticar y resolver los problemas más comunes al desplegar u operar Midaz en Kubernetes con Helm. Cada sección cubre un síntoma específico, los comandos de diagnóstico para investigarlo y los pasos para resolverlo.Documentation Index
Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
Use this file to discover all available pages before exploring further.
Comandos generales de diagnóstico
Comienza con estos comandos para obtener una visión general del estado de tu despliegue antes de profundizar en problemas específicos.
Pods atascados en Pending
Síntoma: Uno o más pods permanecen en estado
Pending y nunca arrancan.
Comandos de diagnóstico:
-
CPU o memoria insuficiente en los nodos — El scheduler no puede encontrar un nodo que satisfaga las solicitudes de recursos del pod.
Revisa la sección
Eventsdekubectl describe pod. Busca mensajes comoInsufficient cpuoInsufficient memory. Reduceresources.requestsen tuvalues.yamlo añade más nodos al clúster. -
PersistentVolumeClaim sin enlazar — Un PVC requerido por una dependencia (PostgreSQL, MongoDB, Valkey) está atascado en
Pending.Verifica que exista un StorageClass disponible y configurado como predeterminado. Consulta PVC atascado en Pending más abajo. -
Node selector o affinity sin coincidencia — El pod requiere una etiqueta de nodo específica que ningún nodo del clúster tiene.
Revisa tu
values.yamlpara ver la configuración denodeSelectoroaffinity, y verifica que los nodos tengan las etiquetas esperadas:
ImagePullBackOff
Síntoma: Los pods muestran estado
ImagePullBackOff o ErrImagePull.
Comandos de diagnóstico:
-
Tag de imagen incorrecto — El tag especificado no existe en el registro. Verifica el valor de
image.tagen tuvalues.yamlcontra la tabla de compatibilidad de versiones. -
Registro privado requiere autenticación — El clúster no puede descargar imágenes sin credenciales.
Crea un secret de imagen y referencíalo en tu
values.yaml: -
imagePullSecretsno configurado — El secret existe pero no está referenciado en la configuración del componente. Asegúrate de queimagePullSecretsesté configurado en todos los componentes afectados.
CrashLoopBackOff
Síntoma: Los pods arrancan y se caen inmediatamente, reiniciándose repetidamente. Comandos de diagnóstico:
-
Variables de entorno incorrectas o faltantes — Una clave de configuración requerida está ausente o tiene un valor incorrecto. Revisa los logs buscando mensajes como
missing env var,invalid configo similares. Revisa la secciónconfigmapde tuvalues.yaml. -
Secret de Kubernetes faltante — El pod referencia un secret que no existe.
Si el secret no existe, créalo manualmente o vuelve a ejecutar la instalación de Helm.
-
Credenciales de base de datos incorrectas — El servicio no puede autenticarse con PostgreSQL, MongoDB o Redis.
Revisa los logs buscando
authentication failed,connection refusedoECONNREFUSED. Verifica la secciónsecretsen tuvalues.yamly confirma que las credenciales coincidan con las usadas al aprovisionar las bases de datos. -
OOMKilled — El contenedor superó su límite de memoria y fue eliminado por el kernel.
Busca
OOMKilleden la secciónLast State. Aumentaresources.limits.memoryen tuvalues.yaml. Consulta Evicción de pod / OOMKilled más abajo.
Timeout en Helm install
Síntoma:
helm install o helm upgrade falla con un error de timeout antes de que el release alcance el estado deployed.
Comandos de diagnóstico:
-
Descarga de imágenes lenta — Las imágenes grandes en una conexión lenta pueden superar el timeout predeterminado. Aumenta el timeout:
-
Init containers fallando — Un init container (por ejemplo, el job de bootstrap de base de datos) está colgado o reintentando. Revisa los logs del init container:
-
Readiness probes fallando — El pod está corriendo pero no pasa su verificación de readiness, por lo que Helm espera indefinidamente. Describe el pod y revisa las secciones
ConditionsyEvents. Puede que necesites aumentarinitialDelaySecondsen la configuración del readiness probe, o investigar por qué el servicio no está saludable al arrancar.
Servicios no accesibles
Síntoma: Las APIs de Midaz no son accesibles desde fuera del clúster, o los servicios no pueden comunicarse internamente. Comandos de diagnóstico:
-
Configuración incorrecta del Ingress — El recurso Ingress existe pero el controlador no lo está procesando. Verifica que
ingress.classNamecoincida con la clase de tu controlador de ingress instalado:También verifica que el pod del controlador de ingress esté corriendo: -
DNS no apunta al balanceador de carga — El hostname en tu Ingress no resuelve a la IP externa del controlador. Obtén la IP externa y compárala con tu registro DNS:
-
Configuración TLS incorrecta — Un secret TLS faltante o expirado hace que el ingress falle silenciosamente. Verifica que el secret exista y no haya expirado:
Si usas cert-manager, revisa el estado del recurso Certificate:
PVC atascado en Pending
Síntoma: Un PersistentVolumeClaim permanece en estado
Pending y el pod dependiente no puede arrancar.
Comandos de diagnóstico:
-
Sin StorageClass predeterminado — Ningún StorageClass está marcado como predeterminado en el clúster.
Si ninguno muestra
(default), crea un StorageClass o configura uno explícitamente en tuvalues.yamlpara la dependencia afectada (por ejemplo,postgresql.primary.persistence.storageClass). -
Modo de acceso incorrecto — El StorageClass no soporta el modo de acceso solicitado por el PVC (por ejemplo,
ReadWriteManyen un driver de almacenamiento que solo soportaReadWriteOnce). Revisa la secciónEventsdekubectl describe pvc. AjustaaccessModesen tuvalues.yamlpara que coincida con lo que soporta tu StorageClass. -
Modo de binding del volumen es
WaitForFirstConsumer— Algunos StorageClasses usan binding diferido. El PVC permanecerá enPendinghasta que un pod que lo consuma sea programado. Este es un comportamiento normal; espera a que el pod sea programado.
Evicción de pod / OOMKilled
Síntoma: Los pods son eviccionados repetidamente o muestran
OOMKilled en su último estado.
Comandos de diagnóstico:
-
Límites de memoria configurados demasiado bajos — El
resources.limits.memorydel contenedor está por debajo de lo que el servicio realmente necesita bajo carga. Revisa el uso actual de memoria conkubectl top podsy luego aumenta el límite en tuvalues.yaml: -
Nodo bajo presión de memoria — El nodo en sí está bajo presión y el kubelet está eviccionando pods de menor prioridad. Verifica las condiciones del nodo:
Considera agregar nodos o habilitar el cluster autoscaler. También puedes establecer
PriorityClassen los pods de Midaz para protegerlos de la evicción.
Definiciones de RabbitMQ no cargadas
Síntoma: Los servicios de Midaz arrancan pero las transacciones fallan, faltan colas, o los mensajes no se procesan. Los logs pueden mostrar errores de conexión AMQP o exchanges/colas faltantes. Comandos de diagnóstico:
-
RabbitMQ externo sin
load_definitions.json— Al usar una instancia externa de RabbitMQ, las colas, exchanges y bindings requeridos no están presentes. Habilita el job de bootstrap en tuvalues.yaml:O aplica las definiciones manualmente:El archivoload_definitions.jsonse encuentra encharts/midaz/files/rabbitmq/load_definitions.jsonen el repositorio de Helm. -
Job de bootstrap fallado silenciosamente — El job se ejecutó pero encontró un error (credenciales incorrectas, timeout de red, puerto incorrecto).
Verifica las credenciales de
rabbitmqAdminLoginy que el puerto de administración (predeterminado15672) sea accesible desde dentro del clúster.
Recursos relacionados
- Desplegar Midaz con Helm — Guía de instalación inicial
- Actualizar Midaz y plugins con Helm — Procedimientos de actualización y rollback
- Actualización de Helm — Cambios importantes y rutas de migración entre versiones mayores
- Compatibilidad de versiones — Tabla de referencia de versiones
- Repositorio de Helm — Código fuente y notas de versión

