跳到主内容
快讯直播
AI智模界
AI 词典

K8s Device Plugin:GPU 为什么不能随便切

一句话定义:Kubernetes Device Plugin(设备插件)是 K8s 让节点把 GPU、FPGA、高速网卡等特殊硬件,以“扩展资源”的形式上报给 kubelet,并由调度器按数量分配的一套接口。

展开讲:K8s 默认只认识 CPU 和内存。CPU 像公共厨房的灶眼,可以按毫核切分,多个人轮流用,谁用多了还能被 cgroups 限制;GPU 更像一台专用仪器,通常必须整台预约,进门还要专门登记。Device Plugin 就是节点上的“仪器管理员”:它发现本机有几块 GPU、是否健康,通过 ListAndWatch 告诉 kubelet;kubelet 把这些设备加入节点的可分配资源。调度器看到 Pod 里写了 nvidia.com/gpu: 1,就找一个“还剩至少 1 块”的节点。Pod 落到节点后,kubelet 再调用插件的 Allocate 接口,把设备节点、驱动库、环境变量挂进容器。

为什么不能像 CPU 那样随便切、随便抢?

维度CPU/内存GPU(Device Plugin)
资源类型内置,可压缩扩展资源,按个数
切分毫核/份额,可超卖默认整数,不超卖
隔离cgroups 强制驱动/硬件,弱或依赖方案
调度感知请求/限制主要看数量,拓扑需额外组件
分配者kubelet/cgroupskubelet 调 Device Plugin

具体说:第一,资源模型不同。CPU 是内置可压缩资源,支持 requests/limits、超卖和份额;GPU 一般作为 extended resource(扩展资源),K8s 原生只支持整数计数,不能直接写 0.5 块。第二,隔离机制不同。CPU 有 cgroups 做强制隔离;GPU 的显存、算力隔离依赖驱动和硬件,原生 K8s 管不了。多个 Pod 共享一块卡,可能互相抢显存,甚至把对方挤崩。第三,调度器只知道数量,不知道显存利用率、温度、NUMA、NVLink 拓扑。所以“节点有卡”不等于“跑得最快”。第四,分配是两步:调度器选节点,设备插件真正发设备。插件没装好、驱动异常、设备不健康,都会让 Pod 卡住。

和相邻概念的区别:Device Plugin 不是 GPU 切分方案,也不是调度器本身。它只是“发现设备、上报设备、分配设备”的接口。真正把一块物理卡切成多份,要靠厂商方案,如 Multi-Instance GPU (MIG)、vGPU 或 time-slicing。GPU Operator 这类工具则负责装驱动、插件和监控组件。

对从业者的意义:在 K8s 里申请 GPU,通常写整数,并确保节点装了对应厂商插件;想共享,要选 MIG/vGPU/time-slicing,并接受隔离强弱不同。对普通人,这解释了为什么云上 GPU 常按整卡或实例卖、集群里 GPU 任务要排队——不是系统小气,而是硬件和 K8s 模型共同决定的。具体资源名与切分能力以厂商官方页面为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。