본문으로 건너뛰기

K8S 클러스터에 NVIDIA GPU 모니터링 환경 구축

쿠버네티스 클러스터에서 NVIDIA GPU의 모니터링 환경을 구축하는 방법을 설명합니다. 사용자는 이 문서를 통해 Kubernetes Engine으로 생성한 쿠버네티스 클러스터에 Nvidia GPU 작업 노드 풀을 생성하고 모니터링 환경을 구축하는 예제를 확인할 수 있습니다.

안내

시작하기

Step 1. 쿠버네티스 클러스터에 GPU 노드 풀 생성

  1. 새로 생성한 혹은 기존의 쿠버네티스 클러스터에 Nvidia GPU가 부착된 작업 노드 풀을 아래 표를 참고해 생성합니다.

    Node Pool TypeInstance typeQuantityDisk(GB)
    GPU       p2i.6xlarge    1100
  2. GPU를 쿠버네티스 클러스터에 노출하기 위해 Helm을 이용하여 nvidia-k8s-device-plugin을 구성 요소에 추가합니다. 로컬 환경의 터미널을 열고 아래 Helm 명령어를 실행합니다.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    helm install \
    --version=0.12.3 \
    --namespace nvidia-device-plugin \
    --create-namespace \
    --generate-name \
    nvdp/nvidia-device-plugin
    # NAME: nvidia-device-plugin-*
    # LAST DEPLOYED: Fri Dec 9 16:26:48 2022
    # NAMESPACE: nvidia-device-plugin
    # STATUS: deployed
    # REVISION: 1
    # TEST SUITE: None

Step 2. 모니터링 환경 구축

Helm을 이용하여 k8s 클러스터에서 Prometheus 스택 환경을 편리하게 생성하고 관리할 수 있습니다. kube-prometheus-stack를 설치하여 k8s 클러스터에 kube-prometheus 스택과 Grafana 대시보드 등을 생성합니다.

  1. 로컬 환경 기본 다운로드 경로에 예제 작업을 진행할 디렉터리를 생성합니다.

    mkdir ~/Downloads/ike-gpu-monitor
    cd ~/Downloads/ike-gpu-monitor
  2. 사전 설정된 kube-prometheus-stack의 values.yaml 파일을 다운로드합니다.

    curl -O https://raw.githubusercontent.com/kakaoenterprise/kc-handson-config/k8s-gpu-monitor/prom-values.yaml
  3. 다운로드한 values.yaml 파일을 적용하여 kube-prometheus-stack을 설치합니다.

    helm repo add prometheus-community \
    https://prometheus-community.github.io/helm-charts
    helm install prometheus prometheus-community/kube-prometheus-stack -f prom-values.yaml -n kube-system
    # NAME: prometheus
    # LAST DEPLOYED: Fri Dec 9 16:29:51 2022
    # NAMESPACE: kube-system
    # STATUS: deployed
    # REVISION: 1
    # NOTES:
    # kube-prometheus-stack has been installed. Check its status by running:
    # kubectl --namespace kube-system get pods -l "release=prometheus"
  4. 마지막으로 GPU 정보 및 상태 메트릭을 제공하는 dcgm-exporter를 설치합니다.

    helm repo add gpu-helm-charts \
    https://nvidia.github.io/dcgm-exporter/helm-charts
    helm repo update
    helm install --generate-name gpu-helm-charts/dcgm-exporter -n kube-system
    # NAME: dcgm-exporter-*
    # LAST DEPLOYED: Fri Dec 9 16:31:41 2022
    # NAMESPACE: kube-system
    # STATUS: deployed
    # REVISION: 1
    # TEST SUITE: None
    # NOTES:
    # 1. Get the application URL by running these commands:
    # export POD_NAME=$(kubectl get pods -n kube-system -l "app.kubernetes.io/name=dcgm-exporter,app.kubernetes.io/instance=dcgm-exporter-1670571097" -o jsonpath="{.items[0].metadata.name}")
    # kubectl -n kube-system port-forward $POD_NAME 8080:9400 &

Step 3. Grafana 대시보드 접속

Grafana 대시보드에 접근하기 위해 포트포워딩을 진행합니다.

  1. 아래 kubectl 명령어를 이용하여 로컬 환경의 30080 포트의 진입을 Grafana 대시보드 엔드포인트로 포워딩하는 프로세스를 실행합니다.

    kubectl port-forward svc/prometheus-grafana -n kube-system 30080:80 &
  2. 로컬 환경에서 브라우저를 실행하여 로컬호스트 30080 포트로 http 접속을 시도합니다. 정상적으로 설치된 경우 Grafana 대시보드로 접속합니다.

    open http://localhost:30080

    Grafana 기본 계정은 다음과 같습니다. 계정 정보를 확인하여 로그인합니다.

    KeyValue
    usernameadmin
    passwordprom-operator
  3. 로그인에 성공하면 대시보드 홈 화면을 확인할 수 있습니다.

Step 4. Grafana 데이터 소스 생성

prometheus 스택 중, prometheus-serverprometheus-node-exporter로부터 모니터링할 노드의 메트릭 정보를 받아옵니다. Grafana 대시보드에서 Data Source를 생성하여 prometheus-server에 받아온 메트릭 정보를 요청합니다. 다음 정보를 참고하여 데이터 소스를 생성합니다.

KeyData
Namek8se-tutorial
URLhttp://prometheus-kube-prometheus-prometheus:9090

이미지

Step 5. 대시보드 적용 및 확인

생성한 데이터 소스를 시각화하기 위해 대시보드를 생성합니다. dcgm-exporter의 메트릭 정보를 확인하기 위해 NVIDIA-DCGM-Exporter-Dashboard를 예시로 사용합니다. 사용할 대시보드 고유 ID(12239)를 입력하여 불러온 뒤, 생성한 데이터 소스를 연결하여 GPU 모니터링 대시보드를 생성합니다.

이미지

생성된 대시보드를 통해 온도, 사용률 등 GPU 모니터링 정보를 확인할 수 있습니다.