Kubernetes/삽질

[NVIDIA/gpu-monitoring-tools] dcgm-exporter CrashLoopBackOff

비번변경 2021. 12. 14. 16:33

쿠버네티스 환경에서 GPU 서버인 노드를 Grafana와 Prometheus를 이용해 모니터링하고자 한다. 모니터링 도구는 NVIDA Gpu Monitoring tools이며, 각 노드에 dcgm-exporter 설치가 필요하다.

 

이 글에서는 helm chart package로 dcgm-expoter 컨테이너를 실행하는 포드를 클러스터에 배포했다.

 

그러나, 배포 이후 아래와 같이 CrashLoopBackOff 상태인 dcgm-expoter 포드가 존재했다. 해당 현상의 원인을 찾아 해결한 방법을 정리해둔다.

 

현상

dcgm-exporter crashLoopBackOff

에러 메시지

드라이버 초기화 관련 에러인 것으로 추측된다.

$ kubectl logs dcgm-exporter-fk4s5
Warning #2: dcgm-exporter doesn't have sufficient privileges to expose profiling metrics. To get profiling metrics with dcgm-exporter, use --cap-add SYS_ADMIN
time="2021-12-01T07:44:14Z" level=info msg="Starting dcgm-exporter"
Error: Failed to initialize NVML
time="2021-12-01T07:44:14Z" level=fatal msg="Error starting nv-hostengine: DCGM initialization error"

 

원인

노드의 도커 데몬 설정 파일인 /etc/docker/daemon.json 파일 내 nvidia-container-runtime 경로 문제
데몬 (daemon)
리눅스 시스템이 처음 가동될 때 실행되는 백그라운드 프로세스의 일종
사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너 역할을 한다.
즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응할 수 있도록 대기중인 프로세스를 말한다.
서비스라고 부르기도 한다.

 

조치

1. 서버 nvidia-container-runtime 경로 확인
$ which nvidia-container-runtime
/usr/bin/nvidia-container-runtime

 

2. 서버의 /etc/docker/daemon.json 파일 내 path 값을 절대 경로로 수정
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

 

3. 데몬 리로드 및 docker 재시작
systemctl daemon-reload
systemctl restart docker