4.18. KMM 固件支持
内核模块有时需要从文件系统中加载固件文件。KMM 支持将固件文件从 kmod 镜像复制到节点的文件系统。
在运行 modprobe
命令前,节点上的 .spec.moduleLoader.container.modprobe.firmwarePath
的内容会被复制到节点上的 /var/lib/firmware
路径中。
在运行 modprobe -r
命令之前,所有文件和空目录都会从该位置中删除,以便在 pod 终止时卸载内核模块。
4.18.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
对象。
-
通过应用
MachineConfig
CR,节点会自动重启。
4.18.2. 构建 kmod 镜像
流程
除了构建内核模块本身外,在构建器镜像中包含二进制固件:
FROM registry.redhat.io/ubi9/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/ubi9/ubi-minimal # Copy the kmod, install modprobe, run depmod COPY --from=builder /firmware /firmware
4.18.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/
。