K8S 클러스터에 NVIDIA GPU 모니터링 환경 구축
쿠버네티스 클러스터에서 NVIDIA GPU의 모니터링 환경을 구축하는 방법을 설명합니다. 사용자는 이 문서를 통해 Kubernetes Engine으로 생성한 쿠버네티스 클러스터에 Nvidia GPU 작업 노드 풀을 생성하고 모니터링 환경을 구축하는 예제를 확인할 수 있습니다.
- 예상 소요 시간: 20분
- 사용자 환경
- 권장 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 사전 준비 사항
- 사용자 로컬 Helm 환경 설치
- 참고 문서
시작하기
Step 1. 쿠버네티스 클러스터에 GPU 노드 풀 생성
-
새로 생성한 혹은 기존의 쿠버네티스 클러스터에 Nvidia GPU가 부착된 작업 노드 풀을 아래 표를 참고해 생성합니다.
Node Pool Type Instance type Quantity Disk(GB) GPU p2i.6xlarge 1 100 -
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 대시보드 등을 생성합니다.
-
로컬 환경 기본 다운로드 경로에 예제 작업을 진행할 디렉터리를 생성합니다.
mkdir ~/Downloads/ike-gpu-monitor
cd ~/Downloads/ike-gpu-monitor -
사전 설정된 kube-prometheus-stack의 values.yaml 파일을 다운로드합니다.
curl -O https://raw.githubusercontent.com/kakaoenterprise/kc-handson-config/k8s-gpu-monitor/prom-values.yaml
-
다운로드한 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" -
마지막으로 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 대시보드에 접근하기 위해 포트포워딩을 진행합니다.
-
아래 kubectl 명령어를 이용하여 로컬 환경의 30080 포트의 진입을 Grafana 대시보드 엔드포인트로 포워딩하는 프로세스를 실행합니다.
kubectl port-forward svc/prometheus-grafana -n kube-system 30080:80 &
-
로컬 환경에서 브라우저를 실행하여 로컬호스트 30080 포트로 http 접속을 시도합니다. 정상적으로 설치된 경우 Grafana 대시보드로 접속합니다.
open http://localhost:30080
Grafana 기본 계정은 다음과 같습니다. 계정 정보를 확인하여 로그인합니다.
Key Value username admin password prom-operator -
로그인에 성공하면 대시보드 홈 화면을 확인할 수 있습니다.
Step 4. Grafana 데이터 소스 생성
prometheus
스택 중, prometheus-server
는 prometheus-node-exporter
로부터 모니터링할 노드의 메트릭 정보를 받아옵니다. Grafana 대시보드에서 Data Source를 생성하여 prometheus-server
에 받아온 메트릭 정보를 요청합니다. 다음 정보를 참고하여 데이터 소스를 생성합니다.
Key | Data |
---|---|
Name | k8se-tutorial |
URL | http://prometheus-kube-prometheus-prometheus:9090 |
Step 5. 대시보드 적용 및 확인
생성한 데이터 소스를 시각화하기 위해 대시보드를 생성합니다.
dcgm-exporter
의 메트릭 정보를 확인하기 위해 NVIDIA-DCGM-Exporter-Dashboard를 예시로 사용합니다. 사용할 대시보드 고유 ID(12239)를 입력하여 불러온 뒤, 생성한 데이터 소스를 연결하여 GPU 모니터링 대시보드를 생성합니다.
생성된 대시보드를 통해 온도, 사용률 등 GPU 모니터링 정보를 확인할 수 있습니다.