打通任督二脉 - Device Plugin 让 k8s “看见” GPU

发布于:2025-04-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

打通任督二脉 - Device Plugin 让 k8s “看见” GPU

上一篇咱们聊了为啥要把 GPU 这个“计算猛兽”拉进 Kubernetes (k8s) 这个“智能调度中心”。目标很美好:提高效率、简化管理、弹性伸缩。但现实是,k8s 天生并不认识 GPU 这位“新朋友”。就像你的电脑操作系统,默认只认识 CPU、内存、硬盘这些“老伙计”,你要插个新奇特的硬件,总得装个驱动或者做点啥,系统才能认出来,对吧?

那么,k8s 是怎么做到“认识”并管理像 GPU 这样的非原生硬件资源的呢?答案就是今天要隆重介绍的 Device Plugin 框架

什么是 Device Plugin 框架?

你可以把 k8s 的 Device Plugin 框架想象成一个开放的“硬件接入标准”,有点像电脑上的 USB 接口标准。

  • 类比:有了 USB 标准,无论是鼠标、键盘、U 盘还是摄像头,只要硬件厂商按照这个标准来设计接口,你的电脑就能识别并使用它们,而不需要电脑厂商为市面上每一款新硬件都单独修改操作系统。

k8s 的 Device Plugin 框架也是类似:

  1. 标准接口:它定义了一套标准的通信协议(基于 gRPC),让外部程序(就是所谓的 Device Plugin)可以和 kubelet(运行在每个 k8s 节点上的“管家进程”)对话。
  2. 硬件厂商负责:硬件厂商(比如 NVIDIA、Intel、AMD 等)或者社区可以为他们的特定硬件开发一个 Device Plugin 程序。
  3. 解耦核心:这样做的好处是,k8s 的核心代码不需要为每一种新硬件都做修改,保持了核心的简洁和稳定。想支持新硬件?开发一个对应的 Device Plugin 就行了!

工作流程简化版:

  • 一个特定硬件的 Device Plugin 程序(通常打包在容器里)在安装了该硬件的 k8s 节点上运行起来。
  • 它会侦测节点上存在的自家硬件(比如 NVIDIA Device Plugin 会去找 NVIDIA GPU 卡)。
  • 然后,它会主动连接到该节点上的 kubelet 进程。
  • 通过标准的 gRPC 接口,它向 kubelet 注册自己,并报告:“嘿,kubelet 老兄,我在这儿发现了 X 块 Y 型号的硬件(比如 nvidia.com/gpu: 2),以后你要分配这种资源就找我哈!”
  • kubelet 收到信息后,会更新节点的状态,并将这些新发现的“可分配资源”上报k8s 的大脑——API Server。

这样一来,整个集群就都知道这个节点上有多少块可用的特定硬件资源了。

明星选手:NVIDIA Device Plugin

既然咱们主要关注 GPU,那最常打交道的自然就是 NVIDIA Device Plugin 了。这是 NVIDIA 官方提供的,专门用来让 k8s 识别和管理 NVIDIA GPU 的插件。

为了确保每个安装了 NVIDIA GPU 的节点都能被 k8s 识别,这个插件通常会以 DaemonSet 的形式部署。

  • 小科普 DaemonSet:它是 k8s 的一种工作负载类型,能确保在集群中的每一个(或指定的某一些)节点上都运行一个 Pod 副本。非常适合用来部署节点级别的监控、日志收集或者像咱们 Device Plugin 这样的“常驻代表”。

实战:部署 NVIDIA Device Plugin

好了,理论讲得差不多,咱们来看看实际操作。部署 NVIDIA Device Plugin 通常就是向 k8s 集群应


网站公告

今日签到

点亮在社区的每一天
去签到