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 特权的用户身份登录。

流程

  1. 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 在开始更新前拉取容器镜像。
  2. 当您要启动预缓存时,请运行以下命令应用 ClusterGroupUpgrade CR:

    $ oc apply -f clustergroupupgrades-group-du.yaml

验证

  1. 运行以下命令,检查 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 被创建。
  2. 运行以下命令,检查预缓存任务的状态:

    $ 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
    显示已识别的集群列表。
  3. 在 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

  4. 运行以下命令,检查 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
    预缓存任务已完成。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.