Kubelet
Kubelet
Device Plugin
(DaemonSet Pod)
Device Plugin
(DaemonSet Pod)
API Server
API Server
kube-scheduler
kube-scheduler
用户
用户
节点启动：Kubelet 准备注册服务
① 启动 Registration gRPC 服务
创建 kubelet.sock（Unix Socket）
路径：/var/lib/kubelet/device-plugins/kubelet.sock
Device Plugin 启动并注册
② Device Plugin Pod 启动
将宿主机 kubelet.sock 挂载到容器内
③ Register(endpoint, version, resourceName)
通过 kubelet.sock 调用
注册成功
设备发现与资源上报
④ ListAndWatch()
通过 Device Plugin 的 Unix Socket 调用
返回设备列表 [{ID, Health}, ...]
（持续监听设备上下线变化）
⑤ 更新 Node 状态
Node.status.capacity[nvidia.com/gpu] = 1
用户提交 Pod
⑥ 创建 Pod
(resources.limits: nvidia.com/gpu: 1)
通知待调度 Pod
⑦ 筛选满足资源要求的节点
绑定结果（写入 Pod.spec.nodeName）
设备分配与容器启动
通知本节点有 Pod 待启动
⑧ Allocate(deviceIDs)
返回分配结果
（设备文件路径、环境变量等）
⑨ 启动容器，注入设备信息
挂载 /dev/nvidia0
注入 NVIDIA_VISIBLE_DEVICES