4.10. KMM 固件支持
内核模块有时需要从文件系统中加载固件文件。KMM 支持将固件文件从 ModuleLoader 镜像复制到节点的文件系统中。
在运行 modprobe 命令前,节点上的 .spec.moduleLoader.container.modprobe.firmwarePath 的内容会被复制到节点上的 /var/lib/firmware 路径中。
在运行 modprobe -r 命令之前,所有文件和空目录都会从该位置中删除,以便在 pod 终止时卸载内核模块。
其他资源
4.10.1. 在节点上配置查找路径
在 OpenShift Container Platform 节点上,固件的默认查找路径集合不包括 /var/lib/firmware 路径。
流程
使用 Machine Config Operator 创建包含
/var/lib/firmware路径的MachineConfig自定义资源 (CR):apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 99-worker-kernel-args-firmware-path spec: kernelArguments: - 'firmware_class.path=/var/lib/firmware'- 1
- 您可以根据您的需要配置标签。对于单节点 OpenShift,请使用
control-pane或master对象。
-
通过应用
MachineConfigCR,节点会自动重启。
其他资源
4.10.2. 构建 ModuleLoader 镜像
流程
除了构建内核模块本身外,在构建器镜像中包含二进制固件:
FROM registry.redhat.io/ubi8/ubi-minimal as builder # Build the kmod RUN ["mkdir", "/firmware"] RUN ["curl", "-o", "/firmware/firmware.bin", "https://artifacts.example.com/firmware.bin"] FROM registry.redhat.io/ubi8/ubi-minimal # Copy the kmod, install modprobe, run depmod COPY --from=builder /firmware /firmware
4.10.3. 调整模块资源
流程
在
Module自定义资源 (CR) 中设置.spec.moduleLoader.container.modprobe.firmwarePath:apiVersion: kmm.sigs.x-k8s.io/v1beta1 kind: Module metadata: name: my-kmod spec: moduleLoader: container: modprobe: moduleName: my-kmod # Required firmwarePath: /firmware 1- 1
- 可选:在节点上将
/firmware/*复制到/var/lib/firmware/。