Comandos gerais de diagnóstico
Comece com estes comandos para obter uma visão geral do estado do seu deployment antes de mergulhar em problemas específicos.
Pods travados em Pending
Sintoma: Um ou mais pods permanecem no estado
Pending e nunca iniciam.
Comandos de diagnóstico:
-
CPU ou memória insuficiente nos nós — O scheduler não consegue encontrar um nó que satisfaça as solicitações de recursos do pod.
Verifique a seção
Eventsdokubectl describe pod. Procure mensagens comoInsufficient cpuouInsufficient memory. Reduzaresources.requestsno seuvalues.yamlou adicione mais nós ao cluster. -
PersistentVolumeClaim não vinculado — Um PVC exigido por uma dependência (PostgreSQL, MongoDB, Valkey) está travado em
Pending.Verifique se existe um StorageClass disponível e configurado como padrão. Consulte PVC travado em Pending abaixo. -
Node selector ou affinity sem correspondência — O pod exige um label de nó específico que nenhum nó do cluster possui.
Verifique seu
values.yamlpara configurações denodeSelectorouaffinitye confirme que os nós têm os labels esperados:
ImagePullBackOff
Sintoma: Os pods mostram o status
ImagePullBackOff ou ErrImagePull.
Comandos de diagnóstico:
-
Tag de imagem incorreta — A tag especificada não existe no registry. Verifique o valor de
image.tagno seuvalues.yamlcomparando com a tabela de compatibilidade de versões. -
Registry privado requer autenticação — O cluster não consegue baixar as imagens sem credenciais.
Crie um secret de pull de imagem e referencie-o no seu
values.yaml: -
imagePullSecretsnão configurado — O secret existe mas não está referenciado na configuração do componente. Certifique-se de queimagePullSecretsesteja configurado em todos os componentes afetados.
CrashLoopBackOff
Sintoma: Os pods iniciam e caem imediatamente, reiniciando repetidamente. Comandos de diagnóstico:
-
Variáveis de ambiente incorretas ou ausentes — Uma chave de configuração necessária está ausente ou tem um valor incorreto. Verifique os logs buscando mensagens como
missing env var,invalid configou similares. Revise a seçãoconfigmapdo seuvalues.yaml. -
Secret do Kubernetes ausente — O pod referencia um secret que não existe.
Se o secret não existe, crie-o manualmente ou execute novamente a instalação do Helm.
-
Credenciais de banco de dados incorretas — O serviço não consegue autenticar com PostgreSQL, MongoDB ou Redis.
Verifique os logs buscando
authentication failed,connection refusedouECONNREFUSED. Confirme a seçãosecretsno seuvalues.yamle verifique se as credenciais correspondem às usadas ao provisionar os bancos de dados. -
OOMKilled — O container excedeu seu limite de memória e foi eliminado pelo kernel.
Procure
OOMKilledna seçãoLast State. Aumenteresources.limits.memoryno seuvalues.yaml. Consulte Evicção de pod / OOMKilled abaixo.
Timeout no Helm install
Sintoma:
helm install ou helm upgrade falha com erro de timeout antes de o release atingir o estado deployed.
Comandos de diagnóstico:
-
Download de imagens lento — Imagens grandes em uma conexão lenta podem ultrapassar o timeout padrão. Aumente o timeout:
-
Init containers falhando — Um init container (por exemplo, o job de bootstrap do banco de dados) está travado ou reiniciando. Verifique os logs do init container:
-
Readiness probes falhando — O pod está rodando mas não passa na verificação de readiness, então o Helm espera indefinidamente. Descreva o pod e verifique as seções
ConditionseEvents. Pode ser necessário aumentarinitialDelaySecondsnas configurações do readiness probe, ou investigar por que o serviço não está saudável na inicialização.
Serviços inacessíveis
Sintoma: As APIs do Midaz não são acessíveis de fora do cluster, ou os serviços não conseguem se comunicar internamente. Comandos de diagnóstico:
-
Configuração incorreta do Ingress — O recurso Ingress existe mas o controller não está processando. Verifique se
ingress.classNamecorresponde à classe do seu ingress controller instalado:Também verifique se o pod do ingress controller está rodando: -
DNS não aponta para o load balancer — O hostname no seu Ingress não resolve para o IP externo do controller. Obtenha o IP externo e compare com seu registro DNS:
-
Configuração TLS incorreta — Um secret TLS ausente ou expirado faz o ingress falhar silenciosamente. Verifique se o secret existe e não está expirado:
Se usar cert-manager, verifique o status do recurso Certificate:
PVC travado em Pending
Sintoma: Um PersistentVolumeClaim permanece em estado
Pending e o pod dependente não consegue iniciar.
Comandos de diagnóstico:
-
Sem StorageClass padrão — Nenhum StorageClass está marcado como padrão no cluster.
Se nenhum mostrar
(default), crie um StorageClass ou configure um explicitamente no seuvalues.yamlpara a dependência afetada (por exemplo,postgresql.primary.persistence.storageClass). -
Modo de acesso incorreto — O StorageClass não suporta o modo de acesso solicitado pelo PVC (por exemplo,
ReadWriteManyem um driver de armazenamento que só suportaReadWriteOnce). Verifique a seçãoEventsdokubectl describe pvc. AjusteaccessModesno seuvalues.yamlpara corresponder ao que seu StorageClass suporta. -
Modo de binding do volume é
WaitForFirstConsumer— Alguns StorageClasses usam binding adiado. O PVC ficará emPendingaté que um pod que o consume seja agendado. Este é um comportamento normal; aguarde o pod ser agendado.
Evicção de pod / OOMKilled
Sintoma: Os pods são repetidamente evictados ou mostram
OOMKilled em seu último estado.
Comandos de diagnóstico:
-
Limites de memória muito baixos — O
resources.limits.memorydo container está abaixo do que o serviço realmente precisa sob carga. Verifique o uso atual de memória comkubectl top podse então aumente o limite no seuvalues.yaml: -
Nó sob pressão de memória — O próprio nó está sob pressão e o kubelet está evictando pods de menor prioridade. Verifique as condições do nó:
Considere adicionar nós ou habilitar o cluster autoscaler. Você também pode definir
PriorityClassnos pods do Midaz para protegê-los de evicção.
Definições do RabbitMQ não carregadas
Sintoma: Os serviços do Midaz iniciam mas as transações falham, filas estão ausentes, ou mensagens não estão sendo processadas. Os logs podem mostrar erros de conexão AMQP ou exchanges/filas ausentes. Comandos de diagnóstico:
-
RabbitMQ externo sem
load_definitions.json— Ao usar uma instância externa de RabbitMQ, as filas, exchanges e bindings necessários não estão presentes. Habilite o job de bootstrap no seuvalues.yaml:Ou aplique as definições manualmente:O arquivoload_definitions.jsonestá emcharts/midaz/files/rabbitmq/load_definitions.jsonno repositório do Helm. -
Job de bootstrap falhou silenciosamente — O job foi executado mas encontrou um erro (credenciais erradas, timeout de rede, porta incorreta).
Verifique as credenciais de
rabbitmqAdminLogine confirme que a porta de gerenciamento (padrão15672) é acessível de dentro do cluster.
Recursos relacionados
- Implantar o Midaz com Helm — Guia de instalação inicial
- Atualizar o Midaz e plugins via Helm — Procedimentos de atualização e rollback
- Atualização do Helm — Alterações incompatíveis e caminhos de migração entre versões principais
- Compatibilidade de versões — Tabela de referência de versões
- Repositório do Helm — Código-fonte e notas de versão

