Detector de Problemas de Nó (NPD) nos nós do Serviço Azure Kubernetes (AKS)
O Detector de Problemas de Nó (NPD) é um componente de código aberto do Kubernetes que detecta problemas relacionados a nós e os relata. Ele é executado como um serviço systemd em cada nó do cluster e coleta várias métricas e informações do sistema, como uso da CPU, uso do disco e conectividade de rede. Quando detecta um problema, ele gera eventos e/ou condições de nó. O Serviço de Kubernetes do Azure (AKS) usa o NPD para monitorar e gerenciar nós em um cluster do Kubernetes em execução na plataforma de nuvem do Azure. A extensão AKS Linux habilita o NPD por padrão.
Observação
As atualizações para o NPD são independentes da imagem do nó e dos processos de atualização de versão do Kubernetes. Se um nodepool não estiver íntegro (ou seja, em um estado com falha), novas versões do NPD não serão instaladas.
Condições do nó
As condições do nó indicam um problema permanente que o torna indisponível. O AKS utiliza as seguintes condições de nó do NPD para expor problemas permanentes no nó. O NPD também emite eventos correspondentes do Kubernetes.
Tipo de Problema do Daemon | NodeCondition | Motivo |
---|---|---|
CustomPluginMonitor | FilesystemCorruptionProblem | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletProblem | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeProblem | ContainerRuntimeIsDown |
CustomPluginMonitor | VMEventScheduled | VMEventScheduled |
CustomPluginMonitor | FrequentUnregisterNetDevice | UnregisterNetDevice |
CustomPluginMonitor | FrequentKubeletRestart | FrequentKubeletRestart |
CustomPluginMonitor | FrequentContainerdRestart | FrequentContainerdRestart |
CustomPluginMonitor | FrequentDockerRestart | FrequentDockerRestart |
SystemLogMonitor | KernelDeadlock | DockerHung |
SystemLogMonitor | ReadonlyFilesystem | FilesystemIsReadOnly |
Eventos
O NPD emite eventos com informações relevantes para ajudar você a diagnosticar problemas subjacentes.
Tipo de Problema do Daemon | Motivo |
---|---|
CustomPluginMonitor | FilesystemCorruptionDetected |
CustomPluginMonitor | KubeletIsDown |
CustomPluginMonitor | ContainerRuntimeIsDown |
CustomPluginMonitor | FreezeScheduled |
CustomPluginMonitor | RebootScheduled |
CustomPluginMonitor | RedeployScheduled |
CustomPluginMonitor | TerminateScheduled |
CustomPluginMonitor | PreemptScheduled |
CustomPluginMonitor | DNSProblem |
CustomPluginMonitor | PodIPProblem |
SystemLogMonitor | OOMKilling |
SystemLogMonitor | TaskHung |
SystemLogMonitor | UnregisterNetDevice |
SystemLogMonitor | KernelOops |
SystemLogMonitor | DockerSocketCannotConnect |
SystemLogMonitor | KubeletRPCDeadlineExceeded |
SystemLogMonitor | KubeletRPCNoSuchContainer |
SystemLogMonitor | CNICannotStatFS |
SystemLogMonitor | PLEGUnhealthy |
SystemLogMonitor | KubeletStart |
SystemLogMonitor | DockerStart |
SystemLogMonitor | ContainerdStart |
Em determinadas instâncias, o AKS automaticamente monitora e esvazia o nó para minimizar a interrupção das cargas de trabalho. Para obter mais informações sobre os eventos e ações, consulte Esvaziamento automático do nó.
Verificar as condições e eventos do nó
Verifique as condições e os eventos do nó usando o comando
kubectl describe node
.kubectl describe node my-aks-node
Sua saída deve ser semelhante à saída condensada do exemplo a seguir:
... ... Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- VMEventScheduled False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 NoVMEventScheduled VM has no scheduled event FrequentContainerdRestart False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 NoFrequentContainerdRestart containerd is functioning properly FrequentDockerRestart False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 NoFrequentDockerRestart docker is functioning properly FilesystemCorruptionProblem False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 FilesystemIsOK Filesystem is healthy FrequentUnregisterNetDevice False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 NoFrequentUnregisterNetDevice node is functioning properly ContainerRuntimeProblem False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:40 +0000 ContainerRuntimeIsUp container runtime service is up KernelDeadlock False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 KernelHasNoDeadlock kernel has no deadlock FrequentKubeletRestart False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 NoFrequentKubeletRestart kubelet is functioning properly KubeletProblem False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 KubeletIsUp kubelet service is up ReadonlyFilesystem False Thu, 01 Jun 2023 19:14:25 +0000 Thu, 01 Jun 2023 03:57:41 +0000 FilesystemIsNotReadOnly Filesystem is not read-only NetworkUnavailable False Thu, 01 Jun 2023 03:58:39 +0000 Thu, 01 Jun 2023 03:58:39 +0000 RouteCreated RouteController created a route MemoryPressure True Thu, 01 Jun 2023 19:16:50 +0000 Thu, 01 Jun 2023 19:16:50 +0000 KubeletHasInsufficientMemory kubelet has insufficient memory available DiskPressure False Thu, 01 Jun 2023 19:16:50 +0000 Thu, 01 Jun 2023 03:57:22 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Thu, 01 Jun 2023 19:16:50 +0000 Thu, 01 Jun 2023 03:57:22 +0000 KubeletHasSufficientPID kubelet has sufficient PID available Ready True Thu, 01 Jun 2023 19:16:50 +0000 Thu, 01 Jun 2023 03:57:23 +0000 KubeletReady kubelet is posting ready status. AppArmor enabled ... ... ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal NodeHasSufficientMemory 94s (x176 over 15h) kubelet Node aks-agentpool-40622340-vmss000009 status is now: NodeHasSufficientMemory
Esses eventos também estão disponíveis nos Insights do Contêiner através do KubeEvents.
Métricas
O NPD também expõe as métricas do Prometheus com base nos problemas do nó, que você pode usar para monitoramento e alerta. Essas métricas são expostas na porta 20257 do Node IP e o Prometheus pode extraí-las.
O exemplo de YAML a seguir mostra uma configuração de extração que você pode usar com o complemento Azure Managed Prometheus como um DaemonSet:
kind: ConfigMap
apiVersion: v1
metadata:
name: ama-metrics-prometheus-config-node
namespace: kube-system
data:
prometheus-config: |-
global:
scrape_interval: 1m
scrape_configs:
- job_name: node-problem-detector
scrape_interval: 1m
scheme: http
metrics_path: /metrics
relabel_configs:
- source_labels: [__metrics_path__]
regex: (.*)
target_label: metrics_path
- source_labels: [__address__]
replacement: '$NODE_NAME'
target_label: instance
static_configs:
- targets: ['$NODE_IP:20257']
O exemplo a seguir mostra as métricas extraídas:
problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0
Próximas etapas
Para obter mais informações sobre o NPD, consulte kubernetes/node-problem-detector.
Azure Kubernetes Service