こんにちは,修士2年の平尾真斗です!この記事は,「2.Kubernetes上のPodでGPUを使えるようにした話(ソフトウェア編→Ubuntu上)」の続きです.読んでいない人はぜひ読んでみてくださいね!Kubernetes上のPodをGPUを使えるようにするためのKubernetes上での設定を行ったのでまとめます.
GPUをPodで使用できるようにするための方法にGPU Operatorがあります.インストールするためには,Helmを用います.実際にHelmでインストールした際の構成は以下になります.これもいろいろコンポーネントがあるので説明していきますね.

基盤と管理系
- GPU Operator (gpu-operator-…)
- クラスター全体の管理を行います.各ノードの状態を監視し,必要に応じてドライバーや各種Pod(Device Plugin)を自動でデプロイする役割
- NVIDIA Operator Validator
- 各コンポーネントが正しくインストールされ,GPUがコンテナから利用可能な状態になっているかを最終確認
GPUの検出
- Node Feature Discovery (NFD)
- CPUの機能やPCIデバイスを検出し,ノードにラベル(例:
feature.node.kubernetes.io/pci-10de...)を付与
- CPUの機能やPCIデバイスを検出し,ノードにラベル(例:
- GPU Feature Discovery (GFD)
- NFDと連携し,より詳細なGPU情報(型番:RTX 4080,メモリ容量,CUDAバージョン)を検出し,ノードのラベルとして登録
リソースの割り当てと実行
- NVIDIA Device Plugin
- Kubernetesのスケジューラーに対してノードがGPUで使用可能かどうかを判断する.Podが
resources: limits: nvidia.com/gpu: 1と要求した際,このプラグインが仲介してGPUを割り当てる.
- Kubernetesのスケジューラーに対してノードがGPUで使用可能かどうかを判断する.Podが
- NVIDIA Container Toolkit
- Dockerやcontainerdのランタイムが,コンテナ内部から物理GPUにアクセス(パススルー)できるように,必要なライブラリやパスの設定を行う.
監視エージェント
- DCGM Exporter (Data Center GPU Manager)
- GPUの使用率,温度,電力消費,メモリ使用量のメトリクスを収集
- GPUの使用率,温度,電力消費,メモリ使用量のメトリクスを収集
HelmでのGPU Operatorのインストール
これらのソフトウェアはHelmでインストールします.
hirao@rtx4080-control:~$ helm install gpu-operator -n gpu-operator --create-namespace \
nvidia/gpu-operator \
--set driver.enabled=false \
--set toolkit.nodeSelector.gpu=true \
--set devicePlugin.nodeSelector.gpu=true \
--set gpuFeatureDiscovery.nodeSelector.gpu=true \
--set dcgmExporter.nodeSelector.gpu=true \
--set toolkit.env[0].name=CONTAINERD_CONFIG \
--set toolkit.env[0].value=/var/lib/rancher/k3s/agent/etc/containerd/config.toml \
--set toolkit.env[1].name=CONTAINERD_SOCKET \
--set toolkit.env[1].value=/run/k3s/containerd/containerd.sock \
--set toolkit.env[2].name=CONTAINERD_RUNTIME_CLASS \
--set toolkit.env[2].value=nvidia \
--set toolkit.env[3].name=CONTAINERD_SET_AS_DEFAULT \
--set-string toolkit.env[3].value=true
I0220 08:50:26.226941 2783 warnings.go:107] "Warning: spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[0].preference.matchExpressions[0].key: node-role.kubernetes.io/master is use \"node-role.kubernetes.io/control-plane\" instead"
NAME: gpu-operator
LAST DEPLOYED: Fri Feb 20 08:50:25 2026
NAMESPACE: gpu-operator
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
hirao@rtx4080-control:~$
Helmでインストールする際には,オプションを–setで指定して設定します.私が使用したKubernetesはK3sを使用していたのでオプションに –set toolkit.env[0].value=/var/lib/rancher/k3s/agent/etc/containerd/config.tomlや–set toolkit.env[1].value=/run/k3s/containerd/containerd.sockを入れています.使用するKubernetesのソフトウェアによっても変わるので合わせて使います.
kubectl get podで確認した際に以下のように全てのPodがRunnigになっていればOKです.
hirao@rtx4080-control:~$ kubectl get pods -n gpu-operator
NAME READY STATUS RESTARTS AGE
gpu-feature-discovery-v2wpk 1/1 Running 0 9m58s
gpu-operator-7569f8b499-9sskc 1/1 Running 0 10m
gpu-operator-node-feature-discovery-gc-55ffc49ccc-b4fv7 1/1 Running 0 10m
gpu-operator-node-feature-discovery-master-6b5787f695-n5n5f 1/1 Running 0 10m
gpu-operator-node-feature-discovery-worker-2tq48 1/1 Running 0 10m
gpu-operator-node-feature-discovery-worker-4kdf8 1/1 Running 0 10m
gpu-operator-node-feature-discovery-worker-pgzdw 1/1 Running 0 10m
nvidia-container-toolkit-daemonset-7ws8f 1/1 Running 0 9m59s
nvidia-cuda-validator-fjplx 0/1 Completed 0 9m29s
nvidia-dcgm-exporter-f4vbm 1/1 Running 0 9m58s
nvidia-device-plugin-daemonset-rmfdz 1/1 Running 0 9m58s
nvidia-operator-validator-pdv46 1/1 Running 0 9m58s
hirao@rtx4080-control:~$
探してみるとGPUを使えるか確認するサンプルコードもあるので実践してみます.
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vectoradd
image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04"
resources:
limits:
nvidia.com/gpu: 1
kubectl applyコマンドを入力して確認した際にRunningになってからCompletedになれば動いていることになります.
hirao@rtx4080-control:~/gputest$ kubectl get pods -w
NAME READY STATUS RESTARTS AGE
cuda-vectoradd 0/1 ContainerCreating 0 6s
cuda-vectoradd 1/1 Running 0 8s
cuda-vectoradd 0/1 Completed 0 9s
cuda-vectoradd 0/1 Completed 0 10s
^Chirao@rtx4080-control:~/gputest$
最後に
GPUを使ったサーバをハードウェアの組み立てからソフトウェアのインストールまで全てやってみました.感想としては,大変だったけど,いい経験ができたなって感じです.自分は3月からクラウドプロバイダーで勤務するのでその時に役に立てばいいなと思ってます!