Kubernetes通过Device Plugin机制实现GPU资源管理,其核心流程可分为四个阶段:
- 设备发现与上报
- NVIDIA GPU Device Plugin通过ListAndWatch API定期向kubelet汇报节点上的GPU设备列表(如GPU0/1/2)
- kubelet将GPU数量(nvidia.com/gpu:3)以Extended Resource形式通过心跳上报给API Server
- 资源调度
- Pod在limits字段声明nvidia.com/gpu需求后,调度器根据节点GPU缓存进行匹配
- 调度成功后对应kubelet会持有GPU分配的元数据
- 设备分配
- kubelet通过Allocate()请求向Device Plugin传递分配的GPU ID
- 插件根据ID查询设备路径和驱动目录(如通过nvidia-docker获取信息)
- 容器注入
- kubelet将设备信息注入CRI请求,由运行时(如Docker)完成GPU设备的容器挂载
- 最终容器获得可见的GPU设备和驱动目录访问权限
整个流程实现了从硬件抽象到容器调度的自动化管理,用户仅需声明资源需求即可使用GPU能力。