Rilevamento problemi di nodo (NPD) nei nodi del servizio Azure Kubernetes
Il rilevamento dei problemi di nodo (NPD) è un componente Kubernetes open source che rileva problemi relativi ai nodi e li segnala. Viene eseguito come servizio di sistema in ogni nodo del cluster e raccoglie varie metriche e informazioni sul sistema, ad esempio utilizzo della CPU, utilizzo del disco e connessione di rete. Quando rileva un problema, genera eventi e/o condizioni del nodo. Servizio Azure Kubernetes (servizio Azure Kubernetes) usa NPD per monitorare e gestire i nodi in un cluster Kubernetes in esecuzione nella piattaforma cloud di Azure. L'estensione Linux del servizio Azure Kubernetes abilita npd per impostazione predefinita.
Nota
Gli aggiornamenti al server dei criteri di rete sono indipendenti dall'immagine del nodo e dai processi di aggiornamento della versione di Kubernetes. Se un pool di nodi non è integro, ad esempio in uno stato di errore, le nuove versioni NPD non verranno installate.
Condizioni nodo
Le condizioni del nodo indicano un problema permanente che rende il nodo non disponibile. Il servizio Azure Kubernetes usa le condizioni del nodo seguenti dal server dei criteri di rete per esporre problemi permanenti nel nodo. NPD genera anche gli eventi Kubernetes corrispondenti.
Tipo di Daemon di problemi | 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 |
Eventi
NPD genera eventi con informazioni pertinenti per diagnosticare i problemi sottostanti.
Tipo di Daemon di problemi | Motivo |
---|---|
CustomPluginMonitor | EgressBlocked |
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 |
In alcuni casi, il servizio Azure Kubernetes blocca e svuota automaticamente il nodo per ridurre al minimo le interruzioni dei carichi di lavoro. Per altre informazioni sugli eventi e le azioni, vedere Svuotamento automatico dei nodi.
Controllare le condizioni e gli eventi del nodo
Controllare le condizioni e gli eventi del nodo usando il comando
kubectl describe node
.kubectl describe node my-aks-node
L'output dovrebbe essere simile all'output condensato di esempio seguente:
... ... 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
Questi eventi sono disponibili anche in Informazioni dettagliate contenitore tramite KubeEvents.
Metrica
NPD espone anche le metriche di Prometheus in base ai problemi del nodo, che è possibile usare per il monitoraggio e l'invio di avvisi. Queste metriche vengono esposte sulla porta 20257 dell'indirizzo IP del nodo e Prometheus possono eliminarle.
L'esempio YAML seguente mostra una configurazione di scrape che è possibile usare con il componente aggiuntivo Prometheus gestito di Azure come 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']
L'esempio seguente illustra le metriche raschiate:
problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0
Passaggi successivi
Per altre informazioni sul server dei criteri di rete, vedere kubernetes/node-problem-detector.
Azure Kubernetes Service