노드 문제 감지기

노드 문제 감지기는 노드 상태를 모니터링하고 하드웨어, 커널, 컨테이너 런타임 문제와 같은 일반적인 노드 문제를 감지하는 오픈소스 라이브러리입니다. Google Distributed Cloud에서는 각 노드에서 systemd 서비스로 실행됩니다.

Google Distributed Cloud 출시 버전 1.10.0부터 노드 문제 감지기가 기본적으로 사용 설정됩니다.

추가 지원이 필요하면 Cloud Customer Care에 문의하세요.

어떤 문제를 감지하나요?

노드 문제 감지기는 다음과 같은 문제 유형을 감지할 수 있습니다.

  • 응답하지 않는 런타임 데몬과 같은 컨테이너 런타임 문제
  • 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

지원되지 않는 기능

Google Distributed Cloud는 다음 노드 문제 감지기의 맞춤설정을 지원하지 않습니다.

  • 노드 문제 감지기 보고서를 Stackdriver 또는 Prometheus와 같은 다른 모니터링 시스템으로 내보내기
  • 검색할 NodeConditions 또는 Events 맞춤설정
  • 사용자 정의 모니터링 스크립트 실행

다음 단계