NPD(노드 문제 감지기)는 노드 관련 문제를 검색하고 이에 대해 보고하는 오픈 소스 Kubernetes 구성 요소입니다. 클러스터의 각 노드에서 시스템 서비스로 실행되며 CPU 사용량, 디스크 사용량 및 네트워크 연결과 같은 다양한 메트릭 및 시스템 정보를 수집합니다. 문제가 검색되면 이벤트 및/또는 노드 조건을 생성합니다. AKS(Azure Kubernetes Service)는 NPD를 사용하여 Azure 클라우드 플랫폼에서 실행되는 Kubernetes 클러스터의 노드를 모니터링하고 관리합니다. AKS Linux 확장은 기본적으로 NPD를 사용하도록 설정합니다.
참고
NPD로의 업그레이드는 노드 이미지 및 Kubernetes 버전 업그레이드 프로세스와 독립적입니다. 노드 풀이 비정상 상태인 경우(즉, 실패한 상태) 새 NPD 버전이 설치되지 않습니다.
노드 조건
노드 상태는 노드를 사용할 수 없게 만드는 영구적인 문제를 나타냅니다. AKS는 NPD의 다음 노드 조건을 사용하여 노드의 영구적인 문제를 노출합니다. NPD는 해당 Kubernetes 이벤트도 내보냅니다.
문제 디먼 형식 | 노드 상태 | 원인 |
---|---|---|
사용자 지정 플러그인 모니터 | 파일 시스템 손상 문제 | 파일 시스템 손상 감지됨 |
사용자 지정 플러그인 모니터 | KubeletProblem | KubeletIsDown |
사용자 지정 플러그인 모니터 | 컨테이너 런타임 문제 | 컨테이너 런타임이 중단되었습니다 |
사용자 지정 플러그인 모니터 | VM 이벤트 예정 | VM 이벤트 예정 |
사용자 지정 플러그인 모니터 | 빈번한 등록 해제 네트워크 장치 | 네트워크 장치 등록 해제 |
사용자 지정 플러그인 모니터 | 자주 발생하는 Kubelet 재시작 | FrequentKubeletRestart |
사용자 지정 플러그인 모니터 | 빈번한 Containerd 재시작 | 컨테이너d 빈번한 재시작 |
사용자 지정 플러그인 모니터 | 잦은 도커 재시작 | 잦은 도커 재시작 |
시스템 로그 모니터 | 커널 데드락 | DockerHung |
SystemLogMonitor | 읽기 전용 파일 시스템 | 파일 시스템이 읽기 전용입니다 |
이벤트
NPD는 근본적인 문제를 진단하는 데 도움이 되는 관련 정보가 포함된 이벤트를 내보냅니다.
문제 디먼 형식 | 원인 | 빈도 | 설명 | 조치 |
---|---|---|---|---|
사용자 지정 플러그인 모니터 | 출구 차단됨 | 30분 | 이 이벤트는 외부 엔드포인트에 대한 연결을 확인 합니다. | 엔드포인트에 대한 연결을 차단하는 방화벽 또는 NSG 플래그가 지정되었는지 확인합니다. |
사용자 지정 플러그인 모니터 | 파일 시스템 손상 감지됨 | 5분 | Docker에서 노출되는 파일 시스템 손상을 확인합니다. | |
사용자 지정 플러그인 모니터 | KubeletIsDown | 30초 | 그러면 kubelet 서비스가 실행 중이고 정상 상태인지 확인합니다. | |
사용자 지정 플러그인 모니터 | 컨테이너 런타임이 중단되었습니다 | 30초 | 이 이벤트는 컨테이너 런타임이 실행 중이고 정상 상태인지 확인합니다. | |
사용자 지정 플러그인 모니터 | 일정 동결 | 1분 | 이 이벤트는 노드에서 Freeze 이벤트가 예약되어 있는지 확인합니다. 자세한 정보 확인 https://aka.ms/aks/scheduledevents | |
사용자 지정 플러그인 모니터 | 재부팅 예약됨 | 1분 | 이 이벤트는 노드에서 다시 부팅 이벤트가 예약되었는지 확인합니다. 자세한 내용은 https://aka.ms/aks/scheduledevents를 확인하십시오. | |
사용자 지정 플러그인 모니터 | 재배포 예정 | 1분 | 이 이벤트는 노드에서 재배포 이벤트가 예약되어 있는지 확인합니다. 자세한 정보 확인 https://aka.ms/aks/scheduledevents | |
사용자 지정 플러그인 모니터 | 예약 종료 | 1분 | 이 이벤트는 노드에서 Terminate 이벤트가 예약되어 있는지 확인합니다. 자세한 정보 확인 https://aka.ms/aks/scheduledevents | |
사용자 지정 플러그인 모니터 | PreemptScheduled | 2초 | 이 이벤트는 노드에서 선점 이벤트가 예약되어 있는지 확인합니다. 자세한 정보 확인 https://aka.ms/aks/scheduledevents | |
사용자 지정 플러그인 모니터 | DNSProblem | |||
시스템 로그 모니터 | OOMKilling | |||
SystemLogMonitor | TaskHung | |||
시스템 로그 모니터 | UnregisterNetDevice (네트워크 장치 등록 취소) | |||
시스템 로그 모니터 (SystemLogMonitor) | 커널옵스 | |||
시스템로그모니터 (SystemLogMonitor) | 닥커 소켓 연결 불가 | |||
시스템 로그 모니터 | KubeletRPCDeadlineExceeded | |||
시스템로그모니터 (SystemLogMonitor) | KubeletRPCNoSuchContainer (해당 컨테이너를 찾을 수 없음) | |||
시스템 로그 모니터 | CNICannotStatFS | |||
시스템 로그 모니터 | PLEG 비정상 | |||
시스템 로그 모니터 | KubeletStart | |||
시스템로그모니터 | DockerStart | |||
시스템 로그 모니터 | ContainerdStart |
어떤 경우에는 AKS가 자동으로 노드를 차단하고 드레이닝하여 워크로드 중단을 최소화합니다. 이벤트 및 작업에 대한 자세한 내용은 노드 자동 드레인을 참조하세요.
출구 차단
EgressBlocked에서 확인한 엔드포인트 목록은 다음과 같습니다.
참고
실제 엔드포인트는 클러스터의 유형과 클러스터가 호스트되는 위치(퍼블릭 클라우드 및 Airgapped 클라우드)에 따라 달라집니다. 아웃바운드 액세스에 대한 설명서를 여기에서 검토하십시오. 설명서는 퍼블릭 클라우드용입니다.
유형 | 예시 | 참고 |
---|---|---|
MCR | https://mcr.microsoft.com | |
Microsoft Entra ID (마이크로소프트 엔트라 ID) | https://login.microsoftonline.com" | |
자원 관리자 | https://management.azure.com | |
패키지 | https://packages.microsoft.com | |
Kube Binary | https://acs-mirror.azureedge.net/acs-mirror/healthz, https://packages.aks.azure.com/acs-mirror/healthz |
노드 조건 및 이벤트 확인
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