4.7. 使用树外模块替换树内模块
您可以使用内核模块管理(KMM)构建可按需载入或卸载到内核的内核模块。这些模块可以在不需要重启系统的情况下扩展内核的功能。模块可以配置为内置或动态加载。
动态加载的模块包括树内模块和树外(OOT)模块。in-tree 模块是 Linux 内核树的内部,即它们已经是内核的一部分。树外模块是 Linux 内核树的外部。它们通常是为开发和测试目的编写的,例如测试树级或处理不兼容的内核模块的新版本。
由 KMM 加载的一些模块可能会替换节点上已经载入的树内模块。要在载入模块前卸载树内模块,请将 .spec.moduleLoader.container.inTreeModulesToRemove 字段设置为您要卸载的模块。以下示例演示了所有内核映射的模块替换:
在本例中,moduleLoader pod 使用 inTreeModulesToRemove 在 moduleLoader 镜像加载 mod_a 前卸载 in-tree mod_a 和 mod_b。当 moduleLoader`pod 被终止,`mod_a 被卸载,则 mod_b 不会被再次加载。
以下是针对特定内核映射的模块替换示例:
4.7.1. 模块 CR 示例 复制链接链接已复制到粘贴板!
以下是一个注解的 Module 示例:
- 1 1 1
- 必需。
- 2
- 可选。
- 3
- 可选:将此路径的内容复制到
kmm-operator-manager-config配置映射的worker.setFirmwareClassPath(预设置为/var/lib/firmware)中指定的路径中。此操作在调用modprobe前进行,以插入内核模块。 - 4
- 可选。
- 5
- 至少需要一个内核项。
- 6
- 对于运行与正则表达式匹配的内核的每个节点,KMM 会检查是否包含标签或摘要。如果您在容器镜像中没有指定标签或摘要,则验证 Webhook 会返回错误,且不会应用模块。
- 7
- 对于任何其他内核,使用
my-kmodConfigMap 中的 Dockerfile 构建镜像。 - 8
- 包含客户的 kmod 的容器镜像。此容器应包含
cp二进制文件。 - 9
- 可选。
- 10
- 可选:
some-kubernetes-secret的值可以从位于/run/secrets/some-kubernetes-secret的构建环境中获取。 - 11
- 此字段无效。在 kmod 镜像中构建 kmod 镜像或签名 kmod 时,您可能需要从提供由不可信证书颁发机构 (CA) 签名的证书的 registry 中拉取基础镜像。要让 KMM 信任该 CA,还必须通过替换集群的 CA 捆绑包来信任新的 CA。
请参阅"附加资源"以了解如何替换集群的 CA 捆绑包。
- 12
- 可选:避免使用此参数。如果设置为
true,构建将在使用普通 HTTP 在 DockerfileFROM指令中拉取镜像时跳过任何 TLS 服务器证书验证。 - 13
- 必需。
- 14
- 必需:包含带有密钥"证书"的公钥的 secret。
- 15
- 必需:包含带有密钥"密钥"的私有 secureboot 密钥的 secret。
- 16
- 可选:避免使用此参数。如果设置为
true,则允许 KMM 检查容器镜像是否已使用普通 HTTP。 - 17
- 可选:避免使用此参数。如果设置为
true,KMM 会在检查容器镜像是否已存在时跳过任何 TLS 服务器证书验证。 - 18
- 可选。
- 19
- 可选。
- 20
- 必需:如果存在设备插件部分。
- 21
- 可选。
- 22
- 可选。
- 23
- 可选。
- 24
- 可选:用于拉取模块加载程序和设备插件镜像。