Kubernetes Pod 가 GPU 를 쓰려면 세 층이 맞아야 한다 — 노드의 NVIDIA 드라이버, 컨테이너 런타임에 GPU 를 붙여 주는 NVIDIA Container Toolkit, 그리고 GPU 를 nvidia.com/gpu 자원으로 광고하는 device plugin 이다. 이 셋을 한꺼번에 설치하고 관리하는 GPU Operator 를 쓰면 노드마다 손으로 할 일이 거의 없다.
Docker 단독 호스트의 GPU 설정은 Docker Installation Nvidia GPU 를 본다.
현행 버전은 GPU Operator v26.7.0, k8s-device-plugin v0.20.0 이다[1].
| 항목 | 내용 |
|---|---|
| GPU | NVIDIA 데이터센터 · RTX 계열 |
| 드라이버 | GPU Operator 를 쓰면 오퍼레이터가 설치한다. 직접 깔 때는 배포판에 맞는 데이터센터 드라이버 |
| 런타임 | containerd 또는 CRI-O. Docker 는 1.24 부터 CRI 로 쓰지 않는다 |
| 커널 | 드라이버를 빌드하려면 kernel-devel · kernel-headers 가 필요하다 (precompiled 드라이버를 쓰면 불필요) |
| 노드 | GPU 노드를 골라 배치하려면 노드 레이블 을 붙여 둔다 |
드라이버 · 툴킷 · device plugin · DCGM exporter · 노드 라벨링(GFD)을 오퍼레이터가 모두 맡는다. 새로 구성할 때는 이 방법을 쓴다.
helm repo add nvidia https://nvidia.github.io/gpu-operator
helm repo update
helm install --wait gpu-operator nvidia/gpu-operator \
--namespace gpu-operator --create-namespace
노드에 이미 드라이버가 깔려 있으면 드라이버 설치를 끈다.
helm install --wait gpu-operator nvidia/gpu-operator \
--namespace gpu-operator --create-namespace \
--set driver.enabled=false
드라이버를 소스에서 빌드할 때 필요한 패키지다.
sudo dnf install -y tar bzip2 make automake gcc gcc-c++ pciutils elfutils-libelf-devel libglvnd-devel kernel-devel-$(uname -r)
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo dnf install -y nvidia-container-toolkit
Debian 계열은 다음과 같다.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
툴킷이 /etc/containerd/config.toml 에 nvidia 런타임을 넣고 기본 런타임으로 잡아 준다.
sudo nvidia-ctk runtime configure --runtime=containerd --set-as-default
sudo systemctl restart containerd
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.20.0/deployments/static/nvidia-device-plugin.yml
kubectl -n gpu-operator get pods
kubectl get nodes -o json | jq '.items[].status.capacity."nvidia.com/gpu"'
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
restartPolicy: Never
containers:
- name: cuda
image: nvidia/cuda:12.4.1-base-ubi9
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
kubectl apply -f gpu-test.yaml
kubectl logs gpu-test
kubectl delete pod gpu-test
nvidia-smi 출력에 GPU 가 보이면 된다.
GPU Operator v26.7.0 · k8s-device-plugin v0.20.0 — 2026-09-20 확인. https://github.com/NVIDIA/gpu-operator/releases/latest · https://github.com/NVIDIA/k8s-device-plugin/releases/latest · 툴킷 설치 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html ↩︎