Nó não está pronto

O que é um problema de nó não pronto?

Um erro "Node Not Ready" significa que o nó de trabalho do Kubernetes não está íntegro e não pode aceitar ou executar os Pods. Isso geralmente ocorre quando o kubelet para de se comunicar com o plano de controle ou quando o nó está enfrentando problemas de falta recursos ou de rede.

Dica: Quando um nó está com o status NotReady, o Kubernetes para de agendar novos Pods nesse nó e pode reagendar os Pods existentes neste nó para nós saudáveis.

Sintomas
  • O status do nó muda para NotReady.
  • Os pods permanecem nos estados Pending, Unknown, ou Terminating.
  • Novos Pods não são agendados no nó afetado.
  • Os aplicativos em execução no nó ficam indisponíveis.
Causas comuns
Causa Descrição
Falha no Kubelet O serviço Kubelet parou ou está com problemas.
Falha no Runtime do Contêiner O Docker ou containerd não está em execução.
Disco Cheio O armazenamento do nó está esgotado ou disco under pressure.
Falta de Memória O nó está ficando sem memória.
Falha de Rede O nó não consegue se comunicar com o plano de controle.
Problema de DNS/Sincronização de Relógio Problemas de DNS ou sincronização de relógio afetam a comunicação do nó.
Como diagnosticar
  1. Verificar o estado do nó
BASH
kubectl get nodes 

Saída esperada:

TXT
NAME       STATUS   ROLES               AGE     VERSION
node-1     Ready    control-plane       129d    v1.36.2
node-2     Ready    control-plane       129d    v1.36.2
node-3     Ready    control-plane       46d     v1.36.2
node-4     Ready    worker              128d    v1.36.2
node-5     Ready    gpu,worker          99d     v1.36.2
node-6     NotReady worker              128d    v1.36.2
  1. Descreva o nó
BASH
kubectl describe node <node-name>

Analise:

  • Conditions
  • Events
  • DiskPressure
  • MemoryPressure
  • NetworkUnavailable
  1. Verificar o status do Kubelet
BASH
systemctl status kubelet
systemctl status snap.microk8s.daemon-kubelite

Verifique se o serviço kubelet está ativo.

  1. Verificar o tempo de execução do contêiner

Para containerd:

BASH
systemctl status containerd

Para Docker :

BASH
systemctl status docker
  1. Verifique o disco e a memória
BASH
df -h 
free -h

Procurar por:

  • Disk full
  • Memory exhaustion
  • DiskPressure
  • MemoryPressure
  1. Verifique a conectividade da rede

Verifique se o nó consegue se comunicar com o servidor da API do Kubernetes e certifique-se de que o DNS e a sincronização de tempo estejam funcionando corretamente.

Como consertar
  • Reinicie o serviço kubelet.
  • Reinicie o ambiente de execução do contêiner (containerd ou Docker).
  • Corrija problemas de rede, DNS ou sincronização de horário.
  • Libere espaço em disco ou resolva a pressão sobre a memória.
  • Se necessário, esvazie e reinicie o nó.
Comandos importantes
BASH
kubectl get nodes
kubectl describe node <node-name>

systemctl status kubelet
systemctl restart kubelet

systemctl status containerd
systemctl restart containerd

df -h
free -h

Se estiver usando Docker

BASH
systemctl status docker
systemctl restart docker
Pontos-chave

NotReady significa que o nó não está íntegro ou não consegue se comunicar com o plano de controle do Kubernetes.
Comece por kubectl describe node para identificar a causa.
Verifique o kubelet, o tempo de execução do contêiner, o disco, a memória, a rede, o DNS e a sincronização do relógio.
Se o problema persistir após corrigir a causa raiz, drene, reinicie o nó e confirme se ele retorna ao estado Ready.

Próximo Artigo Artigo anterior