一般所有的 Device Plugin 实现最终都会以 Pod 形式运行在 k8s 集群中,又因为需要管理所有节点,因此都会以 DaemonSet 方式部署。 device plugin 启动之后第一步就是向 Kubelet 注册,让 Kubelet 知道有一个新的设备接入了。 为了能够调用 Kubelet 的 Register 接口,Device Plugin Pod 会将宿主机上的 kubelet.sock 文...
本文主要分析 k8s 中的 device-plugin 机制工作原理,并通过实现一个简单的 device-plugin 来加深理解。 1. 背景 默认情况下,k8s 中的 Pod 只能申请 CPU 和 Memory 这两种资源,就像下面这样: resources: requests: memory: "1024Mi" cpu: "100m" limits: memory: "2048Mi" cpu: "200m" 随着AI 热度越来...
对于每一个硬件设备,都需要它所对应的 Device Plugin 进行管理,这些 Device Plugin 以客户端的身份通过 GRPC 的方式对 kubelet 中的 Device Plugin Manager 进行连接,并且将自己监听的 Unis socket api 的版本号和设备名称比如 GPU,上报给kubelet。 我们来看一下 Device Plugin 资源上报的整个流程。总的来说,整个...
Kubernetes Device Plugin 是 Kubernetes 中的一种标准化资源扩展机制,旨在将特殊硬件(如 GPU、FPGA)作为可调度资源集成到 Kubernetes 的资源管理框架中。 对于NVIDIA GPU,Device Plugin 充当了连接 Kubernetes 调度器与底层 GPU 硬件的桥梁,负责发现、注册和管理 GPU 资源,使工作负载能够无缝利用 GPU 提供的计算能力。
Device Plugin 能够与 Kubernetes 调度器协同工作,根据 Pod 的资源需求高效调度 GPU 资源,避免资源争抢或浪费。 —02— Kubernetes Device Plugin 实现原理解析 当使用 Kubernetes 时,用户通常希望能够在 Pod 对象中直接声明所需的 GPU 资源,并通过 Kubernetes 的调度器(kube-scheduler)自动完成所需 GPU 的分配。例如...
Device Plugin工作原理 Device Plugin实际上是一个gPRC 接口,需要实现 ListAndWatch() 和 Allocate() 等方法,并监听 gRPC Server 的 Unix Socket 在 /var/lib/kubelet/device-plugins/ 目录中,如 /var/lib/kubelet/device-plugins/nvidiaGPU.sock。在实现 Device 插件时需要注意: ...
k8s-device-plugin内部实现原理图 在Kubernetes如何通过Device Plugins来使用NVIDIA GPU中,对NVIDIA/k8s-device-plugin的工作原理进行了深入分析,为了方便我们在这再次贴出其内部实现原理图: PreStartContainer和GetDevicePluginOptions两个接口,在NVIDIA/k8s-device-plugin中可以忽略,可以认为是空实现。我们主要关注ListAndWat...
从Nvidia 的 git repo 下去下载 Device Plugin 的部署声明文件,并且通过 kubectl create 命令进行部署。 这里Device Plugin 是以 deamonset 的方式进行部署的。这样我们就知道,如果需要排查一个 Kubernetes 节点无法调度 GPU 应用的问题,需要从这些模块开始入手,比如我要查看一下 Device Plugin 的日志,Nvidia 的 runC...
第二步是服务启动,Device Plugin 会启动一个 GRPC 的 server。在此之后 Device Plugin 一直以这个服务器的身份提供服务让 kubelet 来访问,而监听地址和提供 API 的版本就已经在第一步完成了; 第三步,当该 GRPC server 启动之后,kubelet 会建立一个到 Device Plugin 的 ListAndWatch 的长连接, 用来发现设备 ID...
第三步是部署 Nvidia Device Plugin 从Nvidia 的 git repo 下去下载 Device Plugin 的部署声明文件,并且通过 kubectl create 命令进行部署。 这里Device Plugin 是以 deamonset 的方式进行部署的。这样我们就知道,如果需要排查一个 Kubernetes 节点无法调度 GPU 应用的问题,需要从这些模块开始入手,比如我要查看一下 De...