노드 문제 감지기는 노드 상태를 모니터링하고 하드웨어, 커널, 컨테이너 런타임 문제와 같은 일반적인 노드 문제를 감지하는 오픈소스 라이브러리입니다. 베어메탈용 GKE의 각 노드에서 systemd 서비스로 실행됩니다.
베어메탈용 GKE 출시 버전 1.10.0부터는 노드 문제 감지기가 기본적으로 사용 설정됩니다.
어떤 문제를 감지하나요?
노드 문제 감지기는 다음과 같은 문제 유형을 감지할 수 있습니다.
- 응답하지 않는 런타임 데몬과 같은 컨테이너 런타임 문제
- CPU, 메모리, 디스크 장애와 같은 하드웨어 문제
- 커널 교착 상태 또는 손상된 파일 시스템과 같은 커널 문제
노드 문제 감지기는 노드에서 실행되며 Kubernetes API 서버에 문제를 NodeCondition
또는 Event
로 보고합니다.
NodeCondition
은 노드가 포드를 실행할 수 없게 만드는 문제이고 Event
는 포드에 제한된 영향을 주는 일시적인 문제이지만 그렇더라도 충분히 보고할 가치가 있는 중요한 문제로 고려됩니다.
노드 문제 감지기에서 발견되는 일부 NodeConditions
는 다음과 같습니다.
KernelDeadlock
ReadonlyFilesystem
FrequentKubeletRestart
FrequentDockerRestart
FrequentContainerdRestart
FrequentUnregisterNetDevice
KubeletUnhealthy
ContainerRuntimeUnhealthy
CorruptDockerOverlay2
노드 문제 감지기에서 보고되는 일부 Events
유형의 예시는 다음과 같습니다.
Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.
감지된 문제를 확인하는 방법
노드에서 다음 kubectl describe
명령어를 실행하여 NodeConditions
및 Events
를 찾습니다.
kubectl --kubeconfig=KUBECONFIG_PATH describe node NODE_NAME
명령어에서 다음 항목을 클러스터 환경에 해당하는 정보로 바꿉니다.
KUBECONFIG_PATH
: 대상 클러스터 kubeconfig 파일의 경로입니다. (kubeconfig 파일의 경로는 일반적으로bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다. 하지만 WORKSPACE_DIR 플래그로 작업공간을 지정한 경우에는 경로가WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다.)NODE_NAME
: 상태 정보를 확인하려는 노드의 이름입니다.
노드 문제 감지기를 사용 설정/사용 중지하는 방법
특정 클러스터에서 노드 문제 감지기를 사용 설정하는 단계는 다음과 같습니다.
node-problem-detector-config
라는 클러스터의ConfigMap
파일을 수정합니다.kubectl --kubeconfig=KUBECONFIG_PATH edit configmap \ node-problem-detector-config --namespace=CLUSTER_NAMESPACE
이 명령어는
node-problem-detector-config
파일을 수정할 수 있는 vim 또는 nano와 같은 텍스트 편집기를 자동으로 시작합니다. 명령어에서 다음 항목을 클러스터 환경에 해당하는 정보로 바꿉니다.- KUBECONFIG_PATH: 관리자 클러스터 kubeconfig 파일의 경로입니다. (kubeconfig 파일의 경로는 일반적으로
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다. 하지만 WORKSPACE_DIR 플래그로 작업공간을 지정한 경우에는 경로가WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다.) - CLUSTER_NAMESPACE: 노드 문제 감지기를 사용 설정하려는 클러스터의 네임스페이스입니다.
- KUBECONFIG_PATH: 관리자 클러스터 kubeconfig 파일의 경로입니다. (kubeconfig 파일의 경로는 일반적으로
처음에는
node-problem-detector-config
ConfigMap
에data
필드가 없습니다. 다음 키-값 쌍을 사용해서data
필드를 구성 맵에 추가합니다.data: enabled: "true"
클러스터 네임스페이스에서 노드 문제 감지기를 사용 중지하려면 앞의 1단계 및 2단계를 수행하지만, 2단계에서 enabled
키 값을 'false'로 바꿉니다.
노드 문제 감지기를 중지/시작하는 방법
노드 문제 감지기는 각 노드에서 systemd
서비스로 실행됩니다. 지정된 노드에 대해 노드 문제 감지기를 관리하려면 SSH를 사용하여 노드에 액세스하고 다음 systemctl
명령어를 실행합니다.
노드 문제 감지기를 사용 중지하려면 다음 명령어를 실행합니다.
systemctl stop node-problem-detector
노드 문제 감지기를 다시 시작하려면 다음 명령어를 실행합니다.
systemctl restart node-problem-detector
노드 문제 감지기가 특정 노드에서 실행 중인지 확인하려면 다음 명령어를 실행합니다.
systemctl is-active node-problem-detector
지원되지 않는 기능
베어메탈용 GKE에서는 노드 문제 감지기의 다음 맞춤설정을 지원하지 않습니다.
- 노드 문제 감지기 보고서를 Stackdriver 또는 Prometheus와 같은 다른 모니터링 시스템으로 내보내기
- 검색할
NodeConditions
또는Events
맞춤설정 - 사용자 정의 모니터링 스크립트 실행