8.4. 使用 Out-of-cluster 镜像模式应用自定义分层镜像
您可以通过创建 MachineOSConfig 自定义资源(CR),将 OpenShift 镜像模式用于集群外构建过程将自定义分层镜像应用到节点。
在创建对象时,Machine Config Operator (MCO)使用新的自定义分层镜像重启这些节点,覆盖基本 Red Hat Enterprise Linux CoreOS (RHCOS)镜像。
要将自定义分层镜像应用到集群,您必须在集群可访问的存储库中具有自定义层次镜像。然后,创建一个指向自定义分层镜像的 MachineConfig 对象。对于每个需要配置的集群配置池,都需要一个独立的 MachineConfig 对象。
当您配置自定义分层镜像时,OpenShift Container Platform 不再自动更新任何使用自定义分层镜像的节点。根据需要手动进行节点更新是您自己的责任。如果您回滚自定义层,OpenShift Container Platform 将再次自动更新该节点。有关更新使用自定义分层镜像的节点的重要信息,请参阅以下附加资源部分。
先决条件
您必须创建一个基于 OpenShift Container Platform 镜像摘要的自定义层次镜像,而不是标签。
注意您应该使用与集群的其余部分上安装相同的基本 RHCOS 镜像。使用
oc adm release info --image-for rhel-coreos命令获取集群中使用的基础镜像。例如,以下 Containerfile 从 OpenShift Container Platform 4.20 镜像创建一个自定义分层镜像,并使用 CentOS 9 Stream 中的内核软件包覆盖内核软件包:
自定义层镜像的 Containerfile 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意有关如何创建 Containerfile 的说明超出了本文档的范围。
-
由于构建自定义分层镜像的过程是在集群之外执行,所以您必须在 Podman 或 Buildah 中使用
--authfile /path/to/pull-secret选项。或者,要自动读取这些工具的 pull secret,您可以将其添加到默认文件位置之一:~/.docker/config.json,$XDG_RUNTIME_DIR/containers/auth.json,~/.docker/config.json, 或~/.dockercfg。如需更多信息,请参阅containers-auth.json手册页。 - 您必须将自定义分层镜像推送到集群可访问的存储库。
流程
创建机器配置文件。
验证
您可以通过执行以下任一方式来验证是否应用了自定义层次镜像:
检查 worker 机器配置池已使用新机器配置推出:
检查是否创建了新机器配置:
oc get mc
$ oc get mcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查新机器配置中的
osImageURL值是否指向预期的镜像:oc describe mc rendered-worker-5de4837625b1cbc237de6b22bc0bc873
$ oc describe mc rendered-worker-5de4837625b1cbc237de6b22bc0bc873Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查关联的机器配置池是否使用新机器配置更新:
oc get mcp
$ oc get mcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-15961f1da260f7be141006404d17d39b True False False 3 3 3 0 39m worker rendered-worker-5de4837625b1cbc237de6b22bc0bc873 True False False 3 0 0 0 39m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-15961f1da260f7be141006404d17d39b True False False 3 3 3 0 39m worker rendered-worker-5de4837625b1cbc237de6b22bc0bc873 True False False 3 0 0 0 39m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 当
UPDATING字段为True时,机器配置池会使用新机器配置进行更新。在这种情况下,您将无法在输出看到新机器配置列表。当字段变为False时,代表 worker 机器配置池已应用到新机器配置。
检查节点以查看是否禁用了在节点上调度。这表示要应用更改:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当节点重新处于
Ready状态时,检查该节点是否使用自定义分层镜像:打开节点的
oc debug会话。例如:oc debug node/ip-10-0-155-125.us-west-1.compute.internal
$ oc debug node/ip-10-0-155-125.us-west-1.compute.internalCopy 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命令,以查看自定义分层镜像正在使用:sudo rpm-ostree status
sh-4.4# sudo rpm-ostree statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
State: idle Deployments: * ostree-unverified-registry:quay.io/my-registry/... Digest: sha256:...State: idle Deployments: * ostree-unverified-registry:quay.io/my-registry/... Digest: sha256:...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
8.4.1. 恢复一个 out-of-cluster 节点 复制链接链接已复制到粘贴板!
您可以从特定机器配置池中的节点恢复集群自定义分层镜像。Machine Config Operator (MCO) 使用集群基本 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像重启这些节点,覆盖自定义分层镜像。
要从集群中删除 Red Hat Enterprise Linux CoreOS (RHCOS)自定义分层镜像,您需要删除应用镜像的机器配置。
流程
删除应用自定义分层镜像的机器配置。
oc delete mc os-layer-custom
$ oc delete mc os-layer-customCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除机器配置后,节点将重新引导。
验证
您可以通过执行以下任一方式来验证自定义层次镜像是否已被删除:
检查 worker 机器配置池是否使用以前的机器配置更新:
oc get mcp
$ oc get mcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-6faecdfa1b25c114a58cf178fbaa45e2 True False False 3 3 3 0 39m worker rendered-worker-6b000dbc31aaee63c6a2d56d04cd4c1b False True False 3 0 0 0 39m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-6faecdfa1b25c114a58cf178fbaa45e2 True False False 3 3 3 0 39m worker rendered-worker-6b000dbc31aaee63c6a2d56d04cd4c1b False True False 3 0 0 0 39m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 当
UPDATING字段为True时,机器配置池会使用以前的机器配置进行更新。当字段变为False时,worker 机器配置池已应用到以前的机器配置。
检查节点以查看是否禁用了在节点上调度。这表示要应用更改:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当节点重新处于
Ready状态时,检查该节点是否使用基础镜像:运行以下命令,打开节点的
oc 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-5.1# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
rpm-ostree status命令,以查看自定义分层镜像正在使用:sudo rpm-ostree status
sh-5.1# sudo rpm-ostree statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
State: idle Deployments: * ostree-unverified-registry:podman pull quay.io/openshift-release-dev/ocp-release@sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73 Digest: sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73State: idle Deployments: * ostree-unverified-registry:podman pull quay.io/openshift-release-dev/ocp-release@sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73 Digest: sha256:e2044c3cfebe0ff3a99fc207ac5efe6e07878ad59fd4ad5e41f88cb016dacd73Copy to Clipboard Copied! Toggle word wrap Toggle overflow