在Kubernetes环境下使用Docker实现GPU支持的完整方案
作者:gs80140
本文将介绍如何在 Kubernetes 环境下,使用 Docker 容器运行时实现 NVIDIA GPU 加速支持,包括环境准备、安装 nvidia-docker2、K8s device plugin 配置等内容,需要的朋友可以参考下
一、背景说明
Kubernetes 从 v1.20+ 开始逐步默认使用 containerd 作为运行时,不再推荐直接使用 Docker。然而,在一些已有的生产环境中,Docker 仍然是默认运行时。如果你希望在这样的环境下运行支持 GPU 的 AI/计算类工作负载,就需要正确配置 Docker 和 NVIDIA 的相关支持组件。
二、目标
保留 Docker 作为容器运行时
支持容器使用 NVIDIA GPU
允许 Kubernetes 调度 GPU 资源
能够通过 YAML 定义 GPU Pod 并正常运行
三、环境准备
Ubuntu 20.04+/CentOS 7.9+
安装了 NVIDIA 驱动(
nvidia-smi
正常)Kubernetes 已安装(使用 Docker 作为运行时)
能访问外网或使用国内代理
四、安装 NVIDIA Container Toolkit(nvidia-docker2)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update sudo apt-get install -y nvidia-docker2
五、配置 Docker 支持 NVIDIA Runtime
编辑 Docker 配置文件:
sudo nano /etc/docker/daemon.json
添加以下内容:
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } }
重启 Docker:
sudo systemctl restart docker
六、测试 Docker 能否使用 GPU
运行命令:
sudo docker run --rm --gpus all nvidia/12.8.1-cudnn-devel-ubuntu22.04 nvidia-smi
输出显卡信息即表示配置成功。
七、部署 Kubernetes GPU 支持插件
NVIDIA 官方提供了 Kubernetes GPU 插件作为 DaemonSet 运行:
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
八、部署一个 GPU Pod 测试
创建 YAML 文件 gpu-pod.yaml
:
apiVersion: v1 kind: Pod metadata: name: gpu-test spec: containers: - name: cuda image: nvidia/cuda:12.8.1-base resources: limits: nvidia.com/gpu: 1 command: ["nvidia-smi"]
部署:
kubectl apply -f gpu-pod.yaml kubectl logs gpu-test
成功输出 GPU 信息,即可证明 Kubernetes GPU 配置生效。
九、常见问题排查
问题 | 原因及解决方案 |
---|---|
--gpus all 报错 | 没有配置 nvidia 为 Docker 的默认运行时 |
Pod 提交后一直 Pending | 没有可用 GPU 节点;未部署 device plugin |
镜像拉取超时 | 网络问题或 Docker Hub 被墙,可配置国内镜像加速器 |
使用 containerd 的情况如何配置 GPU? | 需改用 NVIDIA Container Toolkit + containerd + hosts.toml 配置 |
十、小结
虽然 Kubernetes 官方推荐使用 containerd,但在已有 Docker 环境中,仍可以通过 nvidia-docker2
和 device plugin
组合,快速支持 GPU 任务调度与运行。只要配置得当,不更换运行时也能实现 GPU 加速能力。
以上就是在Kubernetes环境下使用Docker实现GPU支持的完整方案的详细内容,更多关于Kubernetes Docker实现GPU支持的资料请关注脚本之家其它相关文章!