16.7. 使用容器镜像预缓存功能
集群可能具有有限的带宽来访问容器镜像 registry,这可能会在更新完成前造成超时。
TALM 不会设置更新的时间。您可以在通过手动应用程序或外部自动化进行更新时应用 ClusterGroupUpgrade
CR。
当 preCaching
字段在 ClusterGroupUpgrade
CR 中被设置为 true
时,容器镜像预缓存会启动。在成功预缓存后,您可以启动补救策略。当 enable
字段设置为 true
时,补救操作会启动。
预缓存过程可以处于以下状态:
PrecacheNotStarted
这是所有集群在第一次协调时会自动分配给
ClusterGroupUpgrade
CR 的初始状态。在这个状态中,TALM 会删除来自之前更新中所有 spoke 集群的预缓存命名空间和 hub 查看资源。然后,TALM 为 spoke 创建一个新的
ManagedClusterView
资源,以便在PrecachePreparing
状态验证删除。PrecachePreparing
- 清理之前不完整更新中的所有剩余的资源,资源正在进行中。
PrecacheStarting
- 预缓存任务前提条件并创建了作业。
PrecacheActive
- 该作业的状态为"Active"状态。
PrecacheSucceeded
- pre-cache(预缓存)作业已成功。
PrecacheTimeout
- 工件预预缓存已完成。
PrecacheUnrecoverableError
- 作业以非零退出代码结束。
16.7.1. 使用预缓存创建 ClusterGroupUpgrade CR
预缓存功能允许在更新开始前在 spoke 集群中显示所需的容器镜像。
先决条件
- 安装 Topology Aware Lifecycle Manager(TALM)。
- 置备一个或多个受管集群。
-
以具有
cluster-admin
特权的用户身份登录。
流程
在
clustergroupupgrades-group-du.yaml
文件中将preCaching
字段设置为true
来保存ClusterGroupUpgrade
CR 的内容:apiVersion: ran.openshift.io/v1alpha1 kind: ClusterGroupUpgrade metadata: name: du-upgrade-4918 namespace: ztp-group-du-sno spec: preCaching: true 1 clusters: - cnfdb1 - cnfdb2 enable: false managedPolicies: - du-upgrade-platform-upgrade remediationStrategy: maxConcurrency: 2 timeout: 240
- 1
preCaching
字段设为true
,它允许 TALM 在开始更新前拉取容器镜像。
当您要启动更新时,通过运行以下命令应用
ClusterGroupUpgrade
CR:$ oc apply -f clustergroupupgrades-group-du.yaml
验证
运行以下命令,检查 hub 集群中是否存在
ClusterGroupUpgrade
CR:$ oc get cgu -A
输出示例
NAMESPACE NAME AGE ztp-group-du-sno du-upgrade-4918 10s 1
- 1
- CR 被创建。
运行以下命令,检查预缓存任务的状态:
$ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
输出示例
{ "conditions": [ { "lastTransitionTime": "2022-01-27T19:07:24Z", "message": "Precaching is not completed (required)", 1 "reason": "PrecachingRequired", "status": "False", "type": "Ready" }, { "lastTransitionTime": "2022-01-27T19:07:24Z", "message": "Precaching is required and not done", "reason": "PrecachingNotDone", "status": "False", "type": "PrecachingDone" }, { "lastTransitionTime": "2022-01-27T19:07:34Z", "message": "Pre-caching spec is valid and consistent", "reason": "PrecacheSpecIsWellFormed", "status": "True", "type": "PrecacheSpecValid" } ], "precaching": { "clusters": [ "cnfdb1" 2 ], "spec": { "platformImage": "image.example.io"}, "status": { "cnfdb1": "Active"} } }
在 spoke 集群中运行以下命令来检查预缓存作业的状态:
$ oc get jobs,pods -n openshift-talm-pre-cache
输出示例
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
运行以下命令,检查
ClusterGroupUpgrade
CR 的状态:$ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
输出示例
"conditions": [ { "lastTransitionTime": "2022-01-27T19:30:41Z", "message": "The ClusterGroupUpgrade CR has all clusters compliant with all the managed policies", "reason": "UpgradeCompleted", "status": "True", "type": "Ready" }, { "lastTransitionTime": "2022-01-27T19:28:57Z", "message": "Precaching is completed", "reason": "PrecachingCompleted", "status": "True", "type": "PrecachingDone" 1 }
- 1
- 预缓存任务已完成。