第 19 章 使用设备管理器
19.1. 设备管理器的作用
设备管理器是一个技术预览功能。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需红帽技术预览功能支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview/。
设备管理器是一个 Kubelet 功能,它提供了一个使用 Kubelet 插件(称为 device plug-ins)公告专用节点硬件资源的机制。
任何供应商都可以实施设备插件来公告其专用硬件,而无需上游代码更改。
设备管理器将设备公告为外部资源。用户 pod 可以利用相同的限制/请求机制来使用设备管理器公告的设备,这一机制也用于请求任何其他扩展资源。
19.1.1. 注册
在启动时,设备插件通过在 /var/lib/kubelet/device-plugins/kubelet.sock 上调用 Register
将自身注册到设备管理器,再启动位于 /var/lib/kubelet/device-plugins/<plugin>.sock 的 gRPC 服务来服务设备管理器请求。
19.1.2. 设备发现和健康监控
在处理新的注册请求时,设备管理器会在设备插件服务中调用 ListAndWatch
远程过程调用 (RPC)。作为响应,Device Manger 通过 gRPC 流从插件中获取 设备 对象列表。设备管理器对流进行持续监控,以确认插件有没有新的更新。在插件一端,插件也会使流保持开放;只要任何设备的状态有所改变,就会通过相同的流传输连接将新设备列表发送到设备管理器。
19.1.3. 设备分配
在处理新的 pod 准入请求时,Kubelet 将请求的扩展资源
传递给设备管理器以进行设备分配。设备管理器在其数据库中检查,以验证是否存在对应的插件。如果插件存在并且有可分配的设备及本地缓存,则在该特定设备插件上调用 Allocate
RPC。
此外,设备插件也可以执行其他几个特定于设备的操作,如驱动程序安装、设备初始化和设备重置。这些功能视具体实现而异。