쿠버네티스 환경에서 GPU 서버인 노드를 Grafana와 Prometheus를 이용해 모니터링하고자 한다. 모니터링 도구는 NVIDA Gpu Monitoring tools이며, 각 노드에 dcgm-exporter 설치가 필요하다.
이 글에서는 helm chart package로 dcgm-expoter 컨테이너를 실행하는 포드를 클러스터에 배포했다.
그러나, 배포 이후 아래와 같이 CrashLoopBackOff 상태인 dcgm-expoter 포드가 존재했다. 해당 현상의 원인을 찾아 해결한 방법을 정리해둔다.
현상
에러 메시지
드라이버 초기화 관련 에러인 것으로 추측된다.
$ 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