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>
以下 ConfigMap
示例演示了如何使用 excludePrecachePatterns
字段排除镜像。
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-group-upgrade-overrides
data:
excludePrecachePatterns: |
azure 1
aws
vsphere
alibaba
- 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 的内容: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 STATE DETAILS ztp-group-du-sno du-upgrade-4918 10s InProgress Precaching is required and not done 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 required and not done", "reason": "InProgress", "status": "False", "type": "PrecachingSucceeded" }, { "lastTransitionTime": "2022-01-27T19:07:34Z", "message": "Pre-caching spec is valid and consistent", "reason": "PrecacheSpecIsWellFormed", "status": "True", "type": "PrecacheSpecValid" } ], "precaching": { "clusters": [ "cnfdb1" 1 "cnfdb2" ], "spec": { "platformImage": "image.example.io"}, "status": { "cnfdb1": "Active" "cnfdb2": "Succeeded"} } }
- 1
- 显示已识别的集群列表。
在 spoke 集群中运行以下命令来检查预缓存作业的状态:
$ oc get jobs,pods -n openshift-talo-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": "PrecachingSucceeded" 1 }
- 1
- 预缓存任务已完成。