搜索

4.16. 第 1 天载入内核模块

download PDF

内核模块管理(KMM)通常是一个第 2 天 Operator。只有在 Linux (RHCOS) 服务器的完整初始化后才会加载内核模块。但是,在某些情况下,必须在早期阶段载入内核模块。第 1 天功能允许您在 Linux systemd 初始化阶段使用 Machine Config Operator (MCO)加载内核模块。

4.16.1. 第 1 天支持的用例

第 1 天功能支持有限数量的用例。主要用例是在 NetworkManager 服务初始化前允许加载树外(OOT)内核模块。它不支持在 initramfs 阶段载入内核模块。

以下是第 1 天功能所需的条件:

  • 内核模块没有在内核中载入。
  • in-tree 内核模块加载到内核中,但可以被卸载,并由 OOT 内核模块替代。这意味着 in-tree 模块没有被任何其他内核模块引用。
  • 为了使第 1 天功能正常工作,节点必须具有功能网络接口,即该接口的一个树内内核驱动程序。OOT 内核模块可以是网络驱动程序,它将替换功能网络驱动程序。

4.16.2. OOT 内核模块加载流

加载 out-of-tree (OOT) 内核模块会利用 Machine Config Operator (MCO)。流程序列如下:

流程

  1. MachineConfig 资源应用到现有的正在运行的集群。要识别需要更新的必要节点,您必须创建一个适当的 MachineConfigPool 资源。
  2. MCO 通过节点应用重启节点。在任何重启的节点上,部署了两个新的 systemd 服务: pull 服务和 load 服务。
  3. load 服务被配置为在 NetworkConfiguration 服务之前运行。该服务会尝试拉取预定义的内核模块镜像,然后使用该镜像卸载树内模块并加载 OOT 内核模块。
  4. pull 服务配置为在 NetworkManager 服务后运行。该服务检查预配置的内核模块镜像是否位于节点的文件系统中。如果是,该服务正常存在,服务器将继续引导过程。如果没有,它会将镜像拉取到节点上,并在之后重启该节点。

4.16.3. 内核模块镜像

第 1 天功能使用与第 2 天 KMM 构建相同的 DTK 的镜像。out-of-tree 内核模块应位于 /opt/lib/modules/${kernelVersion} 下。

其他资源

4.16.4. in-tree 模块替换

第 1 天功能始终尝试将树内内核模块替换为 OOT 版本。如果没有加载 in-tree 内核模块,则流不会受到影响;服务继续进行并加载 OOT 内核模块。

4.16.5. MCO yaml 创建

KMM 提供了一个 API,用于为第 1 天功能创建 MCO YAML 清单:

ProduceMachineConfig(machineConfigName, machineConfigPoolRef, kernelModuleImage, kernelModuleName string) (string, error)

返回的输出是要应用的 MCO YAML 清单的字符串表示。客户最多可应用此 YAML。

参数是:

machineConfigName
MCO YAML 清单的名称。此参数设置为 MCO YAML 清单元数据的 name 参数。
machineConfigPoolRef
用于识别目标节点的 MachineConfigPool 名称。
kernelModuleImage
包含 OOT 内核模块的容器镜像名称。
kernelModuleName
OOT 内核模块的名称。这个参数用于卸载 in-tree 内核模块(如果加载到内核),并加载 OOT 内核模块。

API 位于 KMM 源代码的 pkg/mcproducer 软件包下。KMM operator 不需要运行以使用第 1 天功能。您只需要将 pkg/mcproducer 软件包导入到其 operator/utility 代码中,调用 API,并将生成的 MCO YAML 应用到集群。

4.16.6. MachineConfigPool

MachineConfigPool 标识受应用的 MCO 影响的节点集合。

kind: MachineConfigPool
metadata:
  name: sfc
spec:
  machineConfigSelector: 1
    matchExpressions:
      - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker, sfc]}
  nodeSelector: 2
    matchLabels:
      node-role.kubernetes.io/sfc: ""
  paused: false
  maxUnavailable: 1
1
与 MachineConfig 中的标签匹配。
2
匹配节点上的标签。

OCP 集群中预定义的 MachineConfigPools

  • Worker :将集群中的所有 worker 节点目标
  • Master :将集群中的所有 master 节点目标

定义以下 MachineConfig 以 master MachineConfigPool 为目标:

metadata:
  labels:
    machineconfiguration.opensfhit.io/role: master

定义以下 MachineConfig 以 worker MachineConfigPool 为目标:

metadata:
  labels:
    machineconfiguration.opensfhit.io/role: worker
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.