2)device-plugin 启动后,通过 kubelet.sock 调用 Register 接口,向 Kubelet 进行注册,注册信息包括 device plugin 的 unix socket,API Version,ResourceName 3)注册成功后,Kubelet 通过 device-plugin 的unix socket向 device plugin 调用 ListAndWatch, 获取当前节点上的资源 4)Kubelet 向api-server更新节点状态来记...
注册成功后,kubelet 就会通过 Device Plugin 内部自己开的 socket(比如/var/lib/kubelet/device-plugins/nvidia.sock),去调用ListAndWatch了解 GPU 列表,并在有容器需要 GPU 时调用Allocate协商如何设置容器环境变量、挂载、等信息。 对照代码,这个流程最关键的函数有两类: Device Plugin 端:Register(...)(把自己注...
2、使用 Device Plugin 自动维护 更常见和推荐的方式是通过 Device Plugin 来完成 GPU 资源的自动管理。在 Kubernetes 中,所有硬件资源(如 GPU、NIC、TPU 等)的发现、报告和分配通常由 Device Plugin 统一管理。 Device Plugin 会运行在每个节点上,自动检测硬件资源的类型和数量,并通过 Kubernetes API 动态更新节点...
Device Plugin工作原理 Device Plugin实际上是一个gPRC 接口,需要实现 ListAndWatch() 和 Allocate() 等方法,并监听 gRPC Server 的 Unix Socket 在 /var/lib/kubelet/device-plugins/ 目录中,如 /var/lib/kubelet/device-plugins/nvidiaGPU.sock。在实现 Device 插件时需要注意: 插件启动时,需要通过 /var/lib/...
k8s-device-plugin内部实现原理图 在Kubernetes如何通过Device Plugins来使用NVIDIA GPU中,对NVIDIA/k8s-device-plugin的工作原理进行了深入分析,为了方便我们在这再次贴出其内部实现原理图: PreStartContainer和GetDevicePluginOptions两个接口,在NVIDIA/k8s-device-plugin中可以忽略,可以认为是空实现。我们主要关注ListAndWat...
device-plugin 使用的代码解析 我们从创建pod的整个流程中一步步解析代码执行: 创建带特殊资源设备的pod; 调度器从cache中选择满足要求的node; node收到ADD POD, 对pod执行admit方法进行可运行的判断。 kubelet初始化时增加了一个admitHandler: ...
1.kubelet通过对应的Device Plugin收集本机的数据仅仅是设备ID列表信息,然后上报给API Server. kubelet上报给API Server的数据仅仅是一个设备的总数 这个设备名称和总数信息会缓存到Node的status列中 2.在pod中指定需要的设备名称和数量后 调度器会把Pod和Node进行绑定 同时减少对应Node中status列设备对应的数量(status...
"deviceIDs": ["101d"] } } ] } # kubectl create -f k8s-rdma-shared-dev-plugin-config-map.yaml configmap/rdma-devices created 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.