AKS(Azure Kubernetes Service) 노드의 NPD(노드 문제 감지기)
NPD(노드 문제 감지기)는 노드 관련 문제를 검색하고 이에 대해 보고하는 오픈 소스 Kubernetes 구성 요소입니다. 클러스터의 각 노드에서 시스템 서비스로 실행되며 CPU 사용량, 디스크 사용량 및 네트워크 연결과 같은 다양한 메트릭 및 시스템 정보를 수집합니다. 문제가 검색되면 이벤트 및/또는 노드 조건을 생성합니다. AKS(Azure Kubernetes Service)는 NPD를 사용하여 Azure 클라우드 플랫폼에서 실행되는 Kubernetes 클러스터의 노드를 모니터링하고 관리합니다. AKS Linux 확장은 기본적으로 NPD를 사용하도록 설정합니다.
참고 항목
NPD로의 업그레이드는 노드 이미지 및 Kubernetes 버전 업그레이드 프로세스와 독립적입니다. 노드 풀이 비정상인 경우(즉, 실패 상태) 새 NPD 버전이 설치되지 않습니다.
노드 조건
노드 상태는 노드를 사용할 수 없게 만드는 영구적인 문제를 나타냅니다. AKS는 NPD의 다음 노드 조건을 사용하여 노드의 영구적인 문제를 노출합니다. NPD는 해당 Kubernetes 이벤트도 내보냅니다.
문제 디먼 형식 | NodeCondition | 원인 |
---|---|---|
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 |
이벤트
NPD는 근본적인 문제를 진단하는 데 도움이 되는 관련 정보가 포함된 이벤트를 내보냅니다.
문제 디먼 형식 | 원인 |
---|---|
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 |
어떤 경우에는 AKS가 자동으로 노드를 차단하고 드레이닝하여 워크로드 중단을 최소화합니다. 이벤트 및 작업에 대한 자세한 내용은 노드 자동 드레이닝을 참조하세요.
노드 조건 및 이벤트 확인
kubectl describe node
명령을 사용하여 노드 조건 및 이벤트를 확인합니다.kubectl describe node my-aks-node
출력은 다음 요약 출력 예와 유사해야 합니다.
... ... 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
이러한 이벤트는 KubeEvents를 통해 Container Insights에서도 사용할 수 있습니다.
메트릭
NPD는 또한 모니터링 및 경고에 사용할 수 있는 노드 문제를 기반으로 Prometheus 메트릭을 노출합니다. 이러한 메트릭은 노드 IP의 포트 20257에 노출되며 Prometheus는 이를 스크랩할 수 있습니다.
다음 예 YAML은 Azure Managed Prometheus 추가 기능을 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']
다음 예에서는 스크랩된 메트릭을 보여 줍니다.
problem_gauge{reason="UnregisterNetDevice",type="FrequentUnregisterNetDevice"} 0
problem_gauge{reason="VMEventScheduled",type="VMEventScheduled"} 0
다음 단계
NPD에 대한 자세한 내용은 kubernetes/node-problem-Detector를 참조하세요.
Azure Kubernetes Service