Detector de problemas de nós

O Node Problem Detector é uma biblioteca de código aberto que monitora a integridade dos nós e detecta problemas comuns de nós, como hardware, kernel ou problemas de tempo de execução de contêineres. Em clusters do Anthos em Bare Metal, ele é executado como um serviço systemd em cada nó.

A partir dos clusters do Anthos na versão bare metal 1.10.0, o detector de problemas do nó é ativado por padrão.

Quais problemas ele detecta?

O detector de problemas do nó pode detectar os seguintes tipos de problemas:

  • Problemas no ambiente de execução do contêiner, como daemons do ambiente de execução sem resposta
  • Problemas de hardware, como falhas de CPU, memória ou disco
  • Problemas de kernel, como condições de impasse do kernel ou sistemas de arquivos corrompidos

Ele é executado em um nó e informa problemas no servidor da API Kubernetes como um NodeCondition ou como um Event. NodeCondition é um problema que impede o nó de executar pods, enquanto um Event é um problema temporário que tem efeito limitado nos pods, mas é considerado importante o suficiente para ser relatado.

Alguns dos NodeConditions descobertos pelo detector de problemas do nó são:

  • KernelDeadlock
  • ReadonlyFilesystem
  • FrequentKubeletRestart
  • FrequentDockerRestart
  • FrequentContainerdRestart
  • FrequentUnregisterNetDevice
  • KubeletUnhealthy
  • ContainerRuntimeUnhealthy
  • CorruptDockerOverlay2

Alguns exemplos dos tipos de Events relatados pelo Node Problem Detector são:

  • Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
  • Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.

Como ver os problemas detectados

Execute o seguinte comando kubectl describe em um nó para procurar NodeConditions e Events:

kubectl --kubeconfig=KUBECONFIG_PATH describe node NODE_NAME

No comando, substitua as seguintes entradas por informações específicas ao ambiente:

  • KUBECONFIG_PATH: o caminho até o arquivo kubeconfig do cluster de destino. O caminho para o arquivo kubeconfig geralmente é bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. No entanto, se você tiver especificado o espaço de trabalho com a sinalização WORKSPACE_DIR, o caminho será WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

  • NODE_NAME: o nome do nó sobre o qual você quer informações sobre integridade.

Como ativar/desativar o detector de problemas do nó

Siga estas etapas para ativar o detector de problema do nó em um determinado cluster:

  1. Use o comando kubectl para editar o configmap node-problem-detector-config.

       kubectl --kubeconfig=KUBECONFIG_PATH edit configmap \
           node-problem-detector-config --namespace=CLUSTER_NAMESPACE

    Esse comando inicia automaticamente um editor de texto (como vim ou nano) para editar o arquivo node-problem-detector-config. No comando, substitua as seguintes entradas por informações específicas ao ambiente do cluster:

    • KUBECONFIG_PATH: o caminho até o arquivo kubeconfig do cluster de administrador. O caminho para o arquivo kubeconfig geralmente é bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. No entanto, se você tiver especificado seu espaço de trabalho com a sinalização WORKSPACE_DIR, o caminho será WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.
    • CLUSTER_NAMESPACE: o namespace do cluster em que você quer ativar o detector de problemas do nó.
  2. Inicialmente, o ConfigMap da node-problem-detector-config não tem um campo data. Adicione o campo data ao mapa de configuração com o seguinte par de chave-valor:

    data:
      enabled: "true"
    

Para desativar o detector de problemas do nó em um namespace do cluster, execute as etapas anteriores 1 e 2, mas, na etapa 2, altere o valor da chave enabled para "falso".

Como parar/iniciar o detector de problemas do nó

O detector de problemas do nó é executado como um serviço systemd em cada nó. Para gerenciar o detector de problemas de um nó, use o SSH para acessar o nó e execute os seguintes comandos systemctl.

Para desativar o Detector de problemas do nó, execute o seguinte comando:

systemctl stop node-problem-detector

Para reiniciar o detector de problemas do nó, execute o seguinte comando:

systemctl restart node-problem-detector

Para verificar se o Detector de problemas de nós está sendo executado em um nó específico, execute o seguinte comando:

systemctl is-active node-problem-detector