Detecte problemas de integridade dos nós com o agente de monitoramento de nós do EKS - Amazon EKS

Ajudar a melhorar esta página

Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.

Detecte problemas de integridade dos nós com o agente de monitoramento de nós do EKS

Este tópico descreve em detalhes os problemas de integridade dos nós detectados pelo agente de monitoramento de nós do EKS, como esses problemas são apresentados como condições ou eventos dos nós e como configurar o agente de monitoramento de nós.

O agente de monitoramento de nós do EKS pode ser utilizado com ou sem o reparo automático de nós do EKS. Para obter mais informações sobre o reparo automático de nós do EKS, consulte Reparar automaticamente nós em clusters do EKS.

O código-fonte do agente de monitoramento de nós do EKS está publicado no GitHub no repositório aws/eks-node-monitoring-agent.

Problemas de integridade de nós

As tabelas a seguir descrevem problemas de integridade de nós que podem ser detectados pelo agente de monitoramento de nós. Há dois tipos de problemas:

  • Condição: um problema terminal que justifica uma ação de remediação, como a substituição ou reinicialização de uma instância. Quando o reparo automático estiver habilitado, o Amazon EKS executará uma ação de reparo, seja uma substituição ou uma reinicialização do nó. Para obter mais informações, consulte Condições de nós.

  • Evento: um problema temporário ou uma configuração de nós abaixo do ideal. Nenhuma ação de reparo automático ocorrerá. Para obter mais informações, consulte Eventos de nós.

Problemas de integridade de nós com AcceleratedHardware

Para os problemas listados na tabela abaixo com gravidade do tipo “Condição”, a condição de monitoramento utilizada é AcceleratedHardwareReady. Os eventos e condições apresentados na tabela abaixo referem-se a problemas de integridade dos nós relacionados ao NVIDIA e ao Neuron.

Nome Gravidade Descrição Ação de reparo

DCGMDiagnosticFailure

Condição

Um caso de teste do conjunto de testes de diagnóstico ativo do DCGM falhou.

Nenhum

DCGMError

Condição

Houve perda de conexão com o processo host do DCGM ou não foi possível estabelecê-la.

Nenhum

DCGMFieldError[Code]

Event

O DCGM detectou degradação da GPU por meio de um identificador de campo.

Nenhum

DCGMHealthCode[Code]

Event

Uma verificação de integridade do DCGM falhou de forma não fatal.

Nenhum

DCGMHealthCode[Code]

Condição

Uma verificação de integridade do DCGM falhou de forma fatal.

Nenhum

NeuronDMAError

Condição

Um mecanismo de DMA encontrou um erro irrecuperável.

Substituir

NeuronHBMUncorrectableError

Condição

Um HBM encontrou um erro incorrigível e produziu resultados incorretos.

Substituir

NeuronNCUncorrectableError

Condição

Foi detectado um erro de memória incorrigível do Neuron Core.

Substituir

NeuronSRAMUncorrectableError

Condição

Uma SRAM no chip encontrou um erro de paridade e produziu resultados incorretos.

Substituir

NvidiaDeviceCountMismatch

Event

O número de GPUs visíveis por meio da biblioteca NVML é inconsistente com o número de dispositivos da NVIDIA no sistema de arquivos.

Nenhum

NvidiaDoubleBitError

Condição

Um erro de dois bits foi produzido pelo driver da GPU.

Substituir

NvidiaNCCLError

Event

Ocorreu uma falha de segmentação na NVIDIA Collective Communications Library (libnccl).

Nenhum

NvidiaNVLinkError

Condição

Erros do NVLink foram relatados pelo driver da GPU.

Substituir

NvidiaPCIeError

Event

As retransmissões de PCIe foram acionadas para a recuperação de erros de transmissão.

Nenhum

NvidiaPageRetirement

Event

O driver da GPU marcou uma página de memória para retirada. Isso poderá ocorrer se houver um único erro de bit duplo ou se dois erros de bit único forem encontrados no mesmo endereço.

Nenhum

NvidiaPowerError

Event

O uso de energia pelas GPUs ultrapassou os limites permitidos.

Nenhum

NvidiaThermalError

Event

O status térmico das GPUs ultrapassou os limites permitidos.

Nenhum

NvidiaXID[Code]Error

Condição

Ocorreu um erro crítico relacionado com a GPU.

Substituir ou Reinicializar

NvidiaXID[Code]Warning

Event

Ocorreu um erro não crítico relacionado com a GPU.

Nenhum

Códigos de erro NVIDIA XID

O agente de monitoramento de nós detecta erros NVIDIA XID a partir dos logs do kernel da GPU. Os erros XID dividem-se em duas categorias:

  • Códigos XID conhecidos: erros críticos que definem uma condição do nó (AcceleratedHardwareReady=False) e acionam o reparo automático quando habilitado. O formato do código de motivo é NvidiaXID[Code]Error. Os códigos XID conhecidos que o agente de monitoramento do nó do EKS detecta podem não representar a lista completa de códigos XID da NVIDIA que exigem ações de reparo.

  • Códigos XID desconhecidos: registrados apenas como eventos do Kubernetes. Eles não acionam o reparo automático. O formato do código de motivo é NvidiaXID[Code]Warning. Para investigar erros XID desconhecidos, analise os logs do kernel com dmesg | grep -i nvrm.

Para obter mais informações sobre erros do XID, consulte Xid Errors na Documentação de implantação e gerenciamento da GPU NVIDIA. Para obter mais informações sobre as mensagens individuais do XID, consulte Understanding Xid Messages na Documentação de implantação e gerenciamento da GPU NVIDIA.

A tabela a seguir lista os códigos XID mais conhecidos, seus significados e a ação padrão de reparo do nó, caso esteja habilitada.

Código XID Descrição Ação de reparo

13

Exceção do mecanismo gráfico: ocorreu um erro no mecanismo gráfico da GPU, geralmente causado por problemas de software ou falhas no driver.

Reinicializar

31

Falha de página na memória da GPU: uma aplicação tentou acessar uma área da memória da GPU que não está mapeada ou não é acessível.

Reinicializar

48

Erro ECC de dois bits: ocorreu um erro de dois bits não corrigível na memória da GPU, indicando uma possível degradação do hardware.

Reinicializar

63

Evento de remapeamento da memória da GPU: o driver da GPU remapeou uma parte da memória da GPU devido a erros detectados. Isso geralmente é recuperável.

Reinicializar

64

Falha no remapeamento da memória da GPU: a GPU não conseguiu remapear a memória defeituosa, o que indica problemas de hardware.

Reinicializar

74

Erro NVLink: ocorreu um erro na interconexão NVLink de alta velocidade entre as GPUs.

Substituir

79

A GPU foi desconectada do barramento: a GPU não está mais acessível via PCIe, o que geralmente indica uma falha de hardware ou um problema de alimentação.

Substituir

94

Erro de memória contido: ocorreu um erro de memória, mas ele foi contido e não afetou outras aplicações.

Reinicializar

95

Erro de memória não contida: ocorreu um erro de memória que pode ter afetado outras aplicações ou a memória do sistema.

Reinicializar

119

Tempo limite do GSP RPC: o tempo de espera para a comunicação com o processador do sistema da GPU expirou, possivelmente devido a problemas de firmware.

Substituir

120

Erro no GSP: ocorreu um erro no processador do sistema da GPU.

Substituir

121

Erro C2C: ocorreu um erro na interconexão entre chips (utilizada em GPUs com vários chips).

Substituir

140

Erro ECC não recuperado: um erro ECC escapou do mecanismo de contenção e pode ter corrompido os dados.

Substituir

Para visualizar as condições atuais do nó relacionadas à integridade da GPU, execute o seguinte comando.

kubectl get nodes -o custom-columns='NAME:.metadata.name,ACCELERATOR_READY:.status.conditions[?(@.type=="AcceleratedHardwareReady")].status,REASON:.status.conditions[?(@.type=="AcceleratedHardwareReady")].reason'

Para visualizar eventos relacionados ao XID no seu cluster, execute um dos seguintes comandos.

kubectl get events | grep -i "NvidiaXID"

Problemas de integridade de nós com ContainerRuntime

Para os problemas listados na tabela abaixo com gravidade do tipo “Condição”, a condição de monitoramento utilizada é ContainerRuntimeReady.

Nome Gravidade Descrição Ação de reparo

ContainerRuntimeFailed

Event

O runtime do contêiner falhou ao criar um contêiner, provavelmente relacionado a quaisquer problemas relatados, caso tenham ocorrido repetidamente.

Nenhum

DeprecatedContainerdConfiguration

Event

Uma imagem de contêiner usando a versão do manifesto de imagem obsoleta (versão 2 e esquema 1) foi extraída recentemente para o nó por meio do containerd.

Nenhum

KubeletFailed

Event

O kubelet entrou em um estado de falha.

Nenhum

LivenessProbeFailures

Event

Uma falha na sonda de liveness foi detectada, possivelmente indicando problemas no código da aplicação ou valores de tempo limite insuficientes, caso tenham ocorrido repetidamente.

Nenhum

PodStuckTerminating

Condição

Um pod está ou estava preso no encerramento por um tempo excessivo, o que pode ser causado por erros de CRI impedindo a progressão do estado do pod.

Substituir

ReadinessProbeFailures

Event

Uma falha na sonda de readiness foi detectada, possivelmente indicando problemas no código da aplicação ou valores de tempo limite insuficientes, caso tenham ocorrido repetidamente.

Nenhum

[Name]RepeatedRestart

Event

Uma unidade do systemd está reiniciando com frequência.

Nenhum

ServiceFailedToStart

Event

Uma unidade do systemd falhou ao iniciar.

Nenhum

Problemas de integridade de nós do kernel

Para os problemas listados na tabela abaixo com gravidade do tipo “Condição”, a condição de monitoramento utilizada é KernelReady.

Nome Gravidade Descrição Ação de reparo

AppBlocked

Event

A tarefa foi bloqueada da programação por um longo período, o que geralmente ocorre devido a um bloqueio na entrada ou na saída.

Nenhum

AppCrash

Event

Uma aplicação no nó falhou.

Nenhum

ApproachingKernelPidMax

Event

A quantidade de processos está chegando ao limite máximo de PIDs permitido pela atual configuração kernel.pid_max do sistema. Se esse limite for atingido, não será possível iniciar novos processos.

Nenhum

ApproachingMaxOpenFiles

Event

O número de arquivos abertos está se aproximando do número máximo de arquivos abertos possíveis, de acordo com as configurações atuais do kernel, após o qual a abertura de novos arquivos falhará.

Nenhum

ConntrackExceededKernel

Event

O rastreamento de conexões excedeu o máximo para o kernel e novas conexões não puderam ser estabelecidas, o que pode resultar em perda de pacotes.

Nenhum

ExcessiveZombieProcesses

Event

Processos que não podem ser totalmente recuperados estão se acumulando em grandes números, o que indica problemas na aplicação e pode levar a atingir os limites de processos do sistema.

Nenhum

ForkFailedOutOfPIDs

Condição

Uma chamada fork ou exec falhou porque o sistema ficou sem IDs de processo ou memória, o que pode ser causado por processos zumbis ou esgotamento da memória física.

Substituir

KernelBug

Event

Um bug do kernel foi detectado e relatado pelo próprio Kernel Linux, embora às vezes isso possa ser causado por nós com alto uso de CPU ou memória, levando ao atraso no processamento de eventos.

Nenhum

LargeEnvironment

Event

O número de variáveis de ambiente para este processo é maior do que o esperado. Isso pode ser causado pelo excesso de serviços com a configuração enableServiceLinks definida como “verdadeira”, resultando em possíveis problemas de performance.

Nenhum

RapidCron

Event

Um cron job está sendo executado com uma frequência maior que a cada cinco minutos neste nó, o que poderá afetar a performance se o trabalho consumir recursos significativos.

Nenhum

SoftLockup

Event

A CPU ficou paralisada por um determinado período de tempo.

Nenhum

Problemas de integridade de nós de rede

Para os problemas listados na tabela abaixo com gravidade do tipo “Condição”, a condição de monitoramento utilizada é NetworkingReady.

Nome Gravidade Descrição Ação de reparo

BandwidthInExceeded

Event

Os pacotes foram enfileirados ou descartados porque a largura de banda agregada de entrada excedeu o máximo para a instância.

Nenhum

BandwidthOutExceeded

Event

Os pacotes foram enfileirados ou descartados porque a largura de banda agregada de saída excedeu o máximo para a instância.

Nenhum

ConntrackExceeded

Event

O rastreamento de conexões excedeu o máximo para a instância e novas conexões não puderam ser estabelecidas, o que pode resultar em perda de pacotes.

Nenhum

EFAErrorMetric

Event

As métricas do driver EFA indicam que há uma interface com degradação de performance.

Nenhum

IPAMDInconsistentState

Event

O arquivo de ponto de verificação do IPAMD, no disco, está inconsistente com os endereços IP registrados no runtime do contêiner.

Nenhum

IPAMDNoIPs

Event

O IPAMD está sem endereços IP disponíveis.

Nenhum

IPAMDNotReady

Condição

O IPAMD não consegue se conectar ao servidor da API.

Substituir

IPAMDNotRunning

Condição

Não foi possível localizar o processo da CNI do Amazon VPC em execução no sistema.

Substituir

IPAMDRepeatedlyRestart

Event

Ocorreram várias reinicializações no serviço do IPAMD.

Nenhum

InterfaceNotRunning

Condição

Esta interface parece não estar funcionando ou há problemas de rede.

Substituir

InterfaceNotUp

Condição

Esta interface parece não estar ativa ou há problemas de rede.

Substituir

KubeProxyNotReady

Event

O kube-proxy falhou ao observar ou listar recursos.

Nenhum

LinkLocalExceeded

Event

Os pacotes foram descartados porque o PPS do tráfego para os serviços de proxy local excedeu o máximo para a interface da rede.

Nenhum

MACAddressPolicyMisconfigured

Event

O valor definido para MACAddressPolicy na configuração de link do systemd-networkd está incorreto.

Nenhum

MissingDefaultRoutes

Event

Há regras de rota padrão ausentes.

Nenhum

MissingIPRoutes

Event

Existem rotas ausentes para os endereços IP dos pods.

Nenhum

MissingIPRules

Event

Existem regras ausentes para os endereços IP dos pods.

Nenhum

MissingLoopbackInterface

Condição

A interface de loopback está ausente nesta instância, causando falha nos serviços que dependem da conectividade local.

Substituir

NetworkSysctl

Event

As configurações de sysctl da rede deste nó podem estar configuradas incorretamente.

Nenhum

PPSExceeded

Event

Os pacotes foram enfileirados ou descartados porque o PPS bidirecional excedeu o máximo para a instância.

Nenhum

PortConflict

Event

Se um pod usar hostPort, ele pode gravar regras de iptables que substituem as portas já vinculadas do host. Isso pode bloquear a comunicação entre o servidor de API e o kubelet.

Nenhum

UnexpectedRejectRule

Event

Uma regra inesperada de REJECT ou DROP foi encontrada no iptables, o que pode estar bloqueando o tráfego esperado.

Nenhum

Problemas de integridade do nó de armazenamento

Para os problemas listados na tabela abaixo com gravidade do tipo “Condição”, a condição de monitoramento utilizada é StorageReady.

Nome Gravidade Descrição Ação de reparo

EBSInstanceIOPSExceeded

Event

O limite máximo de IOPS da instância foi excedido.

Nenhum

EBSInstanceThroughputExceeded

Event

O limite máximo de throughput da instância foi excedido.

Nenhum

EBSVolumeIOPSExceeded

Event

O limite máximo de IOPS de um volume do EBS específico foi excedido.

Nenhum

EBSVolumeThroughputExceeded

Event

O limite máximo de throughput de um volume do Amazon EBS específico foi excedido.

Nenhum

EtcHostsMountFailed

Event

A montagem do arquivo /etc/hosts gerado pelo kubelet falhou devido à remontagem de /var/lib/kubelet/pods via userdata durante a operação kubelet-container.

Nenhum

IODelays

Event

Atraso de entrada ou saída detectado em um processo, possivelmente indicando provisionamento insuficiente de entrada-saída, se excessivo.

Nenhum

KubeletDiskUsageSlow

Event

O kubelet está relatando lentidão no uso do disco ao tentar acessar o sistema de arquivos. Isso pode indicar que as operações de entrada e de saída do disco são insuficientes ou que há problemas no sistema de arquivos.

Nenhum

XFSSmallAverageClusterSize

Event

O tamanho médio do cluster XFS é pequeno, indicando fragmentação excessiva do espaço livre. Isso pode impedir a criação de arquivos, mesmo que haja inodes ou espaço livre disponíveis.

Nenhum

Configure o agente de monitoramento de nós

O agente de monitoramento de nós do EKS é implantado como DaemonSet. Ao realizar a implantação como um complemento do EKS, é possível personalizar a instalação com os seguintes valores de configuração. Para configurações padrão, consulte o chart do Helm do agente de monitoramento de nós do EKS.

Opção de configuração Descrição

monitoringAgent.resources.requests.cpu

Solicitação de recursos da CPU para o agente de monitoramento.

monitoringAgent.resources.requests.memory

Solicitação de recursos de memória para o agente de monitoramento.

monitoringAgent.resources.limits.cpu

Limite de recursos da CPU para o agente de monitoramento.

monitoringAgent.resources.limits.memory

Limite de recursos de memória para o agente de monitoramento.

monitoringAgent.tolerations

Tolerâncias para a programação do agente de monitoramento em nós com taint.

monitoringAgent.additionalArgs

Argumentos adicionais da linha de comando a serem passados ao agente de monitoramento.

nota

Você pode configurar hostname-override e verbosity como monitoringAgent.additionalArgs no caso dos complementos do EKS ou da instalação via Helm. No momento, não é possível personalizar o probe-address (8002) ou metrics-address (8003) do agente de monitoramento de nós por meio de argumentos adicionais com os complementos do EKS ou a instalação via Helm.

O agente de monitoramento de nós inclui um componente de servidor NVIDIA DCGM (Data Center GPU Manager) (nv-hostengine) para monitorar GPUs NVIDIA. Esse componente é executado apenas em nós que são do tipo de instância de GPU NVIDIA, conforme indicado por nodeAffinity no chart do Helm do agente. Não é possível utilizar uma instalação existente do NVIDIA DCGM com o agente de monitoramento de nós do EKS. Envie seus comentários sobre o roteiro do EKS, issue #2763 do GitHub, caso essa funcionalidade seja necessária.

Ao realizar a implantação do agente de monitoramento de nós do EKS como um complemento do EKS, é possível personalizar a instalação do NVIDIA DCGM com os seguintes valores de configuração.

Opção de configuração Descrição

dcgmAgent.resources.requests.cpu

Solicitação de recursos da CPU para o agente DCGM.

dcgmAgent.resources.requests.memory

Solicitação de recursos de memória para o agente DCGM.

dcgmAgent.resources.limits.cpu

Limite de recursos da CPU para o agente DCGM.

dcgmAgent.resources.limits.memory

Limite de recursos de memória para o agente DCGM.

dcgmAgent.tolerations

Tolerâncias para a programação do agente DCGM em nós comprometidos.

Você pode usar os seguintes comandos da AWS CLI para obter informações úteis sobre as versões e o esquema do complemento do agente de monitoramento de nós do EKS.

Obtenha a versão mais recente do complemento do agente para a sua versão do Kubernetes. Substitua 1.35 pela sua versão do Kubernetes.

aws eks describe-addon-versions \ --addon-name eks-node-monitoring-agent \ --kubernetes-version 1.35 \ --query='addons[].addonVersions[].addonVersion'

Obtenha o esquema do complemento de agente com suporte em complementos do EKS. Substitua v1.5.1-eksbuild.1 pela versão do agente.

aws eks describe-addon-configuration \ --addon-name eks-node-monitoring-agent \ --addon-version v1.5.1-eksbuild.1