搜索

4.5. 内核模块部署

download PDF

内核模块管理 (KMM) 监控集群中的 NodeModule 资源,以确定是否应该从节点上载入内核模块。

要有资格获得模块,节点必须包含以下内容:

  • 与模块的 .spec.selector 字段匹配的标签。
  • 与模块的 .spec.moduleLoader.container.kernelMappings 字段中某一项匹配的内核版本。
  • 如果在模块中配置了排序升级 (ordered_upgrade.md),则标签与 .spec.moduleLoader.container.version 字段匹配。

当 KMM 将节点与在 Module 资源中配置的所需状态协调时,它会在目标节点上创建 worker pod 以运行必要的操作。KMM Operator 监控 pod 的结果并记录信息。Operator 使用此信息在模块成功加载时标记 Node 对象,并在配置后运行设备插件。

worker pod 运行 KMM worker 二进制文件,它执行以下任务:

  • 拉取 Module 资源中配置的 kmod 镜像。kmod 镜像是包含 .ko 文件的标准 OCI 镜像。
  • 在 pod 文件系统中提取镜像。
  • 使用指定的参数运行 modprobe,以执行必要的操作。

4.5.1. 模块自定义资源定义

Module 自定义资源定义 (CRD) 代表可通过 kmod 镜像在所有或选择集群中载入的内核模块。Module 自定义资源 (CR) 指定一个或多个兼容它的内核版本,以及一个节点选择器。

Module 资源的兼容版本列在 .spec.moduleLoader.container.kernelMappings 下。内核映射可以与 literal 版本匹配,也可以使用 regexp 同时匹配其中的许多版本。

Module 资源的协调循环运行以下命令:

  1. 列出与 .spec.selector 匹配的所有节点。
  2. 构建在这些节点上运行的所有内核版本。
  3. 对于每个内核版本:

    1. 进入 .spec.moduleLoader.container.kernelMappings,并找到适当的容器镜像名称。如果内核映射定义了 buildsign,且容器镜像尚不存在,请根据需要运行构建、签名 pod 或两者。
    2. 创建 worker pod 以拉取上一步中确定的容器镜像并运行 modprobe
    3. 如果定义了 .spec.devicePlugin,请使用 .spec.devicePlugin.container 中指定的配置创建一个设备插件守护进程集。
  4. 在以下运行 garbage-collect

    1. 过时的设备插件 DaemonSet 不以任何节点为目标。
    2. 成功构建 pod。
    3. 成功签名 pod。

4.5.2. 在内核模块之间设置软依赖项

有些配置要求以特定顺序加载多个内核模块才能正常工作,即使模块不会直接依赖于通过符号相互依赖。它们称为软依赖项。depmod 通常不知道这些依赖项,它们不会出现在它生成的文件中。例如,如果 mod_a 有一个软依赖项 mod_bmodprobe mod_a 不会加载 mod_b

您可以使用 modulesLoadingOrder 字段在 Module 自定义资源定义(CRD)中声明软依赖项来解决这些情况。

# ...
spec:
  moduleLoader:
    container:
      modprobe:
        moduleName: mod_a
        dirName: /opt
        firmwarePath: /firmware
        parameters:
          - param=1
        modulesLoadingOrder:
          - mod_a
          - mod_b

在上面的配置中,worker pod 首先会尝试在从 kmod 镜像加载 mod_a 前卸载 in-tree mod_b。当 worker pod 终止并卸载 mod_a 时,mod_b 不会再次加载。

注意

列表中的第一个值(最后加载)必须与 moduleName 等效。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.