在Kubernetes环境下使用Docker实现GPU支持的完整方案

 更新时间:2025年05月12日 09:03:24   作者: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 并正常运行

三、环境准备

  1. Ubuntu 20.04+/CentOS 7.9+

  2. 安装了 NVIDIA 驱动(nvidia-smi 正常)

  3. Kubernetes 已安装(使用 Docker 作为运行时)

  4. 能访问外网或使用国内代理

四、安装 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支持的资料请关注脚本之家其它相关文章!

相关文章

  • Docker搭建Gazee的实现示例

    Docker搭建Gazee的实现示例

    Gazee 是一个 Web 应用,专门用于阅读和管理数字漫画,本文主要介绍了Docker搭建Gazee的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 使用 docker部署tomcat并接入skywalking的使用

    使用 docker部署tomcat并接入skywalking的使用

    这里主要介绍了使用 docker 部署 tomact 并接入 skywalking 的使用,因为在网上并没有查到太多相关的信息,所以这里记录下来,需要对有需求的小伙伴提供一些帮助
    2021-04-04
  • Docker基于macvlan实现跨主机容器通信

    Docker基于macvlan实现跨主机容器通信

    这篇文章主要介绍了Docker基于macvlan实现跨主机容器通信,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • docker如何部署eureka-server

    docker如何部署eureka-server

    这篇文章主要介绍了docker如何部署eureka-server问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 使用Docker将容器目录挂载到主机上的实现方法

    使用Docker将容器目录挂载到主机上的实现方法

    本文主要介绍了使用Docker将容器目录挂载到主机上的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • docker部署springBoot项目实操(docker是什么)

    docker部署springBoot项目实操(docker是什么)

    Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,这篇文章主要介绍了docker部署springBoot项目实操,需要的朋友可以参考下
    2025-03-03
  • Docker 实现浏览器里开发Android应用的功能

    Docker 实现浏览器里开发Android应用的功能

    这篇文章主要介绍了Docker 实现浏览器里开发Android应用的功能的相关资料,这里对布置环境做了详细的步骤,也许你能用到这样的功能,需要的朋友可以参考下
    2016-11-11
  • 如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

    如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

    本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到Nginx容器内,Nginx可以提供文件列表和下载功能,推荐使用Docker Compose来管理容器
    2025-03-03
  • 优化 Docker 镜像大小常见的方式

    优化 Docker 镜像大小常见的方式

    这篇文章主要介绍了如何优化 Docker 镜像大小,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下。
    2020-09-09
  • Docker如何查看镜像里的文件

    Docker如何查看镜像里的文件

    文章介绍了如何在开发过程中检查Docker镜像中的文件是否符合预期,步骤包括下载镜像、创建并运行临时容器查看内容,以及停止和删除临时容器
    2024-11-11

最新评论