12.7. 使用容器镜像预缓存功能
单节点 OpenShift 集群可能有限带宽来访问容器镜像 registry,这可能会在更新完成前造成超时。
TALM 不会设置更新的时间。您可以在通过手动应用程序或外部自动化进行更新时应用 ClusterGroupUpgrade
CR。
当 preCaching
字段在 ClusterGroupUpgrade
CR 中被设置为 true
时,容器镜像预缓存会启动。
TALM 使用 PrecacheSpecValid
条件来报告状态信息,如下所示:
true
预缓存规格有效且一致。
false
预缓存规格不完整。
TALM 使用 PrecachingSucceeded
条件来报告状态信息,如下所示:
true
TALM 已完成预缓存过程。如果任何集群的预缓存失败,则该集群的更新会失败,但会继续执行所有其他集群。如果任何集群预缓存失败,您会接收到一个通知信息。
false
预缓存仍在为一个或多个集群处理,或者所有集群都失败。
在成功预缓存后,您可以启动补救策略。当 enable
字段设置为 true
时,补救操作会启动。如果集群中存在预缓存失败,则对该集群的升级会失败。升级过程将继续用于成功预缓存的所有其他集群。
预缓存过程可以处于以下状态:
NotStarted
这是所有集群在第一次协调时会自动分配给
ClusterGroupUpgrade
CR 的初始状态。在这个状态中,TALM 会删除来自之前更新中所有 spoke 集群的预缓存命名空间和 hub 查看资源。然后,TALM 为 spoke 创建一个新的ManagedClusterView
资源,以便在PrecachePreparing
状态验证删除。PreparingToStart
清理之前不完整更新中的所有剩余的资源,资源正在进行中。
Starting
预缓存任务前提条件并创建了作业。
Active
该作业的状态为"Active"状态。
Succeeded
pre-cache(预缓存)作业成功。
PrecacheTimeout
工件预缓存是部分完成的。
UnrecoverableError
作业以非零退出代码结束。
12.7.1. 使用容器镜像预缓存过滤器 复制链接链接已复制到粘贴板!
预缓存功能通常下载比集群进行更新所需要镜像更多的镜像。您可以控制将哪些预缓存镜像下载到集群中。这可缩短下载时间,并节省带宽和存储。
您可以使用以下命令查看要下载的所有镜像的列表:
oc adm release info <ocp-version>
$ oc adm release info <ocp-version>
以下 ConfigMap
示例演示了如何使用 excludePrecachePatterns
字段排除镜像。
- 1
- TALM 排除所有带有名称的镜像,其中包括此处列出的任何模式。
12.7.2. 使用预缓存创建 ClusterGroupUpgrade CR 复制链接链接已复制到粘贴板!
对于单节点 OpenShift,在更新启动前,预缓存功能允许在 spoke 集群上存在所需的容器镜像。
对于预缓存,TALM 使用 ClusterGroupUpgrade
CR 中的 spec.remediationStrategy.timeout
值。您必须设置一个 timeout
值,允许足够时间完成预缓存作业。当您在预缓存完成后启用 ClusterGroupUpgrade
CR 时,您可以将 timeout
值改为适合更新的持续时间。
先决条件
- 安装 Topology Aware Lifecycle Manager(TALM)。
- 置备一个或多个受管集群。
-
以具有
cluster-admin
特权的用户身份登录。
流程
在
clustergroupupgrades-group-du.yaml
文件中将preCaching
字段设置为true
来保存ClusterGroupUpgrade
CR 的内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
preCaching
字段设为true
,它允许 TALM 在开始更新前拉取容器镜像。
当您要启动预缓存时,请运行以下命令应用
ClusterGroupUpgrade
CR:oc apply -f clustergroupupgrades-group-du.yaml
$ oc apply -f clustergroupupgrades-group-du.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,检查 hub 集群中是否存在
ClusterGroupUpgrade
CR:oc get cgu -A
$ oc get cgu -A
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME AGE STATE DETAILS ztp-group-du-sno du-upgrade-4918 10s InProgress Precaching is required and not done
NAMESPACE NAME AGE STATE DETAILS ztp-group-du-sno du-upgrade-4918 10s InProgress Precaching is required and not done
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- CR 被创建。
运行以下命令,检查预缓存任务的状态:
oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
$ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 显示已识别的集群列表。
在 spoke 集群中运行以下命令来检查预缓存作业的状态:
oc get jobs,pods -n openshift-talo-pre-cache
$ oc get jobs,pods -n openshift-talo-pre-cache
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME COMPLETIONS DURATION AGE job.batch/pre-cache 0/1 3m10s 3m10s NAME READY STATUS RESTARTS AGE pod/pre-cache--1-9bmlr 1/1 Running 0 3m10s
NAME COMPLETIONS DURATION AGE job.batch/pre-cache 0/1 3m10s 3m10s NAME READY STATUS RESTARTS AGE pod/pre-cache--1-9bmlr 1/1 Running 0 3m10s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查
ClusterGroupUpgrade
CR 的状态:oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
$ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 预缓存任务已完成。