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.mzph.cn/bicheng/80500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 2918. 数组的最小相等和 中等

给你两个由正整数和 0 组成的数组 nums1 和 nums2 。 你必须将两个数组中的 所有 0 替换为 严格 正整数,并且满足两个数组中所有元素的和 相等 。 返回 最小 相等和 ,如果无法使两数组相等,则返回 -1 。 示例 1: 输入&#xf…

猿人学第十二题-js入门

1. 链接 https://match.yuanrenxue.cn/match/12 2. 抓包分析 2.1. m参数 通过观察,只有m参数要解决: 3. 逆向分析 3.1. 跟栈 直接跟栈吧,一下就出结果了: 可以看到m其实很简单,就是固定字符串 当前页数&#xf…

双系统电脑中如何把ubuntu装进外接移动固态硬盘

电脑:win11 ubuntu22.04 实体机 虚拟机:VMware17 镜像文件:ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法,网上很多教程 二、磁盘分区 1.在笔…

202535| Kafka架构与重要概念+幂等性+事务

好的!以下是关于 Kafka 架构 以及其 重要概念 的详细介绍,结合 Mermaid 图形 和 表格,帮助你更好地理解各个概念的关系和作用。 Kafka 架构与重要概念 Kafka 是一个分布式消息系统,广泛应用于日志收集、流处理、事件驱动架构等场…

从0开始学习大模型--Day05--理解prompt工程

提示词工程原理 N-gram:通过统计,计算N个词共同出现的概率,从而预测下一个词是什么。 深度学习模型:有多层神经网络组成,可以自动从数据中学习特征,让模型通过不断地自我学习不断成长,直到模型…

Amazing晶焱科技:系统级 EOS 测试方法 - System Level EOS Testing Method

系统上常见的EOS测试端口以AC电源、电话线(RJ11)、同轴电缆(coaxial cable)以及以太网络(RJ45)最常见,这些端口因有机会布线至户外的关系,受到EOS/Surge冲击的几率也大大提升。因此电…

数据结构—(概述)

目录 一 数据结构,相关概念 1. 数据结构: 2. 数据(Data): 3. 数据元素(Data Element): 4. 数据项: 5. 数据对象(Data Object): 6. 容器(container): 7. 结点(Node)&#xff…

Vue 两种导航方式

目录 一、声明式导航 二、编程式导航 三、两句话总结 一、声明式导航 1. 传参跳转&#xff1a; <router-link :to"/user?nameCHEEMS&id114514">Query传参 </router-link><router-link :to"/user?参数名1参数值1&参数名2参数值2&a…

QTableWidget实现多级表头、表头冻结效果

最终效果&#xff1a; 实现思路&#xff1a;如果只用一个表格的话写起来比较麻烦&#xff0c;可以考虑使用两个QTableWidget组合&#xff0c;把复杂的表头一个用QTableWidget显示&#xff0c;其他内容用另一个QTableWidget。 #include "mainwindow.h" #include &qu…

2025年客运从业资格证备考单选练习题

客运从业资格证备考单选练习题 1、从事道路旅客运输活动时&#xff0c;应当采取必要措施保证旅客的人身和财产安全&#xff0c;发生紧急情况时&#xff0c;首先应&#xff08; &#xff09;。 A. 抢救财产 B. 抢救伤员 C. 向公司汇报 答案&#xff1a;B 解析&#xff1a;…

python打卡day21

常见的降维算法 知识点回顾&#xff1a; LDA线性判别PCA主成分分析t-sne降维 之前学了特征降维的两个思路&#xff0c;特征筛选&#xff08;如树模型重要性、方差筛选&#xff09;和特征组合&#xff08;如SVD/PCA&#xff09;。 现在引入特征降维的另一种分类&#xff1a;无/有…

专业级软件卸载工具:免费使用,彻底卸载无残留!

在数字生活节奏日益加快的今天&#xff0c;我们的电脑就像每天都在"吃进"各种软件。但您是否注意到&#xff0c;那些看似消失的程序其实悄悄留下了大量冗余文件&#xff1f;就像厨房角落里积攒的调味瓶空罐&#xff0c;日积月累就会让系统变得"消化不良"。…

【Linux】基础 IO(一)

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux——基础IO主要包括&#xff1a; 文件基本概念回顾 C文件的操作介绍系统关于文件的基本操作 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 …

Java 原生实现代码沙箱之Java 程序安全控制(OJ判题系统第2期)——设计思路、实现步骤、代码实现

在看这一期之前&#xff0c;需要先看上一期的文章&#xff1a; Java 原生实现代码沙箱&#xff08;OJ判题系统第1期&#xff09;——设计思路、实现步骤、代码实现-CSDN博客 Java 程序可能出现的异常情况 1、执行超时 占用时间资源&#xff0c;导致程序卡死&#xff0c;不释…

常见的降维算法

作业&#xff1a; 自由作业&#xff1a;探索下什么时候用到降维&#xff1f;降维的主要应用&#xff1f;或者让ai给你出题&#xff0c;群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。 一、什么时候用到降维&#xff1f; 降维通常…

理解Yocto项目中`${D}`作为模拟目标系统根文件结构的临时目录

在Yocto项目中,理解${D}作为模拟目标系统根文件结构的临时目录,可以通过以下具象化的比喻和结构解析来把握其核心逻辑: 一、沙盒模型:构建系统的“实验场地” ${D}的作用类似于建筑师在施工前搭建的1:1实体模型。它完全模仿目标设备的文件系统布局(如/usr/bin、/etc等目录…

第十课认识约数

课堂学习&#xff1a; 情景引入&#xff1a; 今天我们来认识一下数学中的约数关系&#xff0c;上节课我们了解完倍数之后就已经对约数有了基本的概念&#xff01; 我们按照是否有余数&#xff0c;可以把他们分成两类 在整数除法中&#xff0c;如果商是整数没有余数&#x…

【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用

目录 一、getters 二、 mapState 三、 mapGetters 四、 mapMutations 五、 mapActions 学到这儿来个小总结&#xff1a;四个map方法的使用 总结不易~ 本章节对我有很大的收获&#xff0c; 希望对你也是&#xff01;&#xff01;&#xff01; 本节素材已上传至Gitee&…

html object标签介绍(用于嵌入外部资源通用标签)(已不推荐使用deprecated,建议使用img、video、audio标签)

文章目录 HTML <object> 标签详解基本语法与核心属性关键属性解析1. **data**2. **type**3. **width & height**4. **name** 嵌入不同类型的资源1. **嵌入图像**2. **嵌入音频**3. **嵌入视频**4. **嵌入 PDF** 参数传递与回退内容**参数&#xff08;<param>&a…

警备,TRO风向预警,In-N-Out Burgers维权风暴来袭

本案是TME律所代理的5月首案&#xff0c;传奇连锁快餐品牌In-N-Out Burgers委托维权&#xff01; 案件基本情况&#xff1a; 起诉时间&#xff1a;2025-5-1 案件号&#xff1a;25-cv-04767 品牌&#xff1a;In-N-Out 原告&#xff1a;In-N-Out Burgers 原告律所&#xff…