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-toolkit
Copy 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-toolkit
Copy 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.json
Copy 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 镜像推送到定义的存储库中。