4.13. 第 1 天载入内核模块
内核模块管理(KMM)通常是一个第 2 天 Operator。只有在 Linux (RHCOS) 服务器的完整初始化后才会加载内核模块。但是,在某些情况下,必须在早期阶段载入内核模块。第 1 天功能允许您在 Linux systemd
初始化阶段使用 Machine Config Operator (MCO)加载内核模块。
4.13.1. 第 1 天支持的用例
第 1 天功能支持有限数量的用例。主要用例是在 NetworkManager 服务初始化前允许加载树外(OOT)内核模块。它不支持在 initramfs
阶段载入内核模块。
以下是第 1 天功能所需的条件:
- 内核模块没有在内核中载入。
- in-tree 内核模块加载到内核中,但可以被卸载,并由 OOT 内核模块替代。这意味着 in-tree 模块没有被任何其他内核模块引用。
- 为了使第 1 天功能正常工作,节点必须具有功能网络接口,即该接口的一个树内内核驱动程序。OOT 内核模块可以是网络驱动程序,它将替换功能网络驱动程序。
4.13.2. OOT 内核模块加载流
加载 out-of-tree (OOT) 内核模块会利用 Machine Config Operator (MCO)。流程序列如下:
流程
-
将
MachineConfig
资源应用到现有的正在运行的集群。要识别需要更新的必要节点,您必须创建一个适当的MachineConfigPool
资源。 -
MCO 通过节点应用重启节点。在任何重启的节点上,部署了两个新的
systemd
服务:pull
服务和load
服务。 -
load
服务被配置为在NetworkConfiguration
服务之前运行。该服务会尝试拉取预定义的内核模块镜像,然后使用该镜像卸载树内模块并加载 OOT 内核模块。 -
pull
服务配置为在 NetworkManager 服务后运行。该服务检查预配置的内核模块镜像是否位于节点的文件系统中。如果是,该服务正常存在,服务器将继续引导过程。如果没有,它会将镜像拉取到节点上,并在之后重启该节点。
4.13.3. 内核模块镜像
第 1 天功能使用与第 2 天 KMM 构建相同的 DTK 的镜像。out-of-tree 内核模块应位于 /opt/lib/modules/${kernelVersion}
下。
其他资源
4.13.4. in-tree 模块替换
第 1 天功能始终尝试将树内内核模块替换为 OOT 版本。如果没有加载 in-tree 内核模块,则流不会受到影响;服务继续进行并加载 OOT 内核模块。
4.13.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.13.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
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
其他资源