
저번에는 k3s를 이용하여 마스터 노드 1개와 워커 노드 1개가 연결 된 환경을 만들어보았다.
이번 시간에는 CUDA나 GPU를 사용할 수 있는 환경을 구축해보고자 한다.
GPU를 사용하기 위해서는 각 노드마다 NVIDIA Driver와 NVIDIA Container Toolkit을 설치하여야 한다.
Ubuntu OS에서 k3s + NVIDIA GPU를 최초 설치하는 것으로 가정하고 진행한다.
1. NVIDIA Driver 설치 (모든 노드)
https://starlane.tistory.com/18
[Linux] Ubuntu 24.04 NVIDIA 드라이버 + CUDA + cuDNN 설치하기
설치 버전CUDA 12.8 + cuDNN 9.7.0설치 순서1. NVIDIA 드라이버 + CUDA 설치2. cuDNN 설치 1. NVIDIA 드라이버 설치 + CUDA 설치1) 사전 설치 요소sudo apt update && upgrade -ysudo apt install build-essential gcc make ubuntu-drivers-
starlane.tistory.com
위 내용을 참조하여 driver를 설치한다.
2. NVIDIA Container Toolkit 설치 (모든 노드)
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit
Note There is a known issue on systems where systemd cgroup drivers are used that cause containers to lose access to requested GPUs when systemctl daemon reload is run. Refer to the troubleshooting documentation for more information.
docs.nvidia.com
마찬가지로 위 링크를 참조하여 설치한다.
아래부터는 마스터 노드에서만 진행하면 된다.
3. k3s 및 NVIDIA k8s-device-plugin 설치
https://starlane.tistory.com/19
[Kubernetes] k3s로 멀티노드 클러스터 구축하기
이번 과제에서 서버를 여러대 사용할 일이 생겨 마침 쿠버네티스를 공부할 기회가 생겼다.목표는 기존에 온프레미스 환경에서 워크스테이션 1대로 돌아가던 프로그램을 GPU 서버에서 돌아가게
starlane.tistory.com
sudo tee /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl > /dev/null << 'EOF'
{{ template "base" . }}
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia']
privileged_without_host_devices = false
runtime_type = "io.containerd.runc.v2"
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.'nvidia'.options]
BinaryName = "/usr/bin/nvidia-container-runtime"
SystemdCgroup = true
[plugins.'io.containerd.cri.v1.runtime'.containerd]
default_runtime_name = "nvidia"
EOF
https://github.com/NVIDIA/k8s-device-plugin/releases
Releases · NVIDIA/k8s-device-plugin
NVIDIA device plugin for Kubernetes. Contribute to NVIDIA/k8s-device-plugin development by creating an account on GitHub.
github.com
사용할 k8s-device-plugin 버전은 위 링크를 참조한다.
sudo kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.19.0/deployments/static/nvidia-device-plugin.yml
4. NVIDIA k8s-device-plugin 적용 확인
sudo kubectl logs -n kube-system -l name=nvidia-device-plugin-ds
"sharing": {
"timeSlicing": {}
},
"imex": {}
}
I0325 08:56:53.866979 1 main.go:372] Retrieving plugins.
I0325 08:56:53.898513 1 server.go:198] Starting GRPC server for 'nvidia.com/gpu'
I0325 08:56:53.899879 1 server.go:142] Starting to serve 'nvidia.com/gpu' on /var/lib/kubelet/device-plugins/nvidia-gpu.sock
I0325 08:56:53.904834 1 server.go:149] Registered device plugin for 'nvidia.com/gpu' with Kubelet
I0325 08:56:53.905867 1 health.go:64] Ignoring the following XIDs for health checks: map[13:true 31:true 43:true 45:true 68:true 109:true]
sudo kubectl describe node | grep nvidia.com/gpu
nvidia.com/gpu: 2
nvidia.com/gpu: 2
nvidia.com/gpu 0 0
5. pod 내부에서 nvidia-smi 확인
apiVersion: v1
kind: Pod
metadata:
name: cuda-test
spec:
nodeSelector:
kubernetes.io/hostname: <"노드 이름">
runtimeClassName: nvidia
restartPolicy: Never
containers:
- name: cuda-test
image: nvidia/cuda:12.4.0-base-ubuntu20.04
command: ["nvidia-smi"]
먼저 테스트할 yaml 파일을 작성한다.
sudo kubectl apply -f cuda-test-pod.yaml
만들어진 yaml 파일로 포드를 배포한다.
sudo kubectl get pods
NAME READY STATUS RESTARTS AGE
cuda-test 0/1 Completed 0 35s
sudo kubectl logs cuda-test
Wed Mar 25 08:58:37 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.163.01 Driver Version: 550.163.01 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA RTX 6000 Ada Gene... Off | 00000000:55:00.0 Off | Off |
| 30% 42C P8 28W / 300W | 93MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA RTX 6000 Ada Gene... Off | 00000000:A2:00.0 Off | Off |
| 30% 39C P8 31W / 300W | 12MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+
포드 상태를 확인하여 nvidia-smi가 제대로 적용되는 것을 확인하였다.
'dev' 카테고리의 다른 글
| [Kubernetes] Prometheus와 Grafana로 Metrics 수집 및 시각화 해보기 (0) | 2026.03.30 |
|---|---|
| [Kubernetes] k3s로 멀티노드 클러스터 구축하기 (0) | 2026.03.26 |
| [Linux] Ubuntu 24.04 NVIDIA 드라이버 + CUDA + cuDNN 설치하기 (0) | 2025.03.05 |
| YOLOv12: Attention-Centric Real-Time Object Detectors (0) | 2025.03.04 |
| [Jetson] Jetson Orin Nano GPIO 에러 Exception: Could not determine Jetson model 해결 (0) | 2025.01.20 |