Resolva falhas de agendamento de pods, erros de pull de imagem, travamentos na inicialização, OOM kills e problemas de runtime.
Para solução de problemas via console — visualização de status, eventos e logs do pod, acesso a terminais e execução de diagnósticos — consulte Procedimentos comuns de solução de problemas.
Procedimento rápido de diagnóstico
Para diagnosticar um pod anormal, acesse a página de detalhes em Pods. Clique na aba Events para revisar as descrições de eventos anormais. Em seguida, clique na aba Logs para verificar logs anormais recentes.
Pod no estado Pending
Se um Pod apresentar status Unschedulable em seus Status Details ou se um evento FailedScheduling aparecer em Events, acesse para verificar a integridade dos nós e os níveis de recursos (CPU e memória). Verifique também se as regras de afinidade do pod — nodeSelector, nodeAffinity e tolerâncias — são restritivas demais. Consulte Problemas de agendamento.
Falha no pull de imagem (ImagePullBackOff/ErrImagePull)
Na página de detalhes de Pods, acesse a aba Container e verifique o endereço da Image. Acesse o nó do pod e execute crictl pull <image-address> ou curl -v https://<image-address> para verificar a conectividade de rede com o repositório de imagens. No canto superior direito, clique em Edit YAML e confirme se o Secret especificado no campo spec.imagePullSecrets da workload existe e é válido. Para mais etapas de solução de problemas, consulte Problemas de pull de imagem.
Falha ao iniciar o Pod (CrashLoopBackOff)
A aplicação trava e reinicia repetidamente. Na página de detalhes de Pods, clique na aba Logs e selecione Show the log of the last container exit para visualizar a causa da falha. Para mais etapas de solução de problemas, consulte Solucionar falhas de inicialização de pods.
Pod em Running mas não está pronto
A sonda de prontidão (readiness probe) do pod falhou. Na página Edit da Workloads alvo, verifique se o caminho da requisição de health check (por exemplo, /healthz) e a porta correspondem aos fornecidos pela aplicação. Para mais etapas de solução de problemas, consulte O pod está em Running mas não está pronto (Ready: False).
Desative temporariamente o health check e use curl no terminal do pod ou no nó host para verificar se o endpoint responde corretamente.
Pod com OOMKilled
Na página de detalhes de Pods, clique na aba Logs e selecione Show the log of the last container exit para visualizar os logs de OOM. Verifique se a aplicação apresenta vazamento de memória ou erro de out-of-memory (OOM). Para aplicações Java, otimize o parâmetro -Xmx. Ajuste o limite de recursos de memória da aplicação (resources.limits.memory) conforme necessário. Para mais etapas de solução de problemas, consulte OOMKilled.
Se uma sonda de vivacidade (liveness probe) estiver configurada, o pod permanece no estado OOMKilled apenas brevemente antes de reiniciar automaticamente.
Fluxo de trabalho de diagnóstico
Para diagnosticar um pod anormal, inspecione seus eventos, logs e configuração.
Fase 1: Problemas de agendamento
Pod não agendado em um nó
Se um pod permanecer no estado Pending por um período prolongado, ele não foi agendado em nenhum nó.
Mensagem de erro | Descrição | Solução |
| O cluster não possui nós disponíveis para agendamento de pods. |
|
| Nenhum nó disponível no cluster consegue atender às solicitações de recursos de CPU ou memória do pod. Um nó torna-se não agendável quando o total de | Na página de detalhes do cluster alvo, acesse e verifique a taxa de alocação de requests de CPU ou memória para o nó alvo. Passe o mouse sobre a taxa de alocação para visualizar os valores específicos de alocação de recursos.
Para visualizar o uso detalhado de recursos do nó, consulte Usar kubectl para visualizar o uso de recursos do nó.
|
| Os nós existentes não correspondem à política de afinidade de nó do pod ( |
|
|
|
|
| O agendamento falha devido a um conflito de afinidade de nó do volume. Isso geralmente ocorre porque um disco de nuvem não pode ser montado em zonas diferentes. |
|
| A instância ECS não suporta o tipo de disco de nuvem especificado. | Consulte Famílias de instâncias para confirmar os tipos de disco de nuvem suportados pela sua instância ECS. Ao montar, atualize o tipo de disco de nuvem para um que seja suportado pela instância ECS. |
| O pod não pode ser agendado em um nó porque falta uma tolerância para um dos taints do nó. |
|
| O nó tem armazenamento efêmero insuficiente. |
|
| O pod falhou ao vincular a uma persistent volume claim (PVC). | Verifique se a PVC ou PV especificado pelo pod foi criado. Execute |
Pod agendado mas permanece Pending
Se um pod foi agendado, mas permanece Pending, siga estas etapas.
-
Se um pod usar
hostPort, apenas um pod com essahostPortpode ser executado por nó, entãohostPortlimita a contagem deReplicasao número de nós. Se a porta já estiver em uso, o agendamento falha.hostPortadiciona complexidade ao agendamento. Use um Service para expor pods em vez disso. -
Se o Pod não estiver configurado com
hostPort, siga as etapas abaixo para solucionar o problema.Visualize os eventos do pod com
kubectl describe pod <pod-name>. Causas comuns incluem falhas no pull de imagem, recursos insuficientes, restrições de política de segurança e erros de configuração.Se nenhum evento útil for encontrado, verifique os logs do kubelet no nó com
grep -i <pod name> /var/log/messages* | less.
Fase 2: Problemas de pull de imagem
ImagePullBackOff ou ErrImagePull
Um status de pod ImagePullBackOff ou ErrImagePull indica que o pull da imagem falhou. Examine os eventos do pod para identificar a causa.
Mensagem de erro | Descrição | Solução sugerida |
| O acesso ao repositório de imagens é negado porque um | Verifique se o Secret especificado no campo Ao usar o ACR, utilize um credential helper para fazer pull de imagens sem senha. Consulte Fazer pull de imagens da mesma conta. |
| O endereço do repositório de imagens não pôde ser resolvido ao fazer pull de uma imagem via HTTPS. |
|
| O nó tem espaço em disco insuficiente. | Acesse o nó (consulte Escolher um método de conexão remota ECS) e execute |
| O repositório de imagens de terceiros usa um certificado assinado por uma Autoridade Certificadora (CA) desconhecida ou insegura. |
|
| A operação foi cancelada, possivelmente porque o arquivo de imagem é muito grande. O Kubernetes tem um tempo limite padrão para pull de imagens. Se o pull não progredir por um período específico, o Kubernetes assume que a operação falhou ou não está respondendo e cancela a tarefa. |
|
| Não é possível conectar ao repositório de imagens devido a problemas de rede. |
|
| Tempo limite de conexão excedido devido a problemas de rede ao fazer pull de uma imagem de um repositório no exterior. | Fazer pull de imagens de repositórios no exterior, como Docker Hub, pode falhar em clusters ACK devido a redes de operadoras instáveis. Para resolver isso, considere as seguintes soluções:
|
| O Docker Hub impõe limites de taxa nas solicitações de pull de imagem. | Faça upload da imagem para o Container Registry (ACR) e faça o pull a partir de um repositório de imagens ACR. |
O status | O mecanismo de limitação de taxa de pull de imagem do kubelet pode ter sido acionado. | Ajuste o |
Fase 3: Problemas de inicialização
Pod está no estado Init
Mensagem de erro | Descrição | Solução |
Preso no estado | O pod tem M contêineres de inicialização; N concluídos, mas os M-N restantes falharam ao iniciar. |
Consulte Depurar contêineres de inicialização. |
Preso no estado | Um contêiner de inicialização no pod falhou ao iniciar. | |
Preso no estado | Um contêiner de inicialização no pod falhou ao iniciar e está em um loop de reinicialização. |
Pod está no estado Creating
Mensagem de erro | Descrição | Solução |
| Este é um comportamento esperado devido ao design do plugin de rede Flannel. | Atualize o componente Flannel para v0.15.1.11-7e95fe23-aliyun ou posterior. Consulte Flannel. |
Em clusters que executam uma versão do Kubernetes anterior à 1.20, um vazamento de endereço IP pode ocorrer se um pod reiniciar repetidamente ou se pods de um CronJob concluírem suas tarefas e saírem rapidamente. | Atualize o cluster para Kubernetes 1.20 ou posterior (recomenda-se o mais recente). Consulte Atualizar manualmente um cluster. | |
Defeitos no containerd e runC causam esse problema. | Para uma correção de emergência, consulte Por que meu pod falha ao iniciar com o erro "no IP addresses available in range"? | |
| O plugin de rede Terway mantém um banco de dados interno no nó para rastrear e gerenciar elastic network interfaces (ENIs). Este erro ocorre quando o estado do banco de dados é inconsistente com a configuração real do dispositivo de rede, causando falha na alocação de ENI. |
|
| O plugin de rede Terway pode ter falhado ao solicitar um endereço IP do vSwitch. |
|
Falha ao iniciar o Pod (CrashLoopBackOff)
Mensagem de erro | Descrição | Solução |
O log contém |
| |
Os eventos do pod mostram | A sonda de vivacidade falhou, causando a reinicialização da aplicação. |
|
Os eventos do pod mostram | A sonda de inicialização falhou, causando a reinicialização da aplicação. |
|
O log do pod contém | Espaço em disco de nuvem insuficiente. |
|
A inicialização falha sem informações de evento. | Este problema ocorre quando um contêiner requer mais recursos do que seus limites declarados, causando sua falha. | Verifique se a configuração de recursos do pod está correta. Ative o resource profiling para obter configurações recomendadas de Request e Limit para o contêiner. |
O log do pod mostra | Existe um conflito de porta entre contêineres no mesmo pod. |
|
O log do pod mostra | A workload monta um Secret, mas o valor no Secret não está codificado em Base64. |
|
Problema específico da aplicação. | Examine os logs do pod para solucionar o problema. | |
Pod está em Running mas não está pronto (Ready: False)
Mensagem de erro | Descrição | Solução |
| A sonda de prontidão falhou, impedindo o pod alvo de receber tráfego. |
|
O status do pod é o mesmo acima. Os eventos do pod mostram | Uma sonda de inicialização com falha causa a reinicialização do contêiner. Este erro não deve resultar em um estado persistente Running/NotReady, mas sim em um estado 'CrashLoopBackOff'. | Solucione este problema conforme descrito na seção "Falha ao iniciar o Pod (CrashLoopBackOff)" para Startups. |
Fase 4: Problemas de runtime do Pod
OOMKilled
Quando um contêiner excede seu limite de memória, ele é encerrado por um OOM kill. Consulte Atribuir Recursos de Memória a Contêineres e Pods.
Se o processo encerrado for o processo principal do contêiner, o contêiner pode reiniciar inesperadamente.
Quando um evento OOM ocorre, ele aparece na aba Events da página de detalhes do pod no console, como
pod was OOM killed. node:XXX pod:XXX namespace:XXX.Configure um alerta de exceção de réplica de contêiner para receber notificações de OOM.
Nível de OOM | Descrição | Solução recomendada |
Nível de SO | Verifique o log do kernel em |
|
Nível de cgroup | Verifique o log do kernel em |
|
Consulte Causas e soluções para OOM Killer.
Terminating
Causa possível | Descrição | Solução recomendada |
O nó está no estado NotReady. | O pod é excluído automaticamente após o nó se recuperar do estado NotReady. | |
O pod está configurado com finalizers. | Se um pod estiver configurado com finalizers, o Kubernetes executa as operações de limpeza especificadas pelos finalizers antes de excluir o pod. Se uma operação de limpeza falhar ao responder, o pod permanece no estado Terminating. | Verifique a configuração de finalizer do pod com |
O hook preStop do pod é inválido ou está travado. | Se um hook preStop estiver configurado para o pod, o Kubernetes executa o hook antes de encerrar o contêiner. O pod permanece no estado Terminating enquanto o hook está em execução. | Verifique a configuração do hook preStop do pod com |
Um período de desligamento gracioso está configurado para o pod. | Se um Pod estiver configurado com um período de desligamento gracioso ( | O Kubernetes exclui automaticamente o pod após o contêiner concluir um desligamento gracioso. |
O contêiner não responde. | Quando você solicita parar ou excluir um pod, o Kubernetes envia um sinal |
|
Evicted
Causa possível | Descrição | Solução recomendada |
O nó está sob pressão de recursos devido a fatores como uso de memória ou disco. | O nó pode estar enfrentando pressão de memória, pressão de disco ou pressão de PID.
|
|
Ocorre uma evicção inesperada. | Um taint NoExecute adicionado manualmente no nó do pod causou uma evicção inesperada. | Verifique se há um taint NoExecute com |
A evicção não prossegue conforme o esperado. |
| Em um cluster pequeno (50 nós ou menos), se mais de 55% dos nós falharem, a evicção de pods para. Consulte Limites de taxa na evicção. |
Em um cluster grande (mais de 50 nós), se a fração de nós não saudáveis exceder o | ||
Um pod é frequentemente reagendado em seu nó original após ser evacuado. | O kubelet evacua pods com base no uso real de recursos, enquanto o scheduler coloca pods com base nas solicitações de recursos. Como uma evicção libera recursos, o scheduler pode reagendar um pod no mesmo nó se suas solicitações ainda couberem. | Ajuste as solicitações de recursos do pod para caber nos recursos alocáveis do nó. Consulte Definir recursos de CPU e memória para um contêiner. Ative o resource profiling para obter valores recomendados de request e limit. |
Completed
Todos os contêineres saíram com sucesso. Comum para jobs e contêineres de inicialização.
FAQ
Pod está em execução mas não funciona
Erros de YAML podem fazer com que um pod entre em Running, mas falhe ao funcionar.
Verifique as configurações do contêiner na configuração do pod.
-
Use os seguintes métodos para verificar sua configuração YAML quanto a erros de ortografia.
Se uma chave YAML estiver escrita incorretamente (por exemplo,
commandcomocommnd), o cluster cria o recurso sem erro, mas não consegue executar a chave mal escrita em runtime.O exemplo a seguir, no qual
commandestá escrito incorretamente comocommnd, descreve como solucionar problemas de ortografia.-
Adicione
--validateakubectl apply -fe executekubectl apply --validate -f XXX.yaml.Se você escrever uma palavra incorretamente, um erro será relatado:
XXX] unknown field: commnd XXX] this may be a false alarm, see https://gXXXb.XXX/6842pods/test. -
Compare a saída
pod.yamlcom o arquivo YAML original usado para criar o pod.Nota[$Pod]é o nome do Pod anômalo, que você pode obter executando o comandokubectl get pods.kubectl get pods [$Pod] -o yaml > pod.yamlSe o arquivo
pod.yamltiver mais linhas que o arquivo original, significa que o pod foi criado conforme esperado e o cluster adicionou valores padrão.Se linhas do seu arquivo YAML original estiverem ausentes em
pod.yaml, isso indica um erro de ortografia no seu arquivo original.
-
Verifique os logs do pod para solucionar o problema.
Acesse o contêiner através de um terminal e verifique se os arquivos locais dentro do contêiner estão conforme o esperado.
Verificar uso de recursos do nó com kubectl
-
Verifique o uso de CPU e memória de todos os nós no cluster.
kubectl describe nodes | awk '/^Name:/{print "\n"$2} /Resource +Requests +Limits/{print $0} /^[ \t]+cpu.*%/{print $0} /^[ \t]+memory.*%/{print $0}'Saída esperada:
cn-hangzhou.192.168.0.xxx Resource Requests Limits cpu 1725m (44%) 10320m (263%) memory 1750Mi (11%) 16044Mi (109%) cn-hangzhou.192.168.16.xxx Resource Requests Limits cpu 1885m (48%) 16820m (429%) memory 2536Mi (17%) 25760Mi (179%)Um nó com alta utilização de requests pode não conseguir satisfazer os
requestsde um novo Pod, impedindo que o Pod seja agendado. -
Substitua
YOUR_NODE_NAMEpelo nome real do nó para visualizar o uso de recursos de todos os Pods no nó.kubectl describe node YOUR_NODE_NAME | awk '/Non-terminated Pods/,/Allocated resources/{ if ($0 !~ /Allocated resources/) print }'Saída esperada:
Non-terminated Pods: (11 in total) Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age --------- ---- ------------ ---------- --------------- ------------- --- arms-prom node-exporter-gp95p 20m (0%) 1020m (26%) 160Mi (1%) 1152Mi (7%) 6d21h csdr csdr-velero-77c8bbc9c7-w46lq 500m (12%) 1 (25%) 128Mi (0%) 2Gi (13%) 6d19h kube-system ack-cost-exporter-5b647ffc65-zdrsl 100m (2%) 1 (25%) 200Mi (1%) 1Gi (6%) 6d21h kube-system ack-node-local-dns-admission-controller-5dfd74f5f4-9rl6n 100m (2%) 1 (25%) 100Mi (0%) 1Gi (6%) 6d21h kube-system ack-node-problem-detector-daemonset-6wql2 200m (5%) 1200m (30%) 300Mi (2%) 1324Mi (9%) 6d21h kube-system coredns-7784559f6-dr9sn 100m (2%) 0 (0%) 100Mi (0%) 2Gi (13%) 6d21h kube-system csi-plugin-knz7j 130m (3%) 2 (51%) 176Mi (1%) 4Gi (27%) 6d21h kube-system kube-proxy-worker-rkbzv 100m (2%) 0 (0%) 100Mi (0%) 0 (0%) 6d21h kube-system loongcollector-ds-kw7cj 100m (2%) 2 (51%) 256Mi (1%) 2Gi (13%) 6d21h kube-system node-local-dns-pgzcn 25m (0%) 0 (0%) 30Mi (0%) 1Gi (6%) 6d21h kube-system terway-eniip-lnn8n 350m (8%) 1100m (28%) 200Mi (1%) 256Mi (1%) 6d21hAjuste a configuração de
requestscom base no consumo real de recursos.
Desconexões intermitentes de rede de pods para bancos de dados
Se um pod se desconectar intermitentemente de um banco de dados, siga estas etapas.
1. Verificar pod
Verifique os eventos do pod em busca de sinais de instabilidade de conexão, como problemas de rede, reinicializações ou recursos insuficientes.
Verifique os logs do pod em busca de mensagens de erro relacionadas à conexão com o banco de dados, como timeouts, falhas de autenticação ou gatilhos de reconexão.
Monitore o uso de CPU e memória do pod para garantir que a exaustão de recursos não cause falha na aplicação ou no driver do banco de dados.
Revise os
requestselimitsde recursos do pod para garantir que ele tenha CPU e memória suficientes.
2. Verificar nó
Verifique se há escassez de recursos no nó (memória, disco). Consulte Monitorar nós.
Teste se há interrupções intermitentes de rede entre o nó e o banco de dados alvo.
3. Verificar banco de dados
Verifique o status e as métricas de desempenho do banco de dados em busca de reinicializações ou gargalos de desempenho.
Revise o número de conexões anômalas e as configurações de tempo limite de conexão, ajustando-as com base nos requisitos da sua aplicação.
Inspecione os logs do banco de dados em busca de registros relacionados a desconexões.
4. Verificar status dos componentes do cluster
Componentes do cluster com falha podem interromper a comunicação de rede de um pod.
kubectl get pod -n kube-system # Check the status of component pods.
Além disso, verifique os seguintes componentes de rede:
CoreDNS: Verifique o status e os logs do componente para garantir que o pod possa resolver corretamente o endereço do serviço de banco de dados.
Flannel: Verifique o status e os logs do componente kube-flannel.
Terway: Verifique o status e os logs do componente terway-eniip.
5. Analisar tráfego de rede
Use tcpdump para capturar pacotes e analisar o tráfego de rede para ajudar a identificar a causa do problema.
-
Obtenha informações do Pod e do nó:
Liste pods e seus nós em um namespace específico:
kubectl get pod -n [namespace] -o wide -
Acesse o nó alvo e execute os seguintes comandos para encontrar o PID do contêiner.
Containerd
-
Visualize o
CONTAINERdo contêiner.crictl ps |grep <Pod name keyword>Saída esperada:
CONTAINER IMAGE CREATED STATE a1a214d2***** 35d28df4***** 2 days ago Running -
Visualize o PID do contêiner usando o
CONTAINER ID.crictl inspect a1a214d2***** |grep -i PIDSaída esperada:
"pid": 2309838, # The PID of the target container. "pid": 1 "type": "pid"
Docker
-
Visualize o
CONTAINER IDdo contêiner.docker ps |grep <pod name keyword>Saída esperada:
CONTAINER ID IMAGE COMMAND a1a214d2***** 35d28df4***** "/nginx -
Visualize o PID do contêiner usando o
CONTAINER ID.docker inspect a1a214d2***** |grep -i PIDSaída esperada:
"Pid": 2309838, # The PID of the target container. "PidMode": "", "PidsLimit": null,
-
-
Capture pacotes.
Capture pacotes de rede entre o pod e o banco de dados alvo usando o PID do contêiner.
nsenter -t <container PID> tcpdump -i any -n -s 0 tcp and host <database IP address>Capture pacotes de rede entre o pod e o host usando o PID do contêiner.
nsenter -t <container PID> tcpdump -i any -n -s 0 tcp and host <node IP address>Capture pacotes de rede entre o host e o banco de dados.
tcpdump -i any -n -s 0 tcp and host <database IP address>
6. Otimizar aplicação
Implemente um mecanismo de reconexão automática na sua aplicação para garantir que ela possa restaurar conexões automaticamente durante um failover ou migração de banco de dados.
Use conexões persistentes em vez de conexões de curta duração para se comunicar com o banco de dados. Conexões persistentes podem reduzir significativamente a sobrecarga de desempenho e o consumo de recursos, melhorando a eficiência geral do sistema.
Solução de problemas via console
Acesse o ACK console e vá para a página de detalhes do seu cluster para solucionar problemas de Pod.
Ações | Console |
Verificar o status de um Pod |
|
Verificar as informações básicas de um Pod |
|
Verificar a configuração de um Pod |
|
Verificar os eventos de um Pod |
|
Visualizar os logs de um Pod |
Nota O ACK integra-se ao Simple Log Service (SLS) para coleta de logs de contêineres. Consulte Coletar logs de contêineres de um cluster ACK. |
Verificar os dados de monitoramento de um Pod |
Nota O ACK integra-se ao Managed Service for Prometheus para monitoramento em tempo real de clusters e contêineres. Consulte Conectar e configurar o Managed Service for Prometheus. |
Usar um terminal para acessar um contêiner e visualizar arquivos locais |
|
Executar diagnóstico de Pod |
Nota Container Intelligent Service fornece diagnósticos com um clique. Consulte Usar diagnóstico de cluster. |
Exclusão inesperada de Pod
O kube-controller-manager (KCM) realiza coleta de lixo de pods no status Completed quando sua contagem excede o limiar padrão de 12.500. O parâmetro --terminated-pod-gc-threshold configura esse limiar. Consulte a documentação de parâmetros do KCM.
Recomendação: Limpe periodicamente os pods Completed para evitar que afetem a eficiência do controlador.

> Containerd Configuration.
Os eventos do pod mostram