7.3. 使用 on-cluster 层应用自定义分层镜像
要使用 on-cluster 构建过程将自定义分层镜像应用到集群,请创建一个 MachineOSConfig 自定义资源 (CR) 来指定以下参数:
- 要构建的 Containerfile
- 关联构建的机器配置池
- 应该推送和拉取最终镜像的位置
- 要使用的推送和 pull secret
在创建对象时,Machine Config Operator (MCO) 会创建一个 MachineOSBuild 对象和 machine-os-builder pod。构建过程还会创建临时对象,如配置映射,这些对象会在构建完成后进行清理。
构建完成后,MCO 将新的自定义分层镜像推送到您的存储库中,以便在部署新节点时使用。您可以在 MachineOSBuild 对象和 machine-os-builder pod 中看到新自定义分层镜像的摘要镜像拉取 spec。
您不需要与这些新对象或 machine-os-builder pod 交互。但是,如果需要,您可以使用所有这些资源进行故障排除。
您要使用自定义分层镜像的每个机器配置池需要单独的 MachineOSConfig CR。
集群镜像分层只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
-
已使用功能门启用
TechPreviewNoUpgrade功能集。如需更多信息,请参阅“使用功能门启用功能”。 您在 MCO 需要的
openshift-machine-config-operator命名空间中有一个全局 pull secret 副本,以便拉取基础操作系统镜像。例如,如果您使用全局 pull secret,您可以运行以下命令:
$oc create secret docker-registry global-pull-secret-copy \ --namespace "openshift-machine-config-operator" \ --from-file=.dockerconfigjson=<(oc get secret/pull-secret -n openshift-config -o go-template='{{index .data ".dockerconfigjson" | base64decode}}')$oc create secret docker-registry global-pull-secret-copy \ --namespace "openshift-machine-config-operator" \ --from-file=.dockerconfigjson=<(oc get secret/pull-secret -n openshift-config -o go-template='{{index .data ".dockerconfigjson" | base64decode}}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
openshift-machine-api命名空间中有etc-pki-entitlementsecret 的副本。 - 具有 MCO 所需的推送 secret,才能将新的自定义分层镜像推送到 registry。
- 您有一个 pull secret,节点需要从 registry 中拉取新的自定义分层镜像。这应该与用于将镜像推送到存储库的 secret 不同。
- 您熟悉如何配置 Containerfile。有关如何创建 Containerfile 的说明超出了本文档的范围。
- 可选:为要应用自定义分层镜像的节点有单独的机器配置池。
流程
创建
machineOSconfig对象:创建一个类似以下示例的 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要部署自定义分层镜像的机器配置池。
- 2
- 指定用于配置自定义分层镜像的 Containerfile。您可以在 Containerfile 中指定多个构建阶段。
- 3
- 指定要构建镜像的架构。您必须将此参数设为
noarch。 - 4
- 将构建阶段指定为 final。此字段是必需的,并应用到构建中的最后一个镜像。
- 5
- 指定要使用的镜像构建器的名称。您必须将此参数设为
PodImageBuilder。 - 6
- 指定 MCO 需要的 pull secret 名称,以便从 registry 中拉取基本操作系统镜像。
- 7
- 指定要将新构建的自定义分层镜像推送到的镜像 registry。这可以是集群可访问的任何 registry。本例使用内部 OpenShift Container Platform registry。
- 8
- 指定 MCO 需要的推送 secret 名称,将新构建的自定义分层镜像推送到 registry。
- 9
- 指定节点需要的镜像 registry 所需的 secret,以便拉取新构建的自定义分层镜像。这应该与用于将镜像推送到存储库的 secret 不同。
创建
MachineOSConfig对象:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果需要,当
MachineOSBuild对象被创建且处于READY状态时,修改您要使用新自定义分层镜像的节点 spec:检查
MachineOSBuild对象是否为READY。当SUCCEEDED值为True时,构建已完成。oc get machineosbuild
$ oc get machineosbuildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
MachineOSBuild对象已就绪的输出示例NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder False False True False False
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder False False True False FalseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过为
MachineOSConfig对象中指定的机器配置池添加标签来编辑您要部署自定义分层镜像的节点:oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='
$ oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- node-role.kubernetes.io/<mcp_name>=
- 指定用于标识用于部署自定义分层镜像的节点选择器。
当您保存更改时,MCO 会排空、封锁并重启节点。重新引导后,该节点将使用新的自定义分层镜像。
验证
运行以下命令验证新 pod 是否已就绪:
oc get pods -n openshift-machine-config-operator
$ oc get pods -n openshift-machine-config-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE build-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0 2/2 Running 0 2m40s # ... machine-os-builder-6fb66cfb99-zcpvq 1/1 Running 0 2m42s
NAME READY STATUS RESTARTS AGE build-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0 2/2 Running 0 2m40s1 # ... machine-os-builder-6fb66cfb99-zcpvq 1/1 Running 0 2m42s2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证分层构建的当前阶段:
oc get machineosbuilds
$ oc get machineosbuildsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-rendered-layered-ef6460613affe503b530047a11b28710-builder False True False False False
NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-rendered-layered-ef6460613affe503b530047a11b28710-builder False True False False FalseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
MachineOSBuild对象是否包含对新自定义分层镜像的引用:oc describe machineosbuild <object_name>
$ oc describe machineosbuild <object_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新自定义分层镜像的摘要镜像拉取 spec。
验证适当的节点是否使用新的自定义分层镜像:
以 root 用户身份为 control plane 节点启动一个 debug 会话:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/host设置为 debug shell 中的根目录:chroot /host
sh-4.4# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
rpm-ostree status命令,以查看自定义分层镜像正在使用:rpm-ostree status
sh-5.1# rpm-ostree statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
...
# ... Deployments: * ostree-unverified-registry:quay.io/openshift-release-dev/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd1 Digest: sha256:bcea2546295b2a55e0a9bf6dd4789433a9867e378661093b6fdee0031ed1e8a4 Version: 416.94.202405141654-0 (2024-05-14T16:58:43Z)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新自定义分层镜像的摘要镜像拉取 spec。
其他资源