设备管理器提供了一种机制,可以使用称为设备插件的插件来宣传专用节点硬件资源。
|
OpenShift Container Platform 支持设备插件 API,但设备插件容器由各个厂商支持。
|
设备管理器将设备宣传为**扩展资源**。用户 Pod 可以使用与请求任何其他**扩展资源**相同的**Limit/Request** 机制来使用设备管理器宣传的设备。
启动后,设备插件通过调用/var/lib/kubelet/device-plugins/kubelet.sock 上的 `Register` 向设备管理器注册自身,并在/var/lib/kubelet/device-plugins/<plugin>.sock 启动 gRPC 服务以服务设备管理器请求。
设备管理器在处理新的注册请求时,会在设备插件服务上调用 `ListAndWatch` 远程过程调用 (RPC)。作为响应,设备管理器通过 gRPC 流从插件获取**设备**对象的列表。设备管理器将继续监视流中的新更新,来自插件。在插件端,插件也将保持流打开,每当任何设备的状态发生变化时,新的设备列表都会通过相同的流连接发送到设备管理器。
在处理新的 Pod 准入请求时,Kubelet 将请求的 `Extended Resources` 传递给设备管理器以进行设备分配。设备管理器检查其数据库以验证是否存在相应的插件。如果插件存在并且存在可分配的空闲设备以及本地缓存,则会在该特定设备插件上调用 `Allocate` RPC。
此外,设备插件还可以执行其他一些特定于设备的操作,例如驱动程序安装、设备初始化和设备重置。这些功能因实现而异。