搜索

13.2. 镜像 OpenShift Container Platform 镜像存储库

download PDF

您必须将容器镜像镜像到镜像 registry 中,然后才能在受限网络环境中更新集群。您还可以在连接的环境中使用此流程来确保集群只运行满足您机构对外部内容控制的批准的容器镜像。

注意

您的镜像 registry 必须始终在集群运行时都运行。

以下步骤概述了如何将镜像镜像到镜像 registry 的高级别工作流:

  1. 在用于检索和推送发行镜像的所有设备上安装 OpenShift CLI (oc)。
  2. 下载 registry pull secret,并将其添加到集群中。
  3. 如果使用 oc-mirror OpenShift CLI (oc)插件

    1. 在用于检索和推送发行镜像的所有设备中安装 oc-mirror 插件。
    2. 为插件创建镜像设置配置文件,以便在决定要镜像的发行镜像时使用。您可以稍后编辑此配置文件,以更改插件镜像的镜像。
    3. 将目标发行镜像直接镜像到镜像 registry 或可移动介质,然后镜像到镜像 registry。
    4. 配置集群以使用 oc-mirror 插件生成的资源。
    5. 根据需要重复这些步骤以更新您的镜像 registry。
  4. 如果使用 oc adm release mirror 命令

    1. 设置环境变量,对应于您的环境以及您要镜像的发行镜像。
    2. 将目标发行镜像直接镜像到镜像 registry 或可移动介质,然后镜像到镜像 registry。
    3. 根据需要重复这些步骤以更新您的镜像 registry。

与使用 oc adm release mirror 命令相比,oc-mirror 插件具有以下优点:

  • 它可以镜像容器镜像以外的内容。
  • 在首次镜像镜像后,可以更轻松地更新 registry 中的镜像。
  • oc-mirror 插件提供了一种自动从 Quay 镜像发行版本有效负载的方法,并为在断开连接的环境中运行的 OpenShift Update Service 构建最新的图形数据镜像。

13.2.1. 先决条件

  • 您必须在托管 OpenShift Container Platform 集群的位置(如 Red Hat Quay)中有一个支持 Docker v2-2 的容器镜像 registry。

    注意

    如果使用 Red Hat Quay,则必须在 oc-mirror 插件中使用 3.6 或更高版本的版本。如果您有 Red Hat Quay 权利,请参阅有关部署 Red Hat Quay 以了解概念验证的文档,或使用 Quay Operator。如果您需要额外的帮助来选择并安装 registry,请联络您的销售代表或红帽支持。

    如果您没有容器镜像 registry 的现有解决方案,则 mirror registry for Red Hat OpenShift 会包括在 OpenShift Container Platform 订阅中。mirror registry for Red Hat OpenShift 是一个小型容器 registry,可用于在断开连接的环境中镜像 OpenShift Container Platform 容器镜像。

13.2.2. 准备您的镜像主机

执行镜像步骤前,必须准备主机以检索内容并将其推送到远程位置。

13.2.2.1. 通过下载二进制文件安装 OpenShift CLI

您可以安装 OpenShift CLI(oc)来使用命令行界面与 OpenShift Container Platform 进行交互。您可以在 Linux、Windows 或 macOS 上安装 oc

重要

如果安装了旧版本的 oc,则无法使用 OpenShift Container Platform 4.12 中的所有命令。下载并安装新版本的 oc。如果要在断开连接的环境中升级集群,请安装您要升级到的 oc 版本。

在 Linux 上安装 OpenShift CLI

您可以按照以下流程在 Linux 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 产品变体 下拉列表中选择架构。
  3. 版本 下拉列表中选择适当的版本。
  4. OpenShift v4.12 Linux Client 条目旁的 Download Now 来保存文件。
  5. 解包存档:

    $ tar xvf <file>
  6. oc 二进制文件放到 PATH 中的目录中

    要查看您的 PATH,请执行以下命令:

    $ echo $PATH

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    $ oc <command>
在 Windows 上安装 OpenShift CLI

您可以按照以下流程在 Windows 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.12 Windows Client 条目旁的 Download Now 来保存文件。
  4. 使用 ZIP 程序解压存档。
  5. oc 二进制文件移到 PATH 中的目录中

    要查看您的 PATH,请打开命令提示并执行以下命令:

    C:\> path

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    C:\> oc <command>
在 macOS 上安装 OpenShift CLI

您可以按照以下流程在 macOS 上安装 OpenShift CLI(oc)二进制文件。

流程

  1. 导航到红帽客户门户网站上的 OpenShift Container Platform 下载页面
  2. 版本 下拉列表中选择适当的版本。
  3. OpenShift v4.12 macOS Client 条目旁的 Download Now 来保存文件。

    注意

    对于 macOS arm64,请选择 OpenShift v4.12 macOS arm64 Client 条目。

  4. 解包和解压存档。
  5. oc 二进制文件移到 PATH 的目录中。

    要查看您的 PATH,请打开终端并执行以下命令:

    $ echo $PATH

验证

  • 安装 OpenShift CLI 后,可以使用 oc 命令:

    $ oc <command>

13.2.2.2. 配置允许对容器镜像进行镜像的凭证

创建容器镜像 registry 凭证文件,允许将红帽的镜像镜像到您的镜像环境中。

警告

安装集群时不要使用此镜像 registry 凭据文件作为 pull secret。如果在安装集群时提供此文件,集群中的所有机器都将具有镜像 registry 的写入权限。

警告

此过程需要您可以对镜像 registry 上的容器镜像 registry 进行写操作,并将凭证添加到 registry pull secret。

先决条件

  • 您已将镜像 registry 配置为在断开连接的环境中使用。
  • 您在镜像 registry 中标识了镜像仓库的位置,以将容器镜像镜像(mirror)到这个位置。
  • 您置备了一个镜像 registry 帐户,允许将镜像上传到该镜像仓库。

流程

在安装主机上完成以下步骤:

  1. 下载您的 registry.redhat.io pull secret(从Red Hat OpenShift Cluster Manager)
  2. 以 JSON 格式创建您的 pull secret 副本:

    $ cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json> 1
    1
    指定到存储 pull secret 的文件夹的路径,以及您创建的 JSON 文件的名称。

    该文件类似于以下示例:

    {
      "auths": {
        "cloud.openshift.com": {
          "auth": "b3BlbnNo...",
          "email": "you@example.com"
        },
        "quay.io": {
          "auth": "b3BlbnNo...",
          "email": "you@example.com"
        },
        "registry.connect.redhat.com": {
          "auth": "NTE3Njg5Nj...",
          "email": "you@example.com"
        },
        "registry.redhat.io": {
          "auth": "NTE3Njg5Nj...",
          "email": "you@example.com"
        }
      }
    }
  3. 可选:如果使用 oc-mirror 插件,请将文件保存为 ~/.docker/config.json$XDG_RUNTIME_DIR/containers/auth.json

    1. 如果 .docker$XDG_RUNTIME_DIR/containers 目录不存在,请输入以下命令来创建:

      $ mkdir -p <directory_name>

      其中 <directory_name > 是 ~/.docker$XDG_RUNTIME_DIR/containers

    2. 输入以下命令将 pull secret 复制到适当的目录中:

      $ cp <path>/<pull_secret_file_in_json> <directory_name>/<auth_file>

      其中 <directory_name > 是 ~/.docker$XDG_RUNTIME_DIR/containers,& lt;auth_file& gt; 则是 config.jsonauth.json

  4. 为您的镜像 registry 生成 base64 编码的用户名和密码或令牌:

    $ echo -n '<user_name>:<password>' | base64 -w0 1
    BGVtbYk3ZHAtqXs=
    1
    通过 <user_name><password> 指定 registry 的用户名和密码。
  5. 编辑 JSON 文件并添加描述 registry 的部分:

      "auths": {
        "<mirror_registry>": { 1
          "auth": "<credentials>", 2
          "email": "you@example.com"
        }
      },
    1
    对于 <mirror_registry>,指定 registry 域名,以及您的镜像 registry 用来提供内容的可选端口。例如:registry.example.comregistry.example.com:8443
    2
    使用 <credentials> 为您的镜像 registry 指定 base64 编码的用户名和密码。

    该文件类似于以下示例:

    {
      "auths": {
        "registry.example.com": {
          "auth": "BGVtbYk3ZHAtqXs=",
          "email": "you@example.com"
        },
        "cloud.openshift.com": {
          "auth": "b3BlbnNo...",
          "email": "you@example.com"
        },
        "quay.io": {
          "auth": "b3BlbnNo...",
          "email": "you@example.com"
        },
        "registry.connect.redhat.com": {
          "auth": "NTE3Njg5Nj...",
          "email": "you@example.com"
        },
        "registry.redhat.io": {
          "auth": "NTE3Njg5Nj...",
          "email": "you@example.com"
        }
      }
    }

13.2.3. 使用 oc-mirror 插件镜像资源

您可以使用 oc-mirror OpenShift CLI (oc)插件在完全或部分断开连接的环境中将镜像镜像到镜像 registry。您必须从具有互联网连接的系统运行 oc-mirror,以便从官方红帽 registry 中下载所需的镜像。

13.2.3.1. 关于 oc-mirror 插件

您可以使用 oc-mirror OpenShift CLI(oc)插件,使用单个工具将所有所需的 OpenShift Container Platform 内容和其他镜像(mirror)镜像到您的镜像 registry。它提供以下功能:

  • 提供镜像 OpenShift Container Platform 发行版本、Operator、helm chart 和其他镜像的集中方法。
  • 维护 OpenShift Container Platform 和 Operator 的更新路径。
  • 使用声明的镜像设置配置文件来仅包含集群所需的 OpenShift Container Platform 发行版本、Operator 和镜像。
  • 执行增量镜像,从而减少将来镜像集的大小。
  • 从上一执行以来,从镜像集配置中排除的目标镜像 registry 中修剪镜像的镜像。
  • (可选)为 OpenShift Update Service (OSUS) 使用生成支持工件。

使用 oc-mirror 插件时,您可以在镜像设置配置文件中指定要镜像的内容。在这个 YAML 文件中,您可以将配置微调为仅包含集群需要的 OpenShift Container Platform 发行版本和 Operator。这可减少您下载和传输所需的数据量。oc-mirror 插件也可以镜像任意 helm chart 和附加容器镜像,以帮助用户将其工作负载无缝同步到镜像 registry 中。

第一次运行 oc-mirror 插件时,它会使用所需内容填充您的镜像 registry,以执行断开连接的集群安装或更新。要让断开连接的集群继续接受更新,您必须更新镜像 registry。要更新您的镜像 registry,请使用与第一次运行相同的配置运行 oc-mirror 插件。oc-mirror 插件引用存储后端的元数据,并只下载上次运行该工具后所发布的元数据。这为 OpenShift Container Platform 和 Operator 提供了更新路径,并根据需要执行依赖项解析。

重要

当使用 oc-mirror CLI 插件填充镜像 registry 时,必须使用 oc-mirror 工具对镜像 registry 进行进一步的更新。

13.2.3.2. oc-mirror 兼容性和支持

oc-mirror 插件支持为 OpenShift Container Platform 版本 4.9 及之后的版本的镜像 OpenShift Container Platform 有效负载镜像和 Operator 目录。

使用 oc-mirror 插件的最新版本,无论您需要镜像的 OpenShift Container Platform 版本是什么。

13.2.3.3. 关于镜像 registry

您可以将 OpenShift Container Platform 安装和后续的产品更新镜像(mirror)到支持 Docker v2-2 (如 Red Hat Quay)的容器镜像(如 Red Hat Quay)的容器镜像。如果您无法访问大型容器 registry,可以使用 Red Hat OpenShift 的镜像 registry,这是 OpenShift 中包含的小型容器 registry。

无论您所选 registry 是什么,都会将互联网上红帽托管站点的内容镜像到隔离的镜像 registry 相同。镜像内容后,您要将每个集群配置为从镜像 registry 中检索此内容。

重要

OpenShift 镜像 registry 不能用作目标 registry,因为它不支持没有标签的推送,在镜像过程中需要这个推送。

如果选择的容器 registry 不是 mirror registry for Red Hat OpenShift,则需要集群中置备的每台机器都可以访问它。如果 registry 无法访问,安装、更新或常规操作(如工作负载重新定位)可能会失败。因此,您必须以高度可用的方式运行镜像 registry,镜像 registry 至少必须与 OpenShift Container Platform 集群的生产环境可用性相匹配。

使用 OpenShift Container Platform 镜像填充镜像 registry 时,可以遵循以下两种情况。如果您的主机可以同时访问互联网和您的镜像 registry,而不能访问您的集群节点,您可以直接从该机器中镜像该内容。这个过程被称为 连接的镜像(mirror)。如果没有这样的主机,则必须将该镜像文件镜像到文件系统中,然后将该主机或者可移动介质放入受限环境中。这个过程被称为 断开连接的镜像

对于已镜像的 registry,若要查看拉取镜像的来源,您必须查看 Trying 以访问 CRI-O 日志中的日志条目。查看镜像拉取源的其他方法(如在节点上使用 crictl images 命令)显示非镜像镜像名称,即使镜像是从镜像位置拉取的。

注意

红帽没有针对 OpenShift Container Platform 测试第三方 registry。

其他资源

13.2.3.4. 安装 oc-mirror OpenShift CLI 插件

要使用 oc-mirror OpenShift CLI 插件来镜像 registry 镜像,您必须安装插件。如果您在一个完全断开连接的环境中镜像镜像集,请确保在具有互联网访问的主机上的 oc-mirror 插件以及可访问镜像 registry 的断开连接的环境中安装 oc-mirror 插件。

先决条件

  • 已安装 OpenShift CLI(oc)。

流程

  1. 下载 oc-mirror CLI 插件。

    1. 进入到 OpenShift Cluster Manager Hybrid Cloud ConsoleDownloads 页面。
    2. OpenShift disconnected 安装工具部分下,点 Download for OpenShift Client(oc)mirror 插件 并保存该文件。
  2. 解压归档:

    $ tar xvzf oc-mirror.tar.gz
  3. 如有必要,将插件文件更新为可执行。

    $ chmod +x oc-mirror
    注意

    不要重命名 oc-mirror 文件。

  4. 通过将文件放在 PATH 中,例如 /usr/local/bin,安装 oc-mirror CLI 插件:

    $ sudo mv oc-mirror /usr/local/bin/.

验证

  • 运行 oc mirror help 来验证插件是否已成功安装:

    $ oc mirror help

13.2.3.5. 创建镜像设置配置

在使用 oc-mirror 插件镜像集之前,必须先创建镜像设置配置文件。此镜像设置配置文件定义哪些 OpenShift Container Platform 发行版本、Operator 和其他镜像要镜像,以及 oc-mirror 插件的其他配置设置。

您必须在镜像设置配置文件中指定存储后端。此存储后端可以是本地目录或支持 Docker v2-2 的 registry。oc-mirror 插件在创建镜像的过程中将元数据存储在这个存储后端中。

重要

不要删除或修改 oc-mirror 插件生成的元数据。每次针对同一镜像 registry 运行 oc-mirror 插件时,都必须使用相同的存储后端。

先决条件

  • 您已创建了容器镜像 registry 凭证文件。具体步骤,请参阅配置允许镜像镜像的凭证

流程

  1. 使用 oc mirror init 命令为镜像设置配置创建模板,并将其保存到名为 imageset-config.yaml 的文件中:

    $ oc mirror init --registry example.com/mirror/oc-mirror-metadata > imageset-config.yaml 1
    1
    example.com/mirror/oc-mirror-metadata 替换为存储后端的 registry 的位置。
  2. 编辑该文件并根据需要调整设置:

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v1alpha2
    archiveSize: 4                                                      1
    storageConfig:                                                      2
      registry:
        imageURL: example.com/mirror/oc-mirror-metadata                 3
        skipTLS: false
    mirror:
      platform:
        channels:
        - name: stable-4.12                                             4
          type: ocp
        graph: true                                                     5
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12  6
        packages:
        - name: serverless-operator                                     7
          channels:
          - name: stable                                                8
      additionalImages:
      - name: registry.redhat.io/ubi8/ubi:latest                        9
      helm: {}
    1
    添加 archiveSize 以设置镜像集合中的每个文件的最大大小(以 GiB 为单位)。
    2
    设置后端位置,以将镜像设置元数据保存到。此位置可以是 registry 或本地目录。必须指定 storageConfig 值,除非您使用技术预览 OCI 功能。
    3
    设置存储后端的 registry URL。
    4
    将频道设置为从中检索 OpenShift Container Platform 镜像。
    5
    添加 graph: true 以构建并推送 graph-data 镜像推送到镜像 registry。创建 OpenShift Update Service (OSUS) 需要 graph-data 镜像。graph: true 字段还会生成 UpdateService 自定义资源清单。oc 命令行界面 (CLI) 可以使用 UpdateService 自定义资源清单来创建 OSUS。如需更多信息,请参阅关于 OpenShift Update Service
    6
    将 Operator 目录设置为从中检索 OpenShift Container Platform 镜像。
    7
    仅指定要包含在镜像集中的某些 Operator 软件包。删除此字段以检索目录中的所有软件包。
    8
    仅指定要包含在镜像集中的 Operator 软件包的某些频道。即使您没有使用该频道中的捆绑包,还必须始终包含 Operator 软件包的默认频道。您可以运行以下命令来找到默认频道:oc mirror list operators --catalog=<catalog_name> --package=<package_name>
    9
    指定要在镜像集中包含的任何其他镜像。
    注意

    graph: true 字段还会镜像 ubi-micro 镜像,以及其他镜像的镜像。

    如需完整的参数列表,请参阅 Image set configuration parameters;对于不同的镜像用例,请参阅 Image set configuration examples

  3. 保存更新的文件。

    在镜像内容时,oc mirror 命令需要此镜像设置配置文件。

13.2.3.6. 将镜像集镜像(mirror)到镜像 registry

您可以使用 oc-mirror CLI 插件在 部分断开连接的环境中完全断开连接的环境中将镜像镜像到镜像 registry。

以下流程假设您已设置了镜像 registry。

13.2.3.6.1. 在部分断开连接的环境中镜像设置的镜像

在部分断开连接的环境中,您可以直接镜像到目标镜像 registry 的镜像。

13.2.3.6.1.1. 镜像(mirror)到镜像(mirror)的镜像

您可以使用 oc-mirror 插件将镜像直接设置为在镜像设置过程中可访问的目标镜像 registry。

您必须在镜像设置配置文件中指定存储后端。这个存储后端可以是本地目录或 Docker v2 registry。oc-mirror 插件在创建镜像的过程中将元数据存储在这个存储后端中。

重要

不要删除或修改 oc-mirror 插件生成的元数据。每次针对同一镜像 registry 运行 oc-mirror 插件时,都必须使用相同的存储后端。

先决条件

  • 您可以访问互联网来获取所需的容器镜像。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 oc-mirror CLI 插件。
  • 您已创建了镜像设置配置文件。

流程

  • 运行 oc mirror 命令将指定镜像集配置中的镜像镜像到指定的 registry:

    $ oc mirror --config=./imageset-config.yaml \1
      docker://registry.example:5000             2
    1
    传递创建的镜像设置配置文件。此流程假设它名为 imageset-config.yaml
    2
    指定要镜像设置文件的 registry。registry 必须以 docker:// 开头。如果为镜像 registry 指定顶层命名空间,则必须在后续执行时使用此命名空间。

验证

  1. 进入生成的 oc-mirror-workspace/ 目录。
  2. 导航到结果目录,例如,results-1639608409/
  3. 验证 ImageContentSourcePolicyCatalogSource 资源是否存在 YAML 文件。

后续步骤

  • 配置集群以使用 oc-mirror 生成的资源。

故障排除

13.2.3.6.2. 镜像在完全断开连接的环境中设置的镜像

要镜像在完全断开连接的环境中设置的镜像,您必须首先将镜像集镜像到磁盘, 然后将磁盘上的镜像集文件镜像到一个镜像

13.2.3.6.2.1. 从镜像镜像到磁盘

您可以使用 oc-mirror 插件生成镜像集,并将内容保存到磁盘。然后,生成的镜像集可以转移到断开连接的环境中,并镜像到目标 registry。

重要

根据镜像设置配置文件中指定的配置,使用 oc-mirror 的镜像可能会将几百 GB 数据下载到磁盘。

您填充镜像 registry 时初始镜像集下载通常是最大镜像。因为您只下载自上次运行命令以来更改的镜像,所以再次运行 oc-mirror 插件时,所生成的镜像集通常比较小。

您必须在镜像设置配置文件中指定存储后端。这个存储后端可以是本地目录或 docker v2 registry。oc-mirror 插件在创建镜像的过程中将元数据存储在这个存储后端中。

重要

不要删除或修改 oc-mirror 插件生成的元数据。每次针对同一镜像 registry 运行 oc-mirror 插件时,都必须使用相同的存储后端。

先决条件

  • 您可以访问互联网来获取所需的容器镜像。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 oc-mirror CLI 插件。
  • 您已创建了镜像设置配置文件。

流程

  • 运行 oc mirror 命令将指定镜像集配置镜像到磁盘:

    $ oc mirror --config=./imageset-config.yaml \1
      file://<path_to_output_directory>          2
    1
    传递创建的镜像设置配置文件。此流程假设它名为 imageset-config.yaml
    2
    指定要输出镜像集文件的目标目录。目标目录路径必须以 file:// 开头。

验证

  1. 进入您的输出目录:

    $ cd <path_to_output_directory>
  2. 验证是否创建了镜像设置 .tar 文件:

    $ ls

    输出示例

    mirror_seq1_000000.tar

后续步骤

  • 将镜像集 .tar 文件移动到断开连接的环境中。

故障排除

13.2.3.6.2.2. 从磁盘镜像到镜像

您可以使用 oc-mirror 插件将生成的镜像集的内容镜像到目标镜像 registry。

先决条件

  • 您已在断开连接的环境中安装了 OpenShift CLI(oc)。
  • 您已在断开连接的环境中安装了 oc-mirror CLI 插件。
  • 已使用 oc mirror 命令生成镜像集文件。
  • 您已将镜像集文件传送到断开连接的环境中。

流程

  • 运行 oc mirror 命令,以处理磁盘上镜像集文件,并将内容镜像到目标镜像 registry:

    $ oc mirror --from=./mirror_seq1_000000.tar \1
      docker://registry.example:5000             2
    1
    传递镜像集 .tar 文件以进行镜像,在本例中名为 mirror_seq1_000000.tar。如果在镜像设置配置文件中指定了 archiveSize 值,则镜像集可能会划分为多个 .tar 文件。在这种情况下,您可以传递一个包含镜像设置 .tar 文件的目录。
    2
    指定要镜像设置文件的 registry。registry 必须以 docker:// 开头。如果为镜像 registry 指定顶层命名空间,则必须在后续执行时使用此命名空间。

    此命令使用镜像集更新镜像 registry,并生成 ImageContentSourcePolicyCatalogSource 资源。

验证

  1. 进入生成的 oc-mirror-workspace/ 目录。
  2. 导航到结果目录,例如,results-1639608409/
  3. 验证 ImageContentSourcePolicyCatalogSource 资源是否存在 YAML 文件。

后续步骤

  • 配置集群以使用 oc-mirror 生成的资源。

故障排除

13.2.3.7. 配置集群以使用 oc-mirror 生成的资源

将镜像设置为镜像 registry 后,您必须将生成的 ImageContentSourcePolicyCatalogSource 和发行版本镜像签名资源应用到集群。

ImageContentSourcePolicy 资源将镜像 registry 与源 registry 关联,并将在线 registry 中的镜像拉取请求重定向到镜像 registry。Operator Lifecycle Manager(OLM)使用 CatalogSource 资源检索有关镜像 registry 中可用 Operator 的信息。发行镜像签名用于验证镜像的发行镜像。

先决条件

  • 您已将镜像设置为断开连接的环境中的 registry 镜像。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 以具有 cluster-admin 角色的用户身份登录 OpenShift CLI。
  2. 运行以下命令,将结果目录中的 YAML 文件应用到集群:

    $ oc apply -f ./oc-mirror-workspace/results-1639608409/
  3. 如果镜像(mirror)镜像,请运行以下命令将发行版本镜像签名应用到集群:

    $ oc apply -f ./oc-mirror-workspace/results-1639608409/release-signatures/
    注意

    如果要镜像 Operator 而不是集群,则不需要运行 $ oc apply -f ./oc-mirror-workspace/results-1639608409/release-signatures/。运行该命令将返回错误,因为没有要应用的发行版本镜像签名。

验证

  1. 运行以下命令验证 ImageContentSourcePolicy 资源是否已成功安装:

    $ oc get imagecontentsourcepolicy
  2. 运行以下命令验证 CatalogSource 资源是否已成功安装:

    $ oc get catalogsource -n openshift-marketplace

13.2.3.8. 保持镜像 registry 内容更新

使用初始镜像集填充目标镜像 registry 后,您必须定期更新它,使其具有最新的内容。如果可能,您可以设置 cron 任务以定期更新镜像 registry。

根据需要更新您的镜像设置配置,以添加或删除 OpenShift Container Platform 和 Operator 版本。从镜像 registry 中修剪移除的镜像。

13.2.3.8.1. 关于更新您的镜像 registry 内容

当您再次运行 oc-mirror 插件时,它会生成一个镜像集,该集合仅包含与之前执行后的全新和更新镜像。因为它只拉取自以前的镜像集的差异,所以所生成的镜像集通常比初始镜像集更小且更快。

重要

生成的镜像集是有序的,且必须推送到目标镜像 registry。您可以从生成的镜像设置归档文件的文件名中获取序列号。

添加新和更新的镜像

根据镜像设置配置中的设置,oc-mirror 的将来执行可能会镜像新的和更新镜像。查看镜像设置配置中的设置,以确保根据需要检索新版本。例如,如果要限制特定版本,可以将 Operator 的最小和最大版本设置为 mirror。另外,您可以将最小版本设置为镜像的起点,但保持对版本范围保持打开状态,以便在以后的 oc-mirror 上执行新的 Operator 版本。省略任何最小或最大版本会为您提供频道中的 Operator 的完整版本历史记录。省略明确指定的频道会为您提供指定 Operator 的所有频道的所有发行版本。省略任何命名 Operator 都会为您提供所有 Operator 的整个目录及其所有版本。

所有这些约束和条件均针对红帽每次调用 oc-mirror 时根据公开发布的内容进行评估。这样,它会自动获取新版本和全新的 Operator。约束只能通过列出所需的 Operator 集合来指定,它不会自动将其他新发布的 Operator 添加到镜像集中。您还可以指定特定的发行版本频道,将镜像限制为只为此频道,而不是任何已添加的新频道。这对于 Operator 产品(如 Red Hat Quay)来说,在其次发行版本中使用不同的发行频道。最后,您可以指定一个特定 Operator 的最大版本,这会导致工具只镜像指定的版本范围,这样您不会自动获得任何更新版本镜像 (mirror) 版本。在所有用例中,您必须更新镜像设置配置文件以扩大 Operator 镜像范围,以获取其他 Operator、新频道和较新版本的 Operator,以便在目标 registry 中提供。

建议将诸如频道规格或版本范围等约束与所选 Operator 的发行策略保持一致。例如,当 Operator 使用 stable 频道时,您应该将镜像限制到该频道,并有可能最小的版本来查找下载卷之间的正确平衡并定期获取稳定更新。如果 Operator 选择了发行版本频道方案,如 stable-3.7,您应该镜像该频道中的所有发行版本。这可让您继续使用 Operator 的补丁版本,如 3.7.1。您还可以定期调整镜像设置配置,为新产品版本添加频道,如 stable-3.8

修剪镜像

如果镜像不再包含在生成和镜像的最新镜像集中,则会自动从目标镜像 registry 中修剪镜像。这可让您轻松管理和清理不需要的内容并回收存储资源。

如果不再需要 OpenShift Container Platform 发行版本或 Operator 版本,您可以修改镜像设置配置以排除它们,并在镜像 (mirror) 后从镜像 registry 中修剪它们。这可以通过调整镜像设置配置文件中的每个 Operator 的最小或最大版本范围设置,或者从目录中镜像 (mirror) 的 Operator 中移除。您还可以从配置文件中删除整个 Operator 目录或整个 OpenShift Container Platform 版本。

重要

在以下情况下,镜像不会自动从目标镜像 registry 中修剪:

  • 如果没有要进行镜像的新的镜像或已更新的镜像
  • 如果您使用技术预览 OCI 功能

另外,如果 Operator publisher 从频道中删除 Operator 版本,则从目标镜像 registry 中删除了删除的版本。

要禁用从目标镜像 registry 中自动修剪镜像,请将 --skip-pruning 标志传递给 oc mirror 命令。

13.2.3.8.2. 更新您的镜像 registry 内容

将初始镜像设置为镜像 registry 后,您可以使用 oc-mirror 插件来保持断开连接的集群更新。

根据您的镜像设置配置,oc-mirror 会自动检测 OpenShift Container Platform 的较新版本,以及在完成 inital mirror 后发布的所选 Operator。建议您定期运行 oc-mirror,例如在每日 cron 作业中运行 oc-mirror,以及时接收产品和安全更新。

先决条件

  • 您已使用 oc-mirror 插件将初始镜像设置为您的镜像 registry。
  • 您可以访问用于进行 oc-mirror 插件的初始执行的存储后端。

    注意

    您必须使用与 oc-mirror 的初始执行相同镜像 registry 的存储后端。不要删除或修改 oc-mirror 插件生成的元数据镜像。

流程

  1. 如有必要,更新您的镜像设置配置文件,以获取新的 OpenShift Container Platform 和 Operator 版本。对于示例镜像使用情况,请参阅 Image set configuration examples
  2. 按照您用来将初始镜像设置为镜像 registry 的步骤操作。具体步骤,请参阅在部分断开连接的环境中镜像镜像集,或在完全断开连接的环境中镜像镜像集

    重要
    • 您必须提供相同的存储后端,以便只创建并镜像不同的镜像集。
    • 如果您在初始镜像集创建过程中为镜像 registry 指定顶层命名空间,则每次针对同一镜像 registry 运行 oc-mirror 插件时都必须使用此命名空间。
  3. 配置集群以使用 oc-mirror 生成的资源。

13.2.3.9. 执行空运行

您可以使用 oc-mirror 来执行空运行,而无需实际镜像(mirror)。这可让您查看要镜像的镜像列表,以及从镜像 registry 修剪的所有镜像。它还允许您在早期版本中捕获与镜像集配置相关的任何错误,或使用生成的镜像列表以及其他工具来执行镜像操作。

先决条件

  • 您可以访问互联网来获取所需的容器镜像。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 oc-mirror CLI 插件。
  • 您已创建了镜像设置配置文件。

流程

  1. 使用 --dry-run 标志运行 oc mirror 命令来执行空运行:

    $ oc mirror --config=./imageset-config.yaml \1
      docker://registry.example:5000            \2
      --dry-run                                  3
    1
    传递创建的镜像设置配置文件。此流程假设它名为 imageset-config.yaml
    2
    指定镜像 registry。在使用 --dry-run 标志时,不会镜像这个 registry。
    3
    使用 --dry-run 标志来生成空运行工件,而不是实际的镜像设置文件。

    输出示例

    Checking push permissions for registry.example:5000
    Creating directory: oc-mirror-workspace/src/publish
    Creating directory: oc-mirror-workspace/src/v2
    Creating directory: oc-mirror-workspace/src/charts
    Creating directory: oc-mirror-workspace/src/release-signatures
    No metadata detected, creating new workspace
    wrote mirroring manifests to oc-mirror-workspace/operators.1658342351/manifests-redhat-operator-index
    
    ...
    
    info: Planning completed in 31.48s
    info: Dry run complete
    Writing image mapping to oc-mirror-workspace/mapping.txt

  2. 进入生成的工作区目录:

    $ cd oc-mirror-workspace/
  3. 查看生成的 mapping.txt 文件。

    此文件包含将要镜像的所有镜像的列表。

  4. 查看生成的 prune-plan.json 文件。

    此文件包含在发布镜像集时从镜像 registry 中修剪的所有镜像的列表。

    注意

    只有在 oc-mirror 命令指向您的镜像 registry 且需要修剪的镜像时,才会生成 prune-plan.json 文件。

13.2.3.10. 以 OCI 格式镜像基于文件的目录 Operator 镜像

您可以使用 oc-mirror 插件以 Open Containerprojects (OCI)镜像格式而不是 Docker v2 格式镜像 Operator。您可以使用 OCI 格式将 Operator 镜像复制到磁盘上基于文件的目录。然后,您可以将本地 OCI 镜像复制到目标镜像 registry。

重要

使用 oc-mirror 插件以 OCI 格式镜像 Operator 镜像只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

使用 OCI 功能时,镜像不会自动从目标镜像 registry 中修剪。

先决条件

  • 您可以访问互联网来获取所需的容器镜像。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 oc-mirror CLI 插件。

流程

  1. 可选:检索您需要的目录和镜像,并将其保存到磁盘上。如果您已在磁盘上有 OCI 格式的目录镜像,您可以跳过这一步。

    1. 创建镜像设置配置文件:

      复制到磁盘的镜像设置配置文件示例

      kind: ImageSetConfiguration
      apiVersion: mirror.openshift.io/v1alpha2
      mirror:
       operators:
       - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
         packages:
         - name: aws-load-balancer-operator

      注意

      使用 OCI 功能时,只有 mirror.operators.catalog 设置可供使用。

      storageConfig 设置将被忽略,而是传递给 oc mirror 命令的位置。

    2. 运行 oc mirror 命令将指定镜像集配置镜像到磁盘:

      $ oc mirror --config=./imageset-config.yaml \ 1
        --use-oci-feature \                         2
        --oci-feature-action=copy \                 3
        oci://my-oci-catalog                        4
      1
      传递镜像设置配置文件。此流程假设它名为 imageset-config.yaml
      2
      使用 --use-oci-feature 标志来启用 OCI 功能。
      3
      要将目录复制到磁盘,请将 --oci-feature-action 标志设置为 copy
      4
      在要输出目录的磁盘上指定一个目录。此流程假设它名为 my-oci-catalog。该路径必须以 oci:// 开头。如果指定的目录不是完整路径,则会在运行 oc mirror 命令的当前工作目录中创建该目录。
      注意

      您可以选择使用 --oci-registries-config 标志来指定到 TOML 格式的 registry.conf 文件的路径。您可以使用它来从不同的 registry 中镜像,如用于测试的预生产位置,而无需更改镜像设置配置文件。

      registry.conf 文件示例

      [[registry]]
       location = "registry.redhat.io:5000"
       insecure = false
       blocked = false
       mirror-by-digest-only = true
       prefix = ""
       [[registry.mirror]]
          location = "preprod-registry.example.com"
          insecure = false

      registry.mirror 部分中的 location 字段设置为您要从中拉取镜像的替代 registry 位置。registry 部分中的 location 字段必须与您在镜像设置配置文件中指定的 registry 位置相同。

    3. 列出目录内容并验证是否已创建以下目录:

      $ ls -l

      输出示例

      my-oci-catalog      1
      oc-mirror-workspace 2
      olm_artifacts       3

      1
      包含 OCI 目录的目录。此流程假设它名为 my-oci-catalog
      2
      以原始格式在目录中包含每个镜像的目录。
      3
      包含描述此目录引用的 Operator 捆绑包的文件的目录。
  2. 更新镜像设置配置文件,以指定磁盘上要镜像到目标镜像 registry 的目录位置:

    镜像设置配置文件示例,用于镜像 registry

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v1alpha2
    mirror:
     operators:
     - catalog: oci:///home/user/oc-mirror/my-oci-catalog/redhat-operator-index 1
       packages:
       - name: aws-load-balancer-operator

    1
    指定磁盘上 OCI 目录位置的绝对路径。此流程假设您使用 my-oci-catalog 作为目录并镜像 redhat-operator-index 目录。该路径必须以 oci:// 开头。
  3. 运行 oc mirror 命令,以处理磁盘上镜像集文件,并将内容镜像到目标镜像 registry:

    $ oc mirror --config=./imageset-config.yaml \ 1
      --use-oci-feature \                         2
      --oci-feature-action=mirror \               3
      docker://registry.example:5000              4
    1
    传递更新的镜像设置配置文件。此流程假设它名为 imageset-config.yaml
    2
    使用 --use-oci-feature 标志来启用 OCI 功能。
    3
    要将目录镜像到目标镜像 registry,请将 --oci-feature-action 标志设置为 mirror
    4
    指定要镜像设置文件的 registry。registry 必须以 docker:// 开头。如果为镜像 registry 指定顶层命名空间,则必须在后续执行时使用此命名空间。
    注意

    您可以选择使用 --oci-insecure-signature-policy 标志将签名推送到目标镜像 registry。

后续步骤

  • 配置集群以使用 oc-mirror 生成的资源。

其他资源

13.2.3.11. 镜像设置配置参数

oc-mirror 插件需要一个镜像设置配置文件,该文件定义哪些镜像要镜像(mirror)。下表列出了 ImageSetConfiguration 资源的可用参数。

表 13.1. ImageSetConfiguration 参数
参数描述

apiVersion

ImageSetConfiguration 内容的 API 版本。

字符串.例如: mirror.openshift.io/v1alpha2

archiveSize

镜像集中的每个存档文件的最大大小(以 GiB 为单位)。

整数.例如: 4

mirror

镜像集的配置。

对象

mirror.additionalImages

镜像集的额外镜像配置。

对象数组。例如:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest

mirror.additionalImages.name

要 mirror 的镜像的标签或摘要。

字符串.例如: registry.redhat.io/ubi8/ubi:latest

mirror.blockedImages

阻止 mirror 的镜像的完整标签、摘要或模式。

字符串数组。例如: docker.io/library/alpine

mirror.helm

镜像集的 helm 配置。请注意,oc-mirror 插件只支持 helm chart,在呈现时不需要用户输入。

对象

mirror.helm.local

要镜像的本地 helm chart。

对象数组。例如:

local:
  - name: podinfo
    path: /test/podinfo-5.0.0.tar.gz

mirror.helm.local.name

要镜像的本地 helm chart 的名称。

字符串.例如: podinfo

mirror.helm.local.path

到镜像的本地 helm chart 的路径。

字符串.例如: /test/podinfo-5.0.0.tar.gz

mirror.helm.repositories

从其中镜像的的远程 helm 软件仓库。

对象数组。例如:

repositories:
  - name: podinfo
    url: https://example.github.io/podinfo
    charts:
      - name: podinfo
        version: 5.0.0

mirror.helm.repositories.name

从其中镜像(mirror)的 helm 存储库的名称。

字符串.例如: podinfo

mirror.helm.repositories.url

从其中镜像(mirror)的 helm 存储库的 URL。

字符串.例如: https://example.github.io/podinfo

mirror.helm.repositories.charts

要镜像的远程 helm chart。

对象数组。

mirror.helm.repositories.charts.name

要镜像的 helm chart 的名称。

字符串.例如: podinfo

mirror.helm.repositories.charts.version

要镜像命名 helm chart 的版本。

字符串.例如: 5.0.0

mirror.operators

镜像集的 Operator 配置。

对象数组。例如:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'

mirror.operators.catalog

包括在镜像集中的 Operator 目录。

字符串.例如:registry.redhat.io/redhat/redhat-operator-index:v4.12

mirror.operators.full

true 时,下载完整的目录、Operator 软件包或 Operator 频道。

布尔值.默认值为 false

mirror.operators.packages

Operator 软件包配置。

对象数组。例如:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'

mirror.operators.packages.name

镜像集中要包含的 Operator 软件包名称

字符串.例如: elasticsearch-operator

mirror.operators.packages.channels

Operator 软件包频道配置。

对象

mirror.operators.packages.channels.name

Operator 频道名称(软件包中唯一)要包括在镜像集中。

字符串.例如: faststable-v4.12

mirror.operators.packages.channels.maxVersion

Operator 镜像的最高版本,在其中存在所有频道。详情请查看以下备注。

字符串.例如: 5.2.3-31

mirror.operators.packages.channels.minBundle

要包括的最小捆绑包的名称,以及将图中到频道头的所有捆绑包。仅在命名捆绑包没有语义版本元数据时设置此字段。

字符串.例如: bundleName

mirror.operators.packages.channels.minVersion

Operator 的最低版本,用于镜像存在的所有频道。详情请查看以下备注。

字符串.例如: 5.2.3-31

mirror.operators.packages.maxVersion

Operator 最高版本,可跨所有存在的频道进行镜像。详情请查看以下备注。

字符串.例如: 5.2.3-31

mirror.operators.packages.minVersion

Operator 的最低版本,用于镜像存在的所有频道。详情请查看以下备注。

字符串.例如: 5.2.3-31

mirror.operators.skipDependencies

如果为 true,则不会包含捆绑包的依赖项。

布尔值.默认值为 false

mirror.operators.targetName

将引用的目录镜像为可选的替代名称。

字符串.例如: my-operator-catalog

mirror.operators.targetTag

附加到 targetName 的可选替代标签。

字符串.例如: v1

mirror.platform

镜像集的平台配置。

对象

mirror.platform.architectures

要镜像的平台发行版本有效负载的架构。

字符串数组。例如:

architectures:
  - amd64
  - arm64

mirror.platform.channels

镜像集的平台频道配置。

对象数组。例如:

channels:
  - name: stable-4.10
  - name: stable-4.12

mirror.platform.channels.full

true 时,将 minVersion 设置为频道中的第一个发行版本,将 maxVersion 设置为该频道的最后一个发行版本。

布尔值.默认值为 false

mirror.platform.channels.name

发行频道的名称。

字符串.例如: stable-4.12

mirror.platform.channels.minVersion

要镜像引用的平台的最低版本。

字符串.例如: 4.9.6

mirror.platform.channels.maxVersion

要镜像引用的平台的最高版本。

字符串.例如: 4.12.1

mirror.platform.channels.shortestPath

切换最短的路径镜像或完整范围镜像。

布尔值.默认值为 false

mirror.platform.channels.type

要镜像的平台的类型。

字符串.例如: ocpokd。默认为 ocp

mirror.platform.graph

指明是否将 OSUS 图表添加到镜像集中,然后发布到镜像。

布尔值.默认值为 false

storageConfig

镜像集的后端配置。

对象

storageConfig.local

镜像集的本地后端配置。

对象

storageConfig.local.path

包含镜像设置元数据的目录路径。

字符串.例如: ./path/to/dir/

storageConfig.registry

镜像集的 registry 后端配置。

对象

storageConfig.registry.imageURL

后端 registry URI。可以选择在 URI 中包含命名空间引用。

字符串.例如: quay.io/myuser/imageset:metadata

storageConfig.registry.skipTLS

(可选)跳过引用的后端 registry 的 TLS 验证。

布尔值.默认值为 false

注意

使用 minVersionmaxVersion 属性过滤特定 Operator 版本范围可能会导致多个频道头错误。错误信息将显示有多个频道头。这是因为在应用过滤器时,Operator 的更新图会被截断。

Operator Lifecycle Manager 要求每个 operator 频道都包含一个端点组成更新图表的版本,即 Operator 的最新版本。在应用图形的过滤器范围时,可以进入两个或多个独立图形或具有多个端点的图形。

要避免这个错误,请不要过滤 Operator 的最新版本。如果您仍然遇到错误,根据具体的 Operator,增加 maxVersion 属性,或者减少 minVersion 属性。因为每个 Operator 图都可以不同,所以您可能需要根据流程调整这些值,直到错误丢失为止。

13.2.3.12. 镜像设置配置示例

以下 ImageSetConfiguration 文件示例演示了各种镜像用例的配置。

使用案例:包含最短的 OpenShift Container Platform 升级路径

以下 ImageSetConfiguration 文件使用本地存储后端,并包括所有 OpenShift Container Platform 版本,以及从最低 4.11.37 版本到最大 4.12.15 版本的升级路径。

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  platform:
    channels:
      - name: stable-4.12
        minVersion: 4.11.37
        maxVersion: 4.12.15
        shortestPath: true

使用案例:包含从最小到最新的 OpenShift Container Platform 的所有版本

以下 ImageSetConfiguration 文件使用一个 registry 存储后端,并包括从最小 4.10.10 迁移到频道中最新版本的所有 OpenShift Container Platform 版本。

对于每个使用此镜像集合配置的 oc-mirror,评估 stable-4.10 频道的最新发行版本,因此定期运行 oc-mirror 可确保您自动收到最新版本的 OpenShift Container Platform 镜像。

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  registry:
    imageURL: example.com/mirror/oc-mirror-metadata
    skipTLS: false
mirror:
  platform:
    channels:
      - name: stable-4.10
        minVersion: 4.10.10

使用案例:包含从最低到最新的 Operator 版本

以下 ImageSetConfiguration 文件使用本地存储后端,仅包含 stable 频道中从 4.0.1 及之后的版本开始的 Red Hat Advanced Cluster Security for Kubernetes Operator。

注意

当您指定了一个最小或最大版本范围时,可能不会接收该范围内的所有 Operator 版本。

默认情况下,oc-mirror 排除了 Operator Lifecycle Manager (OLM)规格中跳过或被较新的版本替换的任何版本。跳过的 Operator 版本可能会受到 CVE 或包含错误的影响。改为使用较新版本。有关跳过和替换版本的更多信息,请参阅使用 OLM 创建更新图表

要接收指定范围内的所有 Operator 版本,您可以将 mirror.operators.full 字段设置为 true

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
      packages:
        - name: rhacs-operator
          channels:
          - name: stable
            minVersion: 4.0.1

注意

要指定最大版本而不是最新的版本,请设置 mirror.operators.packages.channels.maxVersion 字段。

使用案例:包含 Nutanix CSI Operator

以下 ImageSetConfiguration 文件使用本地存储后端,并包括 Nutanix CSI Operator、OpenShift Update Service (OSUS)图形镜像以及额外的 Red Hat Universal Base Image (UBI)。

ImageSetConfiguration 文件示例

kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v1alpha2
storageConfig:
  registry:
    imageURL: mylocalregistry/ocp-mirror/openshift4
    skipTLS: false
mirror:
  platform:
    channels:
    - name: stable-4.12
      type: ocp
    graph: true
  operators:
  - catalog: registry.redhat.io/redhat/certified-operator-index:v4.12
    packages:
    - name: nutanixcsioperator
      channels:
      - name: stable
  additionalImages:
  - name: registry.redhat.io/ubi9/ubi:latest

使用案例:包含默认 Operator 频道

以下 ImageSetConfiguration 文件包括 OpenShift Elasticsearch Operator 的stable-5.7stable 频道。即使只需要 stable-5.7 频道中的软件包,stable 频道也必须包含在 ImageSetConfiguration 文件中,因为它是 Operator 的默认频道。即使您没有使用该频道中的捆绑包,还必须始终包含 Operator 软件包的默认频道。

提示

您可以运行以下命令来找到默认频道:oc mirror list operators --catalog=<catalog_name> --package=<package_name>

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  registry:
    imageURL: example.com/mirror/oc-mirror-metadata
    skipTLS: false
mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
    packages:
    - name: elasticsearch-operator
      channels:
      - name: stable-5.7
      - name: stable

使用案例:包含整个目录(所有版本)

以下 ImageSetConfiguration 文件将 mirror.operators.full 字段设置为 true,使其包含整个 Operator 目录的所有版本。

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  registry:
    imageURL: example.com/mirror/oc-mirror-metadata
    skipTLS: false
mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
      full: true

使用案例:包含整个目录(仅限频道头)

以下 ImageSetConfiguration 文件包含整个 Operator 目录的频道头。

默认情况下,对于目录中的每个 Operator,oc-mirror 都包含来自默认频道的最新 Operator 版本(频道头)。如果要镜像所有 Operator 版本,而不仅仅是频道头,您必须将 mirror.operators.full 字段设置为 true

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  registry:
    imageURL: example.com/mirror/oc-mirror-metadata
    skipTLS: false
mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12

用例:包含任意镜像和 helm chart

以下 ImageSetConfiguration 文件使用 registry 存储后端,并包含 helm chart 和额外的 Red Hat Universal Base Image(UBI)。

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
archiveSize: 4
storageConfig:
  registry:
    imageURL: example.com/mirror/oc-mirror-metadata
    skipTLS: false
mirror:
 platform:
   architectures:
     - "s390x"
   channels:
     - name: stable-4.12
 operators:
   - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
 helm:
   repositories:
     - name: redhat-helm-charts
       url: https://raw.githubusercontent.com/redhat-developer/redhat-helm-charts/master
       charts:
         - name: ibm-mongodb-enterprise-helm
           version: 0.2.0
 additionalImages:
   - name: registry.redhat.io/ubi9/ubi:latest

13.2.3.13. oc-mirror 的命令参考

下表描述了 oc mirror 子命令和标志:

表 13.2. oc mirror 子命令
子命令描述

completion

为指定的 shell 生成自动完成脚本。

describe

输出镜像集合的内容。

帮助

显示有关任何子命令的帮助。

init

输出初始镜像设置配置模板。

list

列出可用平台和 Operator 内容及其版本。

version

输出 oc-mirror 版本。

表 13.3. oc mirror 标记
标记描述

-c, --config <string>

指定镜像设置配置文件的路径。

--continue-on-error

如果发生任何非镜像拉取相关的错误,请继续并尝试进行镜像(mirror)。

--dest-skip-tls

禁用目标 registry 的 TLS 验证。

--dest-use-http

使用 HTTP 用于目标 registry。

--dry-run

仅输出操作情况,不实际 mirror 镜像。生成 mapping.txtpruning-plan.json 文件。

--from <string>

指定由执行 oc-mirror 生成的镜像设置归档的路径,以加载到目标 registry 中。

-h,--help

显示帮助。

--ignore-history

下载镜像和打包层时,忽略过去的镜像。禁用增量镜像,并可能会下载更多数据。

--manifests-only

ImageContentSourcePolicy 对象生成清单,将集群配置为使用镜像 registry,但不实际镜像任何镜像。要使用此标志,您必须使用 --from 标志传递镜像集存档。

--max-nested-paths <int>

指定限制嵌套路径的目标 registry 的最大嵌套路径数。默认值为 2

--max-per-registry <int>

指定每个 registry 允许的并发请求数。默认值为 6

--oci-feature-action

使用技术预览 OCI 功能时要执行的操作。选项为 copymirror

--oci-insecure-signature-policy

在使用技术预览 OCI 功能时不要推送签名。

--oci-registries-config

提供 registry 配置文件,以指定在使用技术预览 OCI 功能时要复制的替代 registry 位置。

--skip-cleanup

跳过删除工件目录。

--skip-image-pin

不要将镜像标签替换为 Operator 目录中的摘要。

--skip-metadata-check

发布镜像集时跳过元数据。只有在使用 --ignore-history 创建镜像集时才建议使用。

--skip-missing

如果没有找到镜像,则跳过它而不是报告错误并中止执行。不适用于在镜像设置配置中明确指定的自定义镜像。

--skip-pruning

从目标镜像 registry 禁用自动修剪镜像。

--skip-verification

跳过摘要验证。

--source-skip-tls

为源 registry 禁用 TLS 验证。

--source-use-http

将普通 HTTP 用于源 registry。

--use-oci-feature

使用技术预览 OCI 功能复制 OCI 格式的镜像。

-v, --verbose <int>

指定日志级别详细程度的数量。有效值为 0 - 9。默认值为 0

13.2.4. 使用 oc adm release mirror 命令 mirror 镜像

重要

为了避免 OpenShift Update Service 应用程序过量内存用量,您必须将发行镜像镜像到单独的存储库,如以下步骤所述。

先决条件

  • 您已将镜像 registry 配置为在受限网络中使用,并可访问您配置的证书和凭证。
  • 您已从 Red Hat OpenShift Cluster Manager 下载了 pull secret,并已修改为包含镜像存储库身份验证信息。
  • 如果您使用自签名证书,已在证书中指定 Subject Alternative Name。

流程

  1. 使用 Red Hat OpenShift Container Platform Upgrade Graph visualizer 和 update planner 计划从一个版本升级到另一个版本。OpenShift Upgrade Graph 提供频道图形,并演示了如何确认您的当前和预定集群版本之间有更新路径。
  2. 设置所需的环境变量:

    1. 导出发行版本信息:

      $ export OCP_RELEASE=<release_version>

      对于 <release_version>,请指定与升级到的 OpenShift Container Platform 版本对应的标签,如 4.5.4

    2. 导出本地 registry 名称和主机端口:

      $ LOCAL_REGISTRY='<local_registry_host_name>:<local_registry_host_port>'

      对于 <local_registry_host_name>,请指定镜像存储库的 registry 域名;对于 <local_registry_host_port>,请指定用于提供内容的端口。

    3. 导出本地存储库名称:

      $ LOCAL_REPOSITORY='<local_repository_name>'

      对于 <local_repository_name>,请指定要在 registry 中创建的仓库名称,如 ocp4/openshift4

    4. 如果使用 OpenShift Update Service,请导出一个额外的本地存储库名称,使其包含发行镜像:

      $ LOCAL_RELEASE_IMAGES_REPOSITORY='<local_release_images_repository_name>'

      对于 <local_release_images_repository_name>,请指定要在 registry 中创建的仓库名称,如 ocp4/openshift4-release-images

    5. 导出要进行镜像的存储库名称:

      $ PRODUCT_REPO='openshift-release-dev'

      对于生产环境版本,必须指定 openshift-release-dev

    6. 导出 registry pull secret 的路径:

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'

      对于 <path_to_pull_secret>,请指定您创建的镜像 registry 的 pull secret 的绝对路径和文件名。

      注意

      如果您的集群使用 ImageContentSourcePolicy 对象来配置存储库镜像,则只能将全局 pull secret 用于镜像 registry。您不能在项目中添加 pull secret。

    7. 导出发行版本镜像:

      $ RELEASE_NAME="ocp-release"

      对于生产环境版本,您必须指定 ocp-release

    8. 为您的服务器导出构架类型,如 x86_64

      $ ARCHITECTURE=<server_architecture>
    9. 导出托管镜像的目录的路径:

      $ REMOVABLE_MEDIA_PATH=<path> 1
      1
      指定完整路径,包括开始的前斜杠(/)字符。
  3. 查看要镜像的镜像和配置清单:

    $ oc adm release mirror -a ${LOCAL_SECRET_JSON} --to-dir=${REMOVABLE_MEDIA_PATH}/mirror quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} --dry-run
  4. 将版本镜像镜像(mirror)到镜像 registry。

    • 如果您的镜像主机无法访问互联网,请执行以下操作:

      1. 将可移动介质连接到连接到互联网的系统。
      2. 将镜像和配置清单镜像到可移动介质的目录中:

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON} --to-dir=${REMOVABLE_MEDIA_PATH}/mirror quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE}
        注意

        此命令还会生成镜像发行镜像签名配置映射并将其保存到可移动介质中。

      3. 将介质上传到受限网络环境中,并将镜像上传到本地容器 registry。

        $ oc image mirror  -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} 1
        1
        对于 REMOVABLE_MEDIA_PATH,您必须使用与镜像镜像时指定的同一路径。
      4. 使用 oc 命令行界面(CLI)登录到您要升级的集群。
      5. 将镜像发行镜像签名配置映射应用到连接的集群:

        $ oc apply -f ${REMOVABLE_MEDIA_PATH}/mirror/config/<image_signature_file> 1
        1
        对于 <image_signature_file>,指定文件的路径和名称,例如 signature-sha256-81154f5c03294534.yaml
      6. 如果使用 OpenShift Update Service,请将发行镜像镜像到单独的存储库:

        $ oc image mirror -a ${LOCAL_SECRET_JSON} ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE} ${LOCAL_REGISTRY}/${LOCAL_RELEASE_IMAGES_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}
    • 如果本地容器 registry 和集群连接到镜像主机,请执行以下操作:

      1. 将发行镜像直接推送到本地 registry,并使用以下命令将配置映射应用到集群:

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON} --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \
          --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} --apply-release-image-signature
        注意

        如果包含 --apply-release-image-signature 选项,不要为镜像签名验证创建配置映射。

      2. 如果使用 OpenShift Update Service,请将发行镜像镜像到单独的存储库:

        $ oc image mirror -a ${LOCAL_SECRET_JSON} ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE} ${LOCAL_REGISTRY}/${LOCAL_RELEASE_IMAGES_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.