当前位置: 首页 > ai >正文

Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

目录

Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

一、为什么 containerd 是趋势?

二、目标

三、前提条件

四、方式一:containerd + nvidia-container-toolkit(基础方式)

1️⃣ 安装 NVIDIA Container Toolkit

2️⃣ 修改 containerd 配置文件

3️⃣ 重启 containerd 服务

4️⃣ 安装 Kubernetes Device Plugin(GPU 插件)

5️⃣ 验证 GPU 使用

五、方式二:使用 NVIDIA GPU Operator(推荐)

1️⃣ 安装 Operator Lifecycle Manager(OLM)

2️⃣ 安装 NVIDIA GPU Operator

3️⃣ 查看 GPU Operator 组件运行情况

4️⃣ 测试 Pod 是否能调度 GPU

六、问题排查建议

七、总结


Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

本文详细介绍在使用 containerd 作为容器运行时 的 Kubernetes 集群中,如何配置 NVIDIA GPU 支持,包括两种方式:

  • 使用 nvidia-container-toolkit + device plugin 实现基础 GPU 支持

  • 使用 NVIDIA GPU Operator 实现自动化驱动与插件部署


一、为什么 containerd 是趋势?

Kubernetes 从 1.20 开始默认不再支持 dockershim,主流发行版(如 kubeadm、k3s、OpenShift)都逐渐转向使用 containerd 或 CRI-O。与 Docker 相比,containerd 更轻量、启动更快,并对 CRI 接口支持原生。


二、目标

  • 在 containerd 环境中启用 GPU 支持

  • 支持 Kubernetes 使用 GPU 资源调度和运行

  • 实现 AI 推理/训练等任务运行

  • 可选:通过 GPU Operator 自动完成驱动+插件部署


三、前提条件

  • Ubuntu 18.04/20.04/22.04 系统(CentOS 也可)

  • 安装 NVIDIA 驱动(nvidia-smi 正常工作)

  • Kubernetes 集群已安装,容器运行时为 containerd(可用 crictl info 验证)

  • 节点具备 NVIDIA GPU 硬件


四、方式一:containerd + nvidia-container-toolkit(基础方式)

1️⃣ 安装 NVIDIA Container Toolkit

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

2️⃣ 修改 containerd 配置文件

生成默认配置:

sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null

添加 GPU 运行时支持:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]runtime_type = "io.containerd.runc.v2"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]BinaryName = "/usr/bin/nvidia-container-runtime"

可选设置默认运行时(非必须):

[plugins."io.containerd.grpc.v1.cri".containerd]default_runtime_name = "nvidia"

3️⃣ 重启 containerd 服务

sudo systemctl restart containerd

4️⃣ 安装 Kubernetes Device Plugin(GPU 插件)

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml

5️⃣ 验证 GPU 使用

apiVersion: v1
kind: Pod
metadata:name: gpu-test
spec:containers:- name: cudaimage: nvidia/cuda:12.8.1-baseresources:limits:nvidia.com/gpu: 1command: ["nvidia-smi"]

部署并查看日志:

kubectl apply -f gpu-test.yaml
kubectl logs gpu-test

五、方式二:使用 NVIDIA GPU Operator(推荐)

GPU Operator 是 NVIDIA 提供的 全自动化部署解决方案,支持自动完成:

  • 驱动安装(包含 DKMS 模块编译)

  • device plugin、DCGM、NCCL 插件部署

  • 实时健康监控(dcgm-exporter)

  • 容器内自动注入运行时


1️⃣ 安装 Operator Lifecycle Manager(OLM)

kubectl create -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/crds.yaml
kubectl create -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/olm.yaml

2️⃣ 安装 NVIDIA GPU Operator

kubectl create namespace gpu-operator
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/gpu-operator/main/deployments/gpu-operator.yaml -n gpu-operator

3️⃣ 查看 GPU Operator 组件运行情况

kubectl get pods -n gpu-operator

所有组件 Running 表示部署成功。会自动创建如下组件:

  • 驱动 DaemonSet

  • device plugin

  • validation webhook

  • DCGM exporter


4️⃣ 测试 Pod 是否能调度 GPU

apiVersion: v1
kind: Pod
metadata:name: gpu-operator-test
spec:containers:- name: cudaimage: nvidia/cuda:12.8.1-baseresources:limits:nvidia.com/gpu: 1command: ["nvidia-smi"]

六、问题排查建议

问题原因与解决办法
nvidia-smi 无法使用NVIDIA 驱动未安装或损坏
Pod 报 nvidia.com/gpu 不可分配device plugin 未正常运行 / 节点无 GPU
镜像拉取失败Docker Hub 被墙,建议配置 containerd 的 hosts.toml 使用加速器
Operator 安装失败Kubernetes 版本过旧 / OLM 安装不全

七、总结

对比项containerd + toolkit 手动部署GPU Operator 自动部署
安装复杂度中等(需配置 containerd + plugin)简单(自动完成所有驱动与插件安装)
可控性更自由,可自定义插件版本自动化,适合标准化部署
推荐适用场景内部集群测试、定制运行时企业生产环境、大规模 GPU 节点管理

如果你希望构建一套可重复部署的 GPU 支持方案,GPU Operator 是首选。如果只想在已有 containerd 集群上做最小化改造,nvidia-container-toolkit 同样高效可靠。


如果你需要完整的 config.toml 示例或 Operator CR 配置,我可以为你补充。是否需要?

http://www.xdnf.cn/news/5159.html

相关文章:

  • Eclipse 插件开发 6 右键菜单
  • 从 JMS 到 ActiveMQ:API 设计与扩展机制分析(三)
  • 单脉冲前视成像多目标分辨算法——论文阅读
  • stm32之IIC
  • 基于STM32的居家环境监测报警Proteus仿真+程序设计+设计报告+讲解视频
  • 利用多AI协作实现AI编辑器高效开发:创新架构与实践基本构想
  • DeepSeek 实现趣味心理测试应用开发教程
  • JAVA自动装箱拆箱
  • 车载电子电器架构 --- 汽车网关概述
  • 【计算机视觉】OpenCV实战项目:Athlete-Pose-Detection 运动员姿态检测系统:基于OpenCV的实时运动分析技术
  • [面试]SoC验证工程师面试常见问题(五)TLM通信篇
  • 引言:Client Hello 为何是 HTTPS 安全的核心?
  • 前端HTMX技术详细解释
  • 第十七次博客打卡
  • AZScreenRecorder最新版:功能强大、操作简便的手机录屏软件
  • 网络编程套接字
  • [白话文] 从百草园RLHF到三味书屋DPO
  • 全栈开发实战:FastAPI + React + MongoDB 构建现代Web应用
  • MCP协议:大模型与外部工具交互的标准化创新方案
  • 从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果
  • SpringBoot框架开发网络安全科普系统开发实现
  • 分布式事务快速入门
  • 小程序多线程实战
  • 功能齐全的菜谱管理器Tamari
  • [论文阅读]BadPrompt: Backdoor Attacks on Continuous Prompts
  • 23、Next.js:时空传送门——React 19 全栈框架
  • window 显示驱动开发-线性伸缩空间段
  • 简单网络交换、路由二
  • JavaWeb:JDBC
  • 关于ffmpeg的简介和使用总结