Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Complementos/ Detector de problema de nó do CCE
Atualizado em 2024-11-28 GMT+08:00

Detector de problema de nó do CCE

Introdução

O detector de problemas de nó do CCE (NPD) é um complemento que monitora eventos anormais de nós de cluster e se conecta a uma plataforma de monitoramento de terceiros. É um daemon em execução em cada nó. Ele coleta problemas de nó de diferentes daemons e os reporta ao servidor da API. O complemento NPD pode ser executado como um daemon ou DaemonSet.

Para obter mais informações, consulte node-problem-detector.

Restrições

  • Ao usar esse complemento, não formate ou particione discos de nó.
  • Cada processo de NPD ocupa 30 m de CPU e 100 MB de memória.

Permissões

Para monitorar os logs do kernel, o complemento NPD precisa ler o host /dev/kmsg. Portanto, o modo privilegiado deve ser ativado. Para mais detalhes, veja privileged.

Além disso, o CCE mitiga os riscos de acordo com o princípio do privilégio mínimo. Apenas os seguintes privilégios estão disponíveis para a execução do NPD:

  • cap_dac_read_search: permissão para acessar /run/log/journal.
  • cap_sys_admin: permissão para acessar /dev/kmsg.

Instalar o complemento

  1. Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. Escolha Add-ons no painel de navegação, encontre CCE Node Problem Detector na direita, e clique em Install.
  2. Na página Install Add-on, configure as especificações.

    Tabela 1 Configuração do NPD

    Parâmetro

    Descrição

    Add-on Specifications

    As especificações podem ser Custom.

    Instances

    Se você selecionar Custom, poderá ajustar o número de pods conforme necessário.

    Containers

    Se você selecionar Custom, poderá ajustar as especificações do contêiner conforme necessário.

  3. Configure os parâmetros do complemento.

    Somente as versões v1.16.0 e posteriores suportam as configurações.

    Tabela 2 Parâmetros do NPD

    Parâmetro

    Descrição

    common.image.pullPolicy

    Uma política de extração de imagens. O valor padrão é IfNotPresent.

    feature_gates

    Um portão de recurso

    npc.maxTaintedNode

    O número máximo de nós que o NPC pode adicionar manchas quando uma única falha ocorre em vários nós para minimizar o impacto

    O valor pode estar no formato int ou percentual.

    npc.nodeAffinity

    Afinidade do nó do controlador

  4. Configure as políticas de agendamento para o complemento.

    • As políticas de agendamento não entram em vigor em instâncias complementares do tipo DaemonSet.
    • Ao configurar a implementação de várias AZs ou a afinidade de nó, verifique se há nós que atendem à política de agendamento e se os recursos são suficientes no cluster. Caso contrário, o complemento não pode ser executado.
    Tabela 3 Configurações para programação de complementos

    Parâmetro

    Descrição

    Multi-AZ Deployment

    • Preferred: os pods de Implementação do complemento serão agendados preferencialmente para nós em diferentes AZs. Se todos os nós no cluster forem implementados na mesma AZ, os pods serão agendados para essa AZ.
    • Forcible: os pods de Implementação do complemento serão forçosamente agendados para nós em diferentes AZs. Se houver menos AZs do que pods, os pods extras não funcionarão.

    Node Affinity

    • Incompatibility: a afinidade de nó está desabilitada para o complemento.
    • Node Affinity: especifique os nós em que o complemento é implementado. Se você não especificar os nós, o complemento será agendado aleatoriamente com base na política de agendamento de cluster padrão.
    • Specified Node Pool Scheduling: especifique o pool de nós em que o complemento é implementado. Se você não especificar o pool de nós, o complemento será agendado aleatoriamente com base na política de agendamento de cluster padrão.
    • Custom Policies: insira os rótulos dos nós em que o complemento será implementado para políticas de agendamento mais flexíveis. Se você não especificar rótulos de nó, o complemento será agendado aleatoriamente com base na política de agendamento de cluster padrão.

      Se várias políticas de afinidade personalizadas estiverem configuradas, certifique-se de que existem nós que atendam a todas as políticas de afinidade no cluster. Caso contrário, o complemento não pode ser executado.

    Taints and Tolerations

    O uso de manchas e tolerâncias permite (não forçosamente) que Implementação do complemento seja agendada para um nó com as manchas correspondentes e controla as políticas de despejo de Implementação depois que o nó onde a Implementação está localizada é contaminado.

    O complemento adiciona a política de tolerância padrão para as manchas node.kubernetes.io/not-ready e node.kubernetes.io/unreachable, respectivamente. A janela de tempo de tolerância é 60s.

    Para mais detalhes, consulte Manchas e tolerâncias.

  5. Clique em Install.

Componentes

Tabela 4 Componentes do NPD

Componente

Descrição

Tipo de recurso

node-problem-controller

Isolar falhas basicamente com base em resultados de detecção de falhas.

Implementação

node-problem-detector

Detectar falhas de nó.

DaemonSet

Itens de verificação de NPD

Os itens de verificação são suportados apenas em 1.16.0 e versões posteriores.

Verifique os itens de cobertura de eventos e status.

  • Relacionados a eventos

    Para itens de verificação relacionados a eventos, quando ocorre um problema, o NPD relata um evento para o servidor da API. O tipo de evento pode ser Normal (evento normal) ou Warning (evento anormal).

    Tabela 5 Itens de verificação relacionados a eventos

    Item de verificação

    Função

    Descrição

    OOMKilling

    Ouvir os logs do kernel e verifique se os eventos OOM ocorrem e são relatados.

    Cenário típico: quando o uso de memória de um processo em um contêiner excede o limite, a OOM é acionada e o processo é encerrado.

    Evento de aviso

    Objeto de escuta: /dev/kmsg

    Regra de correspondência: "Killed process \\d+ (.+) total-vm:\\d+kB, anon-rss:\\d+kB, file-rss:\\d+kB.*"

    TaskHung

    Ouvir os logs do kernel e verifique se os eventos taskHung ocorrem e são relatados.

    Cenário típico: a suspensão de I/O de disco causa a suspensão do processo.

    Evento de aviso

    Objeto de escuta: /dev/kmsg

    Regra de correspondência: "task \\S+:\\w+ blocked for more than \\w+ seconds\\."

    ReadonlyFilesystem

    Verificar se o erro Remount root filesystem read-only ocorre no kernel do sistema ouvindo os logs do kernel.

    Cenário típico: um usuário separa um disco de dados de um nó por engano no ECS, e as aplicações gravam dados continuamente no ponto de montagem do disco de dados. Como resultado, ocorre um erro de I/O no kernel e o disco é montado novamente como um disco de somente leitura.

    NOTA:

    Se o rootfs dos node pods for do tipo mapeador de dispositivos, ocorrerá um erro no thin pool se um disco de dados for desanexado. Isso afetará o NPD e o NPD não poderá detectar falhas de nó.

    Evento de aviso

    Objeto de escuta: /dev/kmsg

    Regra de correspondência: Remounting filesystem read-only

  • Status-related

    Para itens de verificação relacionados ao status, quando ocorre um problema, o NPD relata um evento para o servidor da API e altera o status do nó de forma síncrona. Esta função pode ser usada em conjunto com o isolamento de falhas do Node-problem-controller para isolar nós.

    Se o período de verificação não for especificado nos seguintes itens de verificação, o período padrão será de 30 segundos.

    Tabela 6 Verificar componentes do sistema

    Item de verificação

    Função

    Descrição

    Erro no componente de rede do contêiner

    CNIProblem

    Verificar o status dos componentes da CNI (componentes da rede do contêiner).

    Nenhuma

    Erro no componente de tempo de execução do contêiner

    CRIProblem

    Verificar o status do Docker e do contêiner dos componentes de CRI (componentes de tempo de execução do contêiner).

    Objeto de verificar: Docker ou containerd

    Reinícios frequentes do Kubelet

    FrequentKubeletRestart

    Retroceder periodicamente os logs do sistema para verificar se o componente importante de Kubelet reinicia com frequência.

    • Limite padrão: 10 reinícios em 10 minutos

      Se o Kubelet for reiniciado 10 vezes em 10 minutos, isso indica que o sistema é reiniciado com frequência e um alarme de falha é gerado.

    • Objeto de escuta: logs no diretório /run/log/journal
    NOTA:

    Os sistemas operacionais Ubuntu e HCE 2.0 não suportam os itens de verificação anteriores devido a formatos de log incompatíveis.

    Reinícios frequentes do Docker

    FrequentDockerRestart

    Retroceder periodicamente os logs do sistema para verificar se o tempo de execução do contêiner Docker é reiniciado com frequência.

    Reinícios frequentes do containerd

    FrequentContainerdRestart

    Retroceder periodicamente os logs do sistema para verificar se o tempo de execução do contêiner containerd reinicia com frequência.

    erro de kubelet

    KubeletProblem

    Verificar o status do componente importante de Kubelet.

    Nenhuma

    erro de kube-proxy

    KubeProxyProblem

    Verificar o status do componente importante de kube-proxy.

    Nenhuma

    Tabela 7 Verificar métricas do sistema

    Item de verificação

    Função

    Descrição

    Tabela conntrack cheia

    ConntrackFullProblem

    Verificar se a tabela conntrack está cheia.

    • Limite padrão: 90%
    • Utilização: nf_conntrack_count
    • Valor máximo: nf_conntrack_max

    Recursos de disco insuficientes

    DiskProblem

    Verificar o uso do disco do sistema e dos discos de dados do CCE (incluindo o disco lógico de CRI e o disco lógico de kubelet) no nó.

    • Limite padrão: 90%
    • Origem:
      df -h

    Atualmente, discos de dados adicionais não são suportados.

    Manipuladores de arquivo insuficientes

    FDProblem

    Verificar se os manipuladores do arquivo FD estão esgotados.

    • Limite padrão: 90%
    • Utilização: o primeiro valor em /proc/sys/fs/file-nr
    • Valor máximo: o terceiro valor em /proc/sys/fs/file-nr

    Memória de nó insuficiente

    MemoryProblem

    Verificar se a memória está gasta.

    • Limite padrão: 80%
    • Uso: MemTotal-MemAvailable em /proc/meminfo
    • Valor máximo: MemTotal em /proc/meminfo

    Recursos de processo insuficientes

    PIDProblem

    Verificar se os recursos do processo PID estão esgotados.

    • Limite padrão: 90%
    • Utilização: nr_threads in /proc/loadavg
    • Valor máximo: menor valor entre /proc/sys/kernel/pid_max e /proc/sys/kernel/threads-max.
    Tabela 8 Verificar o armazenamento

    Item de verificação

    Função

    Descrição

    Disco de somente leitura

    DiskReadonly

    Execute periodicamente testes de gravação no disco do sistema e nos discos de dados do CCE (incluindo o disco lógico de CRI e o disco lógico de Kubelet) do nó para verificar a disponibilidade dos discos importantes.

    Caminhos de detecção:

    • /mnt/paas/kubernetes/kubelet/
    • /var/lib/docker/
    • /var/lib/containerd/
    • /var/paas/sys/log/cceaddon-npd/

    O arquivo temporário npd-disk-write-ping é gerado no caminho de detecção.

    Atualmente, discos de dados adicionais não são suportados.

    Erro do pool de armazenamento emptyDir

    EmptyDirVolumeGroupStatusError

    Verificar se o grupo de volume efêmero no nó é normal.

    Impacto: o pod que depende do pool de armazenamento não pode gravar dados no volume temporário. O volume temporário é montado novamente como um sistema de arquivos somente leitura pelo kernel devido a um erro de I/O.

    Cenário típico: ao criar um nó, um usuário configura dois discos de dados como um pool de armazenamento de volume temporário. O usuário exclui alguns discos de dados por engano. Como resultado, o pool de armazenamento se torna anormal.

    • Período da detecção: 30s
    • Origem:
      vgs -o vg_name, vg_attr
    • Princípio: verifique se o VG (storage pool) está no estado P. Se sim, alguns PVs (discos de dados) são perdidos.
    • Agendamento conjunto: o agendador pode identificar automaticamente um erro de pool de armazenamento PV e impedir que pods que dependem do pool de armazenamento sejam gendados para o nó.
    • Cenário excepcional: o complemento NPD não pode detectar a perda de todos os PVs (discos de dados), resultando na perda de VGs (pools de armazenamento). Nesse caso, o kubelet isola automaticamente o nó, detecta a perda de VGs (pools de armazenamento) e atualiza os recursos correspondentes em nodestatus.allocatable para 0. Isso impede que os pods que dependem do pool de armazenamento sejam agendados para o nó. O dano de um único PV não pode ser detectado por este item de verificação, mas pelo item de verificação ReadonlyFilesystem.

    Erro do pool de armazenamento PV

    LocalPvVolumeGroupStatusError

    Verificar o grupo PV no nó.

    Impacto: os pods que dependem do pool de armazenamento não podem gravar dados no volume persistente. O volume persistente é remontado como um sistema de arquivos somente leitura pelo kernel devido a um erro de I/O.

    Cenário típico: ao criar um nó, um usuário configura dois discos de dados como um pool de armazenamento de volume persistente. Alguns discos de dados são apagados por engano.

    Erro do ponto de montagem

    MountPointProblem

    Verificar o ponto de montagem no nó.

    Definição excepcional: você não pode acessar o ponto de montagem executando o comando cd.

    Cenário típico: Network File System (NFS), por exemplo, obsfs e s3fs é montado em um nó. Quando a conexão é anormal devido a exceções de servidor do NFS de rede ou de par, todos os processos que acessam o ponto de montagem são suspensos. Por exemplo, durante uma atualização de cluster, um kubelet é reiniciado e todos os pontos de montagem são verificados. Se o ponto de montagem anormal for detectado, a atualização falhará.

    Alternativamente, você pode executar o seguinte comando:

    for dir in `df -h | grep -v "Mounted on" | awk "{print \\$NF}"`;do cd $dir; done && echo "ok"

    I/O de disco suspensa

    DiskHung

    Verificar se a suspensão de I/O ocorre em todos os discos no nó, ou seja, se as operações de leitura e gravação de I/O não são respondidas.

    Definição de suspensão de I/O: o sistema não responde a solicitações de I/O de disco e alguns processos estão no estado D.

    Cenário típico: os discos não podem responder devido a drivers de disco rígido do sistema operacional anormais ou falhas graves na rede subjacente.

    • Objeto de verificar: todos os discos de dados
    • Origem:

      /proc/diskstat

      Alternativamente, você pode executar o seguinte comando:
      iostat -xmt 1
    • Limite:
      • Uso médio: ioutil >= 0,99
      • Comprimento médio da fila de I/O: avgqu-sz >= 1
      • Volume médio de transferência de I/O: iops (w/s) + ioth (wMB/s) <= 1
      NOTA:

      Em alguns sistemas operacionais, nenhum dado é alterado durante a I/O. Nesse caso, calcule o uso do tempo de I/O da CPU. O valor de iowait deve ser maior que 0,8.

    I/O de disco lenta

    DiskSlow

    Verificar se todos os discos no nó têm I/Os lentas, ou seja, se as I/Os respondem lentamente.

    Cenário típico: os discos EVS têm I/Os lentas devido à flutuação da rede.

    • Objeto de verificar: todos os discos de dados
    • Origem:

      /proc/diskstat

      Alternativamente, você pode executar o seguinte comando:
      iostat -xmt 1
    • Limite padrão:

      Latência média de I/O: await >= 5000 ms

    NOTA:

    Se as solicitações de I/O não forem respondidas e os dados await não forem atualizados, esse item de verificação será inválido.

    Tabela 9 Outros itens de verificação

    Item de verificação

    Função

    Descrição

    NTP anormal

    NTPProblem

    Verificar se o serviço de sincronização de relógio de nó ntpd ou chronyd está sendo executado corretamente e se um desvio de tempo do sistema é causado.

    Limite de deslocamento de relógio padrão: 8000 ms

    Erro no processo D

    ProcessD

    Verificar se há um processo D no nó.

    Limite padrão: 10 processos anormais detectados por três vezes consecutivas

    Origem:

    • /proc/{PID}/stat
    • Como alternativa, você pode executar o comando ps aux.

    Cenário excepcional: o item de verificação ProcessD ignora os processos D residentes (heartbeat e update) dos quais o driver SDI no nó do BMS depende.

    Erro de processo Z

    ProcessZ

    Verificar se o nó tem processos no estado Z.

    Erro de ResolvConf

    ResolvConfFileProblem

    Verificar se o arquivo ResolvConf foi perdido.

    Verificar se o arquivo ResolvConf está normal.

    Definição excepcional: nenhum servidor de resolução de nome de domínio upstream (nameserver) está incluído.

    Objeto: /etc/resolv.conf

    Evento agendado existente

    ScheduledEvent

    Verificar se existem eventos de migração ao vivo agendados no nó. Um evento de plano de migração ao vivo geralmente é acionado por uma falha de hardware e é um método de retificação automática de falhas na camada IaaS.

    Cenário típico: o host está defeituoso. Por exemplo, o ventilador está danificado ou o disco tem setores defeituosos. Como resultado, a migração ao vivo é acionada para VMs.

    Origem:

    • http://169.254.169.254/meta-data/latest/events/scheduled

    Este item de verificação é um recurso Alpha e está desativado por padrão.

    O componente de kubelet tem os seguintes itens de verificação padrão, que têm bugs ou defeitos. Você pode corrigi-los atualizando o cluster ou usando o NPD.

    Tabela 10 Itens de verificação padrão do kubelet

    Item de verificação

    Função

    Descrição

    Recursos de PID insuficientes.

    PIDPressure

    Verificar se os PIDs são suficientes.

    • Intervalo: 10 segundos
    • Limite: 90%
    • Defeito: na versão 1.23.1 da comunidade e versões anteriores, este item de verificação torna-se inválido quando mais de 65535 PIDs são usados. Para obter detalhes, consulte issue 107107. Na versão 1.24 da comunidade e versões anteriores, thread-max não é considerado neste item de verificação.

    Memória insuficiente

    MemoryPressure

    Verificar se a memória alocável para os contêineres é suficiente.

    • Intervalo: 10 segundos
    • Limite: máx. 100 MiB
    • Alocável = memória total de um nó – memória reservada de um nó
    • Defeito: esse item de verificação verifica apenas a memória consumida pelos contêineres e não considera a consumida por outros elementos no nó.

    Recursos de disco insuficientes

    DiskPressure

    Verificar o uso do disco e o uso de inodes dos discos do kubelet e do Docker.

    • Intervalo: 10 segundos
    • Limite: 90%

Isolamento de falha do Node-problem-controller

O isolamento de falhas é suportado apenas por complementos de 1.16.0 e versões posteriores.

Por padrão, se vários nós se tornarem defeituosos, o NPC adiciona manchas a até 10% dos nós. Você pode definir npc.maxTaintedNode para aumentar o limite.

O plug-in NPD de código aberto fornece detecção de falhas, mas não isolamento de falhas. O CCE aprimora o controlador de problemas de nó (NPC) baseado no NPD de código aberto. Esse componente é implementado com base no node controller do Kubernetes. Para falhas relatadas pelo NPD, o NPC adiciona automaticamente manchas aos nós para isolamento de falhas de nó.

Tabela 11 Parâmetros

Parâmetro

Descrição

Padrão

npc.enable

Se ativar o NPC

Este parâmetro não é suportado em versões 1.18.0 ou posteriores.

true

npc.maxTaintedNode

O número máximo de nós que o NPC pode adicionar manchas quando uma única falha ocorre em vários nós para minimizar o impacto.

O formato int e o formato percentual são suportados.

10%

Intervalo de valores:

  • O valor está no formato int e varia de 1 a infinito.
  • O valor varia de 1% a 100%, em porcentagem. O valor mínimo deste parâmetro multiplicado pelo número de nós de cluster é 1.

npc.nodeAffinity

Afinidade do nó do controlador

N/D

Exibir eventos do NPD

Os eventos relatados pelo complemento NPD podem ser consultados na página Nodes.

  1. Efetue logon no console do CCE.
  2. Clique no nome do cluster para acessar o console do cluster. Escolha Nodes no painel de navegação.
  3. Localize a linha que contém o nó de destino e clique em View Events.

    Figura 1 Exibir eventos do nó

    Você pode obter eventos na página exibida.

Alarmes de AOM

Para itens de verificação de NPD relacionados ao status, você pode configurar o Application Operations Management (AOM) para converter status anormais em alarmes de AOM e notificá-lo via mensagem SMS ou e-mail.

  1. Efetue logon no console do AOM.
  2. No painel de navegação, escolha Alarm Center > Alarm Rules e clique em Create Alarm Rule.
  3. Defina uma regra de alarme.

    • Rule Type: selecione Threshold alarm.
    • Monitored Object: selecione Command input.
    • Digite ` sum(problem_gauge{clusterName="test"}) by (podIP,type)` na caixa de texto.

    • Alarm Condition: acionar um alarme importante se o valor médio for maior ou igual a 1 por um tempo consecutivo em um período de monitoramento.

    • (Opcional) Alarm notification: para ser notificado de alarmes por e-mail ou mensagem SMS, configure as regras de ação para a regra de alarme. Se nenhuma regra de ação estiver disponível, você poderá criar uma.

Coletar métricas de Prometheus

O pod do daemon de NPD expõe dados métricos do Prometheus na porta 19901. Por padrão, o pod de NPD é adicionado com a anotação metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"19901","names":""}]'. Você pode criar um coletor de Prometheus para identificar e obter métricas de NPD do http://{{NpdPodIP}}:{{NpdPodPort}}/metrics.

Se a versão do complemento NPD for anterior a 1.16.5, a porta exposta das métricas do Prometheus é 20257.

Atualmente, os dados da métrica incluem problem_counter e problem_gauge, como mostrado abaixo.

# HELP problem_counter Number of times a specific type of problem have occurred.
# TYPE problem_counter counter
problem_counter{reason="DockerHung"} 0
problem_counter{reason="DockerStart"} 0
problem_counter{reason="EmptyDirVolumeGroupStatusError"} 0
...
# HELP problem_gauge Whether a specific type of problem is affecting the node or not.
# TYPE problem_gauge gauge
problem_gauge{reason="CNIIsDown",type="CNIProblem"} 0
problem_gauge{reason="CNIIsUp",type="CNIProblem"} 0
problem_gauge{reason="CRIIsDown",type="CRIProblem"} 0
problem_gauge{reason="CRIIsUp",type="CRIProblem"} 0
..