노드 문제 감지기

노드 문제 감지기는 노드 상태를 모니터링하고 하드웨어, 커널, 컨테이너 런타임 문제와 같은 일반적인 노드 문제를 감지하는 오픈소스 라이브러리입니다. 베어메탈용 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 명령어를 실행하여 NodeConditionsEvents를 찾습니다.

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: 상태 정보를 확인하려는 노드의 이름입니다.

노드 문제 감지기를 사용 설정/사용 중지하는 방법

특정 클러스터에서 노드 문제 감지기를 사용 설정하는 단계는 다음과 같습니다.

  1. 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: 노드 문제 감지기를 사용 설정하려는 클러스터의 네임스페이스입니다.
  2. 처음에는 node-problem-detector-config ConfigMapdata 필드가 없습니다. 다음 키-값 쌍을 사용해서 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 맞춤설정
  • 사용자 정의 모니터링 스크립트 실행