Comandos gerais de diagnóstico
Comece por estes comandos para ter um panorama do estado do seu deploy.
Pods travados em Pending
Sintoma: um ou mais pods continuam no estado
Pending e nunca iniciam.
Comandos de diagnóstico:
-
CPU ou memória insuficientes nos nós. O scheduler não encontra um nó que satisfaça os requests 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 sem bind. Um PVC exigido por uma dependência (PostgreSQL, MongoDB, Valkey) está travado em
Pending.Verifique se existe uma StorageClass disponível e se ela é a padrão. Consulte PVC travado em Pending abaixo. -
Seletor de nó ou afinidade incompatível. O pod exige um label de nó específico que nenhum nó do cluster tem.
Verifique as configurações
nodeSelectorouaffinityno seuvalues.yamle confirme que seus nós têm os labels esperados:
ImagePullBackOff
Sintoma: os pods mostram o status
ImagePullBackOff ou ErrImagePull.
Comandos de diagnóstico:
-
Tag de imagem errada. A tag indicada não existe no registry. Inspecione o pacote do chart selecionado e compare
ledger.image.tagcom os metadados e os values dele. A página de versões do chart do Midaz registra o padrão auditado. -
O registry privado exige autenticação. O cluster não consegue baixar imagens sem credenciais.
Crie um secret de pull de imagem e referencie-o no seu
values.yaml: -
imagePullSecretsausente. O secret existe, mas a configuração do componente não faz referência a ele. DefinaimagePullSecretsem todos os componentes afetados.
CrashLoopBackOff
Sintoma: os pods iniciam e caem na hora, reiniciando repetidamente. Comandos de diagnóstico:
-
Variáveis de ambiente erradas ou ausentes. Uma chave de configuração obrigatória está ausente ou tem um valor incorreto. Procure nos logs mensagens como
missing env var,invalid configou parecidas. Revise a seçãoconfigmapdo seuvalues.yaml. -
Secret do Kubernetes ausente. O pod faz referência a um secret que não existe.
Se o secret não existe, crie-o manualmente ou rode a instalação do Helm de novo.
-
Credenciais de banco de dados erradas. O serviço não consegue se autenticar no PostgreSQL, no MongoDB ou no Redis.
Procure nos logs
authentication failedouconnection refused. Verifique a seçãosecretsdo seuvalues.yamle confirme que as credenciais são as mesmas que você usou ao provisionar os bancos de dados. -
OOMKilled. O container passou do limite de memória e o kernel o matou.
Procure
OOMKilledna seçãoLast State. Aumenteresources.limits.memoryno seuvalues.yaml. Consulte Eviction de pod / OOMKilled abaixo.
Timeout na instalação com Helm
Sintoma: o
helm install ou o helm upgrade falha com erro de timeout antes de o release chegar ao estado deployed.
Comandos de diagnóstico:
-
Download lento de imagens. Imagens grandes em uma conexão lenta podem passar do timeout padrão. Aumente o timeout:
-
Init containers falhando. Um init container (por exemplo, o job de bootstrap do banco de dados) trava ou faz novas tentativas. Consulte os logs do init container:
-
Probes de readiness falhando. O pod roda, mas não passa na verificação de readiness, então o Helm espera indefinidamente. Descreva o pod e olhe as seções
ConditionseEvents. Você pode precisar aumentarinitialDelaySecondsnas configurações da probe de readiness ou investigar por que o serviço não fica saudável ao iniciar.
Serviços inacessíveis
Sintoma: as APIs do Midaz ficam inacessíveis de fora do cluster, ou os serviços não conseguem se comunicar internamente. Comandos de diagnóstico:
-
Ingress mal configurado. O recurso Ingress existe, mas o controller não o assume. Verifique se
ingress.classNamecorresponde à classe do ingress controller que você instalou:Verifique também se o próprio pod do ingress controller está rodando: -
DNS não aponta para o load balancer. O hostname do seu Ingress não resolve para o IP externo do controller. Pegue o IP externo e compare com o seu registro DNS:
-
TLS mal configurado. Um secret TLS ausente ou expirado faz o ingress falhar em silêncio. Verifique se o secret existe e se não expirou:
Se você usa o cert-manager, verifique o status do recurso Certificate:
PVC travado em Pending
Sintoma: um PersistentVolumeClaim continua no estado
Pending e o pod dependente não consegue iniciar.
Comandos de diagnóstico:
-
Sem StorageClass padrão. O cluster não tem uma StorageClass padrão.
Se nenhuma mostrar
(default), crie uma StorageClass ou defina uma explicitamente no seuvalues.yamlpara a dependência afetada (por exemplo,postgresql.primary.persistence.storageClass). -
Modo de acesso errado. A StorageClass não aceita o modo de acesso pedido pelo PVC (por exemplo,
ReadWriteManyem um driver de armazenamento que aceita apenasReadWriteOnce). Verifique a seçãoEventsdokubectl describe pvc. AjusteaccessModesno seuvalues.yamlpara corresponder ao que sua StorageClass aceita. -
O modo de binding do volume é
WaitForFirstConsumer. Algumas StorageClasses usam binding tardio. O PVC fica emPendingaté um pod que o consome ser agendado. Esse é o comportamento normal. Espere o pod ser agendado.
Eviction de pod / OOMKilled
Sintoma: os pods sofrem eviction repetidamente ou mostram
OOMKilled no último estado.
Comandos de diagnóstico:
-
Limites de memória baixos demais. O
resources.limits.memorydo container fica abaixo do que o serviço precisa sob carga. Revise o uso atual de memória comkubectl top podse aumente o limite no seuvalues.yaml: Os padrões do chart sãorequests: 256Mi / 1500melimits: 512Mi / 2000m. Seu override substitui esses valores, então trate os padrões como a base de dimensionamento. Defina o limite de memória acima do padrão quando o container sofrer OOMKilled: -
Nó sob pressão de memória. O próprio nó está sob pressão e o kubelet faz eviction dos pods de prioridade menor. Verifique as conditions do nó:
Considere adicionar nós ou habilitar o cluster autoscaler. Você também pode definir
PriorityClassnos pods do Midaz para protegê-los da eviction.
Definições do RabbitMQ não carregadas
Sintoma: os serviços do Midaz iniciam, mas as transações falham, as filas não existem ou as mensagens ficam sem processamento. Os logs podem mostrar erros de conexão AMQP ou exchanges/filas ausentes. Comandos de diagnóstico:
Os nomes dos Jobs de bootstrap são
<release>-bootstrap-postgres, <release>-bootstrap-mongodb e <release>-bootstrap-rabbitmq. Eles definem ttlSecondsAfterFinished: 300, então se excluem cinco minutos depois de terminar. Colete os logs deles logo, ou o comando retorna NotFound.-
RabbitMQ externo sem
load_definitions.json. Quando você usa uma instância externa de RabbitMQ, as filas, os exchanges e os 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.jsonfica emcharts/midaz/files/rabbitmq/load_definitions.jsonno repositório Helm. -
O job de bootstrap falhou em silêncio. O job rodou, mas encontrou um erro (credenciais erradas, timeout de rede, porta errada).
Verifique as credenciais
rabbitmqAdminLogine se a porta de gerenciamento (padrão15672) é alcançável de dentro do cluster.
Recursos relacionados
- Fazer deploy do Midaz com Helm: guia de instalação inicial
- Fazer upgrade do Midaz e dos plugins via Helm: procedimentos de upgrade e rollback
- Fazer upgrade do Helm: mudanças incompatíveis e caminhos de migração entre versões maiores
- Compatibilidade de versões do chart do Midaz: metadados atuais do chart e da aplicação
- Repositório Helm: código-fonte e notas de release

