2.3. preflight 验证内核模块管理 (KMM) 模块
在应用 KMM 模块的集群中执行升级前,您需要在集群升级和可能的内核升级后验证使用 KMM 安装的内核模块是否可以在节点上安装。preflight 会尝试并行验证集群中载入的每个模块。在启动一个模块的验证前,preflight 并不会等待一个模块的验证过程完成。
2.3.1. 启动验证 复制链接链接已复制到粘贴板!
preflight 验证通过在集群中创建 PreflightValidationOCP 资源来触发。此资源包含以下字段:
dtkImage为特定 OpenShift Container Platform 版本发布的 DTK 容器镜像。如果没有设置这个值,则无法使用
DTK_AUTO功能。您可以在集群中运行以下任一命令来获取镜像:
For x86_64 image: oc adm release info quay.io/openshift-release-dev/ocp-release:4.19.0-x86_64 --image-for=driver-toolkit
# For x86_64 image: $ oc adm release info quay.io/openshift-release-dev/ocp-release:4.19.0-x86_64 --image-for=driver-toolkitCopy to Clipboard Copied! Toggle word wrap Toggle overflow For ARM64 image: oc adm release info quay.io/openshift-release-dev/ocp-release:4.19.0-aarch64 --image-for=driver-toolkit
# For ARM64 image: $ oc adm release info quay.io/openshift-release-dev/ocp-release:4.19.0-aarch64 --image-for=driver-toolkitCopy to Clipboard Copied! Toggle word wrap Toggle overflow kernelVersion提供集群要升级到的内核版本的必填字段。
您可以在集群中运行以下命令来获取版本:
podman run -it --rm $(oc adm release info quay.io/openshift-release-dev/ocp-release:4.19.0-x86_64 --image-for=driver-toolkit) cat /etc/driver-toolkit-release.json
$ podman run -it --rm $(oc adm release info quay.io/openshift-release-dev/ocp-release:4.19.0-x86_64 --image-for=driver-toolkit) cat /etc/driver-toolkit-release.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow pushBuiltImage-
如果为
true,则构建期间创建的镜像和签名验证将被推送到其存储库。此字段默认为false。
2.3.2. 验证生命周期 复制链接链接已复制到粘贴板!
preflight 验证会尝试验证集群中载入的每个模块。在验证成功后,preflight 会停止在 Module 资源上运行验证。如果模块验证失败,您可以更改模块定义,并在下一个循环中再次验证模块。
如果要为附加内核运行 Preflight 验证,则应该为该内核创建另一个 PreflightValidationOCP 资源。验证所有模块后,建议删除 PreflightValidationOCP 资源。
2.3.3. 验证状态 复制链接链接已复制到粘贴板!
PreflightValidationOCP 资源报告集群中尝试或试图在 .status.modules 列表中验证的每个模块的状态和进度。该列表的元素包含以下字段:
name-
Module资源的名称。 namespace-
Module资源的命名空间。 statusReason- 有关状态的动词说明。
verificationStage描述正在执行的验证阶段:
-
Image:镜像存在验证 -
Done:验证已完成
-
verificationStatus模块验证的状态:
-
Success:验证 -
Failure:验证失败 -
InProgress: 验证正在进行
-
2.3.4. 镜像验证阶段 复制链接链接已复制到粘贴板!
镜像验证始终是要执行的 preflight 验证的第一个阶段。如果镜像验证成功,则不会在该特定模块上运行其他验证。Operator 使用容器运行时检查模块中 updad 内核的镜像是否存在和可访问性。
如果镜像验证失败,且模块中有与升级的内核相关的 build/sign 部分,控制器会尝试构建或签署镜像。如果在 PreflightValidationOCP 资源中定义了 PushBuiltImage 标志,控制器也会尝试将生成的镜像推送到其存储库中。生成的镜像名称取自 Module CR 的 containerImage 字段的定义。
如果存在 build 部分,则 sign 部分中的输入镜像将用作 build 部分的输出镜像。因此,为了使输入镜像可用于 sign 部分,必须在 PreflightValidationOCP CR 中定义 PushBuiltImage 标志。
2.3.5. PreflightValidationOCP 资源示例 复制链接链接已复制到粘贴板!
以下示例显示了 YAML 格式的 PreflightValidationOCP 资源。
这个示例根据即将推出的 5.14.0-570.19.1.el9_6.x86_64 内核验证当前存在的模块。由于 .spec.pushBuiltImage 设置为 true,KMM 会将生成的 Build/Sign 镜像推送到定义的存储库中。