断开连接的安装镜像


OpenShift Container Platform 4.16

同步 (mirror) 安装容器镜像

Red Hat OpenShift Documentation Team

摘要

本文档论述了如何为断开连接的 OpenShift Container Platform 安装同步(mirror)安装容器镜像。

第 1 章 关于断开连接的安装镜像

作为集群管理员,您可以使用镜像 registry 来确保集群只使用满足您机构对外部内容控制的容器镜像。

您必须将所需的容器镜像镜像(mirror)到断开连接的环境中,然后才能安装并置备集群。要镜像这些容器镜像,您必须有一个镜像 registry。考虑以下用于创建和使用镜像 registry 的选项:

  • 如果您已有容器镜像 registry,如 Red Hat Quay,您可以使用它作为您的镜像 registry。如果您还没有 registry,您必须创建一个。
  • 建立 registry 后,您需要镜像工具。要在断开连接的环境中将 OpenShift Container Platform 镜像存储库镜像到镜像 registry,您可以使用 oc-mirror OpenShift CLI (oc)插件。oc-mirror 插件是一个单一工具,它会将所有所需的 OpenShift Container Platform 内容和其他镜像(mirror)镜像到您的镜像 registry。oc-mirror 插件是镜像的首选方法。
  • 另外,您可以使用 oc adm 命令 mirror OpenShift Container Platform 的发行版本和目录镜像。

mirror registry for Red Hat OpenShift 是一个小型灵活的容器 registry,作为目标,用于为断开连接的安装镜像(mirror)的 OpenShift Container Platform 所需的容器镜像。

如果您已有容器镜像 registry(如 Red Hat Quay),您可以跳过本节并直接 镜像 OpenShift Container Platform 镜像存储库

重要

mirror registry for Red Hat OpenShift 旨在替代 Red Hat Quay 的生产环境部署。

2.1. 先决条件

  • OpenShift Container Platform 订阅。
  • 安装了 Podman 3.4.2 或更高版本以及 OpenSSL 的 Red Hat Enterprise Linux (RHEL) 8 和 9。
  • Red Hat Quay 服务的完全限定域名,它必须通过 DNS 服务器解析。
  • 目标主机上的基于密钥的 SSH 连接。为本地安装自动生成 SSH 密钥。对于远程主机,您必须生成自己的 SSH 密钥。
  • 2 个或更多 vCPU。
  • 8 GB RAM。
  • OpenShift Container Platform 4.16 发行镜像大约需要 12 GB;OpenShift Container Platform 4.16 发行镜像和 OpenShift Container Platform 4.16 Red Hat Operator 镜像大约需要 358 GB。

    重要
    • 每个流推荐具有 1 TB 或更多空间。
    • 这些要求基于本地测试结果,且只测试了发行镜像和 Operator 镜像。存储要求可能会因您的组织的需求而有所不同。例如,当镜像了多个 z-streams 时,则可能需要更多空间。您可以使用标准 Red Hat Quay 功能 或适当的 API 调用来 删除不必要的镜像并释放空间。

2.2. Red Hat OpenShift 简介的镜像(mirror)registry

对于断开连接的 OpenShift Container Platform 部署,需要一个容器 registry 来安装集群。要在这样的集群中运行 production-grade registry 服务,您必须创建一个单独的 registry 部署来安装第一个集群。mirror registry for Red Hat OpenShift 可以解决这个问题,并包含在每个 OpenShift 订阅中。它可用于从 OpenShift 控制台 Downloads页面下载。

mirror registry for Red Hat OpenShift 允许用户使用 mirror-registry 命令行界面(CLI)工具安装一个小型的 Red Hat Quay 版本及其所需的组件。mirror registry for Red Hat OpenShift 会自动部署,带有预先配置的本地存储和本地数据库。它还包括自动生成的用户凭证和访问权限,其中只有一个输入集,且不需要额外配置选项。

mirror registry for Red Hat OpenShift 提供了一个预先确定的网络配置,并在成功时报告部署的组件凭证并访问 URL。另外还提供了一组有限的可选配置输入,如完全限定域名(FQDN)服务、超级用户名称和密码,以及自定义 TLS 证书。这为用户提供了一个容器 registry,以便在受限网络环境中运行 OpenShift Container Platform 时,轻松创建所有 OpenShift Container Platform 发行版本内容的离线镜像。

如果在安装环境中已有另一个容器 registry,则使用 mirror registry for Red Hat OpenShift 是可选的。

2.2.1. Mirror registry for Red Hat OpenShift 限制

以下限制适用于 Red Hat OpenShift 的镜像 registry

  • mirror registry for Red Hat OpenShift 不是一个高度可用的 registry,只支持本地文件系统存储。它并不适用于 OpenShift Container Platform 替换 Red Hat Quay 或内部镜像 registry。
  • mirror registry for Red Hat OpenShift 旨在替代 Red Hat Quay 的生产环境部署。
  • mirror registry for Red Hat OpenShift 只支持托管安装断开连接的 OpenShift Container Platform 集群(如发行镜像或 Red Hat Operator 镜像)所需的镜像。它使用 Red Hat Enterprise Linux (RHEL)机器上的本地存储,RHEL 支持的存储则由 mirror registry for Red Hat OpenShift 支持。

    注意

    因为 mirror registry for Red Hat OpenShift 使用本地存储,所以您应该了解镜像镜像时消耗的存储使用量,并使用 Red Hat Quay 的垃圾回收功能来缓解潜在的问题。有关此功能的更多信息,请参阅"Red Hat Quay 垃圾回收"。

  • 对于推送到 Red Hat OpenShift for bootstrap 目的的红帽产品镜像 的支持,每个相应的产品订阅会涵盖有效的订阅。进一步启用 bootstrap 体验的例外列表可在 自助管理的 Red Hat OpenShift 大小和订阅指南 中找到。
  • 客户构建的内容不应由 mirror registry for Red Hat OpenShift 托管。
  • 不建议将 mirror registry for Red Hat OpenShift 与多个集群一起使用,因为多个集群可以在更新集群时创建单点故障。反之,使用 mirror registry for Red Hat OpenShift 安装一个集群,该集群可以托管一个生产环境级别的、高度可用的 registry,如 Red Hat Quay,可将 OpenShift Container Platform 内容提供给其他集群。

此流程解释了如何使用 mirror-registry 安装程序工具在本地主机上安装 mirror registry for Red Hat OpenShift。这样,用户可以创建在端口 443 上运行的本地主机 registry,以存储 OpenShift Container Platform 镜像的镜像。

注意

使用 mirror-registry CLI 工具安装 mirror registry for Red Hat OpenShift 对机器进行了几个更改。安装后,会创建一个 $HOME/quay-install 目录,其中包含安装文件、本地存储和配置捆绑包。如果部署目标是本地主机,则生成可信 SSH 密钥,并且设置主机计算机上的 systemd 文件,以确保容器运行时持久。另外,会创建一个名为 init 的初始用户,并自动生成的密码。所有访问凭证都会在安装例程的末尾打印。

流程

  1. 在 OpenShift 控制台 Downloads 页面中下载最新版本的 mirror registry for Red Hat OpenShiftmirror-registry.tar.gz 软件包。
  2. 使用 mirror-registry 工具,在本地主机上安装 mirror registry for Red Hat OpenShift。有关可用标志的完整列表,请参阅 "mirror registry for Red Hat OpenShift flags"。

    $ ./mirror-registry install \
      --quayHostname <host_example_com> \
      --quayRoot <example_directory_name>
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,使用安装期间生成的用户名和密码登录 registry:

    $ podman login -u init \
      -p <password> \
      <host_example_com>:8443> \
      --tls-verify=false 
    1
    Copy to Clipboard Toggle word wrap
    1
    您可以通过将您的系统配置为信任生成的 rootCA 证书来避免运行 --tls-verify=false。如需更多信息,请参阅"保护 Red Hat Quay"和"将系统配置为信任证书颁发机构"。
    注意

    您还可以在安装后通过 https://<host.example.com>:8443 访问 UI 登录。

  4. 您可以在登录后镜像 OpenShift Container Platform 镜像。根据您的需要,请参阅本文档的"镜像 OpenShift Container Platform 镜像存储库"或"镜像 Operator 目录"部分以用于此文档。

    注意

    如果因为存储层问题导致 Red Hat OpenShift 镜像存储了镜像 registry 存在问题,您可以在更稳定的存储上重新镜像 OpenShift Container Platform 镜像或重新安装 registry。

此流程解释了如何使用 upgrade 命令从本地主机更新 mirror registry for Red Hat OpenShift。更新至最新版本可确保新的功能、错误修复和安全漏洞修复。

重要

当从版本 1 升级到版本 2 时,请注意以下限制:

  • worker 数量被设置为 1,因为 SQLite 中不允许多个写入。
  • 您不能使用 mirror registry for Red Hat OpenShift 用户接口 (UP)。
  • 不要在升级过程中访问 sqlite-storage Podman 卷。
  • 镜像 registry 会出现间歇性停机时间,因为它会在升级过程中重启。
  • PostgreSQL 数据在 /$HOME/quay-install/quay-postgres-backup/ 目录下备份,以进行恢复。

先决条件

  • 您已在本地主机上安装了 Red Hat OpenShift 的镜像 registry

流程

  • 如果您要将 mirror registry for Red Hat OpenShift 从 1.3 → 2.y 升级,且您的安装目录默认为 /etc/quay-install,您可以输入以下命令:

    $ sudo ./mirror-registry upgrade -v
    Copy to Clipboard Toggle word wrap
    注意
    • Mirror registry for Red Hat OpenShift 将 Red Hat Quay 存储、Postgres 数据和 /etc/quay-install 数据的 Podman 卷迁移到新的 $HOME/quay-install 位置。这可让您在以后的升级过程中使用没有- quayRoot 标记的 mirror registry for Red Hat OpenShift
    • 使用 ./mirror-registry upgrade -v 标志升级 mirror registry for Red Hat OpenShift 时需要包括在创建 mirror registry 时使用的相同凭证。例如,如果您安装了带有- quayHostname <host_example_com&gt; 和 --quayRoot <example_directory_name> 的 Red Hat OpenShift 的镜像 registry,则必须包含该字符串才能正确升级镜像 registry。
  • 如果您要将 mirror registry for Red Hat OpenShift 从 1.3 升级到 2.y,且您在 1.y 部署中使用自定义 quay 配置和存储目录,则必须传递-- quayRoot 和- quayStorage 标志。例如:

    $ sudo ./mirror-registry upgrade --quayHostname <host_example_com> --quayRoot <example_directory_name>  --quayStorage <example_directory_name>/quay-storage -v
    Copy to Clipboard Toggle word wrap
  • 如果您要从 1.3 → 2.y 升级 mirror registry for Red Hat OpenShift,并希望指定自定义 SQLite 存储路径,您必须传递-- sqliteStorage 标志,例如:

    $ sudo ./mirror-registry upgrade --sqliteStorage <example_directory_name>/sqlite-storage -v
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,确保 mirror registry for Red Hat OpenShift 已更新:

    $ podman ps
    Copy to Clipboard Toggle word wrap

    输出示例

    registry.redhat.io/quay/quay-rhel8:v3.12.10
    Copy to Clipboard Toggle word wrap

此流程解释了如何使用 mirror-registry 工具在远程主机上安装 mirror registry for Red Hat OpenShift。这样,用户可以创建 registry 来保存 OpenShift Container Platform 镜像的镜像。

注意

使用 mirror-registry CLI 工具安装 mirror registry for Red Hat OpenShift 对机器进行了几个更改。安装后,会创建一个 $HOME/quay-install 目录,其中包含安装文件、本地存储和配置捆绑包。如果部署目标是本地主机,则生成可信 SSH 密钥,并且设置主机计算机上的 systemd 文件,以确保容器运行时持久。另外,会创建一个名为 init 的初始用户,并自动生成的密码。所有访问凭证都会在安装例程的末尾打印。

流程

  1. 在 OpenShift 控制台 Downloads 页面中下载最新版本的 mirror registry for Red Hat OpenShiftmirror-registry.tar.gz 软件包。
  2. 使用 mirror-registry 工具,在本地主机上安装 mirror registry for Red Hat OpenShift。有关可用标志的完整列表,请参阅 "mirror registry for Red Hat OpenShift flags"。

    $ ./mirror-registry install -v \
      --targetHostname <host_example_com> \
      --targetUsername <example_user> \
      -k ~/.ssh/my_ssh_key \
      --quayHostname <host_example_com> \
      --quayRoot <example_directory_name>
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,使用安装期间生成的用户名和密码登录 到镜像的 registry:

    $ podman login -u init \
      -p <password> \
      <host_example_com>:8443> \
      --tls-verify=false 
    1
    Copy to Clipboard Toggle word wrap
    1
    您可以通过将您的系统配置为信任生成的 rootCA 证书来避免运行 --tls-verify=false。如需更多信息,请参阅"使用 SSL 保护到 Red Hat Quay 的连接"和"将系统配置为信任证书颁发机构"。
    注意

    您还可以在安装后通过 https://<host.example.com>:8443 访问 UI 登录。

  4. 您可以在登录后镜像 OpenShift Container Platform 镜像。根据您的需要,请参阅本文档的"镜像 OpenShift Container Platform 镜像存储库"或"镜像 Operator 目录"部分以用于此文档。

    注意

    如果因为存储层问题导致 Red Hat OpenShift 镜像存储了镜像 registry 存在问题,您可以在更稳定的存储上重新镜像 OpenShift Container Platform 镜像或重新安装 registry。

此流程解释了如何使用 upgrade 命令从远程主机更新 Red Hat OpenShift 的镜像 registry。更新至最新版本可确保程序错误修复和安全漏洞。

重要

当从版本 1 升级到版本 2 时,请注意以下限制:

  • worker 数量被设置为 1,因为 SQLite 中不允许多个写入。
  • 您不能使用 mirror registry for Red Hat OpenShift 用户接口 (UP)。
  • 不要在升级过程中访问 sqlite-storage Podman 卷。
  • 镜像 registry 会出现间歇性停机时间,因为它会在升级过程中重启。
  • PostgreSQL 数据在 /$HOME/quay-install/quay-postgres-backup/ 目录下备份,以进行恢复。

先决条件

  • 您已在远程主机上安装了 mirror registry for Red Hat OpenShift

流程

  • 要从远程主机升级 Red Hat OpenShift 的镜像 registry,请输入以下命令:

    $ ./mirror-registry upgrade -v --targetHostname <remote_host_url> --targetUsername <user_name> -k ~/.ssh/my_ssh_key
    Copy to Clipboard Toggle word wrap
    注意

    使用 ./mirror-registry upgrade -v 标志升级 mirror registry for Red Hat OpenShift 时需要包括在创建 mirror registry 时使用的相同凭证。例如,如果您安装了带有- quayHostname <host_example_com&gt; 和 --quayRoot <example_directory_name> 的 Red Hat OpenShift 的镜像 registry,则必须包含该字符串才能正确升级镜像 registry。

  • 如果您要从 1.3 → 2.y 升级 mirror registry for Red Hat OpenShift,并希望指定自定义 SQLite 存储路径,您必须传递-- sqliteStorage 标志,例如:

    $ ./mirror-registry upgrade -v --targetHostname <remote_host_url> --targetUsername <user_name> -k ~/.ssh/my_ssh_key --sqliteStorage <example_directory_name>/quay-storage
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,确保 mirror registry for Red Hat OpenShift 已更新:

    $ podman ps
    Copy to Clipboard Toggle word wrap

    输出示例

    registry.redhat.io/quay/quay-rhel8:v3.12.10
    Copy to Clipboard Toggle word wrap

在某些情况下,您可能想要为 mirror registry for Red Hat OpenShift 更新 SSL/TLS 证书。这在以下情况中很有用:

  • 如果您要替换 Red Hat OpenShift 证书的当前镜像 registry
  • 如果您使用与之前 mirror registry for Red Hat OpenShift 安装相同的证书。
  • 如果您要定期 为 Red Hat OpenShift 证书更新镜像 registry

使用以下步骤为 Red Hat OpenShift SSL/TLS 证书替换 mirror registry

先决条件

流程

  1. 输入以下命令为 Red Hat OpenShift 安装镜像 registry

    $ ./mirror-registry install \
    --quayHostname <host_example_com> \
    --quayRoot <example_directory_name>
    Copy to Clipboard Toggle word wrap

    这会将 mirror registry for Red Hat OpenShift 安装到 $HOME/quay-install 目录中。

  2. 准备一个新的证书颁发机构(CA)捆绑包,并生成新的 ssl.keyssl.crt 密钥文件。如需更多信息,请参阅为 Red Hat Quay 配置 SSL 和 TLS
  3. 输入以下命令为 /$HOME/quay-install 分配一个环境变量,如 QUAY

    $ export QUAY=/$HOME/quay-install
    Copy to Clipboard Toggle word wrap
  4. 输入以下命令将新的 ssl.crt 文件复制到 /$HOME/quay-install 目录中:

    $ cp ~/ssl.crt $QUAY/quay-config
    Copy to Clipboard Toggle word wrap
  5. 输入以下命令将新的 ssl.key 文件复制到 /$HOME/quay-install 目录中:

    $ cp ~/ssl.key $QUAY/quay-config
    Copy to Clipboard Toggle word wrap
  6. 输入以下命令重启 quay-app 应用程序 pod:

    $ systemctl --user restart quay-app
    Copy to Clipboard Toggle word wrap

2.8. 为 Red Hat OpenShift 卸载镜像 registry

使用以下步骤从本地主机卸载 Red Hat OpenShift 的镜像 registry

先决条件

  • 您已在本地主机上安装了 mirror registry for Red Hat OpenShift

流程

  • 运行以下命令,从本地主机中卸载 mirror registry for Red Hat OpenShift

    $ ./mirror-registry uninstall -v \
      --quayRoot <example_directory_name>
    Copy to Clipboard Toggle word wrap
    注意
    • 删除 mirror registry for Red Hat OpenShift 会在删除前提示用户。您可以使用 --autoApprove 来跳过此提示。
    • 使用-- quayRoot 标志安装 mirror registry for Red Hat OpenShift 的用户必须在卸载时包括 the-quayRoot 标志。例如,如果您安装了带有- quayRoot example_directory_name 的 Red Hat OpenShift 的镜像 registry,则必须包含该字符串才能正确卸载镜像 registry。

2.9. Mirror registry for Red Hat OpenShift 标记

以下 标记可用于 Red Hat OpenShift 的镜像 registry

Expand
标记描述

--autoApprove

禁用交互式提示的布尔值。如果设置为 true,则在卸载镜像 registry 时自动删除 quayRoot 目录。如果未指定,则默认为 false

--initPassword

在 Quay 安装过程中创建的 init 用户的密码。必须至少包含八个字符,且不包含空格。

--initUser string

显示初始用户的用户名。若未指定,则默认为 init

--no-color, -c

允许用户禁用颜色序列,在运行安装、卸载和升级命令时将其传播到 Ansible。

--quayHostname

客户端用来联系 registry 的镜像 registry 的完全限定域名。等同于 Quay config.yaml 中的 SERVER_HOSTNAME。必须可以被 DNS 解析。如果未指定,则默认为 <targetHostname>:8443[1]

--quayStorage

保存 Quay 持久性存储数据的文件夹。默认为 quay-storage Podman 卷。卸载需要 root 权限。

--quayRoot, -r

保存容器镜像层和配置数据的目录,包括 rootCA.key、rootCA.pemrootCA.srl 证书。如果未指定,则默认为 $HOME/quay-install

--sqliteStorage

保存 SQLite 数据库数据的文件夹。如果没有指定,则默认为 sqlite-storage Podman 卷。卸载需要 root。

--ssh-key,-k

SSH 身份密钥的路径。如果未指定,则默认为 ~/.ssh/quay_installer

--sslCert

SSL/TLS 公钥/证书的路径。默认为 {quayRoot}/quay-config,并在未指定时自动生成。

--sslCheckSkip

跳过对 config.yaml 文件中的 SERVER_HOSTNAME 的检查证书主机名。[2]

--sslKey

用于 HTTPS 通信的 SSL/TLS 私钥路径。默认为 {quayRoot}/quay-config,并在未指定时自动生成。

--targetHostname, -H

要安装 Quay 的目标的主机名。默认为 $HOST,如本地主机(如果未指定)。

--targetUsername, -u

目标主机上的用户,将用于 SSH。默认为 $USER,例如,如果未指定,则默认为当前用户。

--verbose,-v

显示调试日志和 Ansible Playbook 输出。

--version

显示 mirror registry for Red Hat OpenShift 的版本。

  1. 如果您的系统的公共 DNS 名称与本地主机名不同,则必须修改 --quayHostname。另外,--quayHostname 标志不支持使用 IP 地址的安装。需要使用主机名进行安装。
  2. 当镜像 registry 在代理后面设置时,会使用 --sslCheckSkip,并且公开的主机名与内部 Quay 主机名不同。当用户不希望在安装过程中对提供的 Quay 主机名验证证书时,也可以使用它。

2.10. Mirror registry for Red Hat OpenShift 发行注记

mirror registry for Red Hat OpenShift 是一个小型灵活的容器 registry,作为目标,用于为断开连接的安装镜像(mirror)的 OpenShift Container Platform 所需的容器镜像。

本发行注记介绍了 OpenShift Container Platform 的 mirror registry for Red Hat OpenShift

以下小节详细介绍了 mirror registry for Red Hat OpenShift 的每个 2.0 发行版本。

2.10.1.1. Mirror registry for Red Hat OpenShift 2.0.7

发布日期: 2025 年 7 月 14 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.10 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.2. Mirror registry for Red Hat OpenShift 2.0.6

发布日期:2025 年 4 月 28 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.8 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.3. Mirror registry for Red Hat OpenShift 2.0.5

发布日期:2025 年 1 月 13 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.5 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.4. Mirror registry for Red Hat OpenShift 2.0.4

发布日期: 2025 年 1 月 6 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.4 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.5. Mirror registry for Red Hat OpenShift 2.0.3

发布日期: 2024 年 11 月 25 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.3 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.6. Mirror registry for Red Hat OpenShift 2.0.2

发布日期:2024 年 10 月 31 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.2 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.7. Mirror registry for Red Hat OpenShift 2.0.1

发布日期:2024 年 9 月 26 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.1 中。

以下公告适用于 mirror registry for Red Hat OpenShift

2.10.1.8. Mirror registry for Red Hat OpenShift 2.0.0

发布日期: 2024 年 9 月 3 日

Mirror registry for Red Hat OpenShift 现在包括在 Red Hat Quay 3.12.0 中。

以下公告适用于 mirror registry for Red Hat OpenShift

以下新功能包括在 mirror registry for Red Hat OpenShift 2.0.0 中:

  • 随着 mirror registry for Red Hat OpenShift 的发布,内部数据库已从 PostgreSQL 升级到 SQLite。因此,数据现在默认存储在 sqlite-storage Podman 卷中,整个 tarball 大小会减少 300 MB。

    新的安装默认使用 SQLite。在升级到 2.0 之前,请参阅"根据您的环境,"从本地主机更新 mirror registry for Red Hat OpenShift"或"从远程主机更新 mirror registry for Red Hat OpenShift"。

  • 添加了新功能标志 --sqliteStorage。使用这个标志,您可以手动设置保存 SQLite 数据库数据的位置。
  • Mirror registry for Red Hat OpenShift 现在可用于 IBM Power 和 IBM Z 架构(s390xppc64le) 。

要查看 mirror registry for Red Hat OpenShift 1.3 发行注记,请参阅 Mirror registry for Red Hat OpenShift 1.3 发行注记

要查看 mirror registry for Red Hat OpenShift 1.2 发行注记,请参阅 Mirror registry for Red Hat OpenShift 1.2 发行注记

要查看 mirror registry for Red Hat OpenShift 1.1 发行注记,请参阅 Mirror registry for Red Hat OpenShift 1.1 发行注记

2.11. Mirror registry for Red Hat OpenShift 故障排除

为了帮助对 mirror registry for Red Hat OpenShift 进行故障排除,您可以收集由镜像 registry 安装的 systemd 服务的日志。安装以下服务:

  • quay-app.service
  • quay-postgres.service
  • quay-redis.service
  • quay-pod.service

先决条件

  • 您已安装了 mirror registry for Red Hat OpenShift

流程

  • 如果使用 root 权限安装 mirror registry for Red Hat OpenShift,您可以输入以下命令获取其 systemd 服务的状态信息:

    $ sudo systemctl status <service>
    Copy to Clipboard Toggle word wrap
  • 如果作为标准用户安装 mirror registry for Red Hat OpenShift,您可以输入以下命令获取其 systemd 服务的状态信息:

    $ systemctl --user status <service>
    Copy to Clipboard Toggle word wrap

2.12. 其他资源

第 3 章 为断开连接的安装 mirror 镜像

您可以确保集群只使用满足您机构对外部内容控制的容器镜像。在受限网络中置备的基础架构上安装集群前,您必须将所需的容器镜像镜像(mirror)到那个环境中。要镜像容器镜像,您必须有一个 registry 才能进行镜像(mirror)。

重要

您必须可以访问互联网来获取所需的容器镜像。在这一流程中,您要将镜像 registry 放在可访问您的网络以及互联网的镜像(mirror)主机上。如果您没有镜像主机的访问权限,请使用镜像 Operator 目录与断开连接的集群流程一起使用,将镜像复制到可跨网络界限的设备。

3.1. 先决条件

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

    如果您有 Red Hat Quay 权利,请参阅有关部署 Red Hat Quay for 概念验证 的文档,或使用 Red Hat Quay Operator。如果您需要额外的帮助来选择并安装 registry,请联络您的销售代表或红帽支持。

  • 如果您还没有容器镜像 registry,OpenShift Container Platform 可以为订阅者提供一个 mirror registry for Red Hat OpenShift。您的订阅中包含 mirror registry for Red Hat OpenShift,它是一个小型容器 registry,可用于在断开连接的安装中镜像 OpenShift Container Platform 所需的容器镜像。

3.2. 关于镜像 registry

您可以镜像 OpenShift Container Platform 安装和后续容器镜像 registry 所需的镜像,如 Red Hat Quay、JFrog Artifactory、Ssonatype Nexus Repository 或 Harbor。如果您无法访问大型容器 registry,可以使用 mirror registry for Red Hat OpenShift,它是一个包括在 OpenShift Container Platform 订阅中的小型容器 registry。

您可以使用支持 Docker v2-2 的任何容器 registry,如 Red Hat Quay、mirror registry for Red Hat OpenShift、Artifactory、Sonatype Nexus Repository 或 Harbor。无论您所选 registry 是什么,都会将互联网上红帽托管站点的内容镜像到隔离的镜像 registry 相同。镜像内容后,您要将每个集群配置为从镜像 registry 中检索此内容。

重要

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

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

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

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

注意

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

附加信息

有关查看 CRI-O 日志以查看镜像源的详情,请参阅查看镜像拉取源

3.3. 准备您的镜像主机

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

3.3.1. 安装 OpenShift CLI

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

重要

如果安装了旧版本的 oc,则可能无法使用 OpenShift Container Platform 4.16 中的所有命令。下载并安装新版本的 oc

在 Linux 上安装 OpenShift CLI

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

流程

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

    $ tar xvf <file>
    Copy to Clipboard Toggle word wrap
  6. oc 二进制文件放到 PATH 中的目录中

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc <command>
    Copy to Clipboard Toggle word wrap
在 Windows 上安装 OpenShift CLI

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

流程

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

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

    C:\> path
    Copy to Clipboard Toggle word wrap

验证

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

    C:\> oc <command>
    Copy to Clipboard Toggle word wrap
在 macOS 上安装 OpenShift CLI

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

流程

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

    注意

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

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

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

    $ echo $PATH
    Copy to Clipboard Toggle word wrap

验证

  • 使用 oc 命令验证安装:

    $ oc <command>
    Copy to Clipboard Toggle word wrap

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

创建容器镜像 registry 凭证文件,可让您将镜像从红帽 mirror 到您的镜像。

警告

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

警告

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

先决条件

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

流程

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

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

    $ cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json> 
    1
    Copy to Clipboard Toggle word wrap
    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"
        }
      }
    }
    Copy to Clipboard Toggle word wrap
  3. 为您的镜像 registry 生成 base64 编码的用户名和密码或令牌:

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

      "auths": {
        "<mirror_registry>": { 
    1
    
          "auth": "<credentials>", 
    2
    
          "email": "you@example.com"
        }
      },
    Copy to Clipboard Toggle word wrap
    1
    指定 registry 域名,以及您的镜像 registry 用来提供内容的可选端口。例如:registry.example.comregistry.example.com:8443
    2
    指定镜像 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"
        }
      }
    }
    Copy to Clipboard Toggle word wrap

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

镜像要在集群安装或升级过程中使用的 OpenShift Container Platform 镜像仓库。

先决条件

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

流程

在镜像主机上完成以下步骤:

  1. 查看 OpenShift Container Platform 下载页面,以确定您要安装的 OpenShift Container Platform 版本,并决定 Repository Tags 页中的相应标签(tag)。
  2. 设置所需的环境变量:

    1. 导出发行版本信息:

      $ OCP_RELEASE=<release_version>
      Copy to Clipboard Toggle word wrap

      对于 <release_version>,请指定与 OpenShift Container Platform 版本对应的标签,用于您的架构,如 4.5.4

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

      $ LOCAL_REGISTRY='<local_registry_host_name>:<local_registry_host_port>'
      Copy to Clipboard Toggle word wrap

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

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

      $ LOCAL_REPOSITORY='<local_repository_name>'
      Copy to Clipboard Toggle word wrap

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

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

      $ PRODUCT_REPO='openshift-release-dev'
      Copy to Clipboard Toggle word wrap

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

    5. 导出 registry pull secret 的路径:

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'
      Copy to Clipboard Toggle word wrap

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

    6. 导出发行版本镜像:

      $ RELEASE_NAME="ocp-release"
      Copy to Clipboard Toggle word wrap

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

    7. 为您的集群导出构架类型:

      $ ARCHITECTURE=<cluster_architecture> 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定集群的构架,如 x86_64, aarch64, s390x, 获 ppc64le
    8. 导出托管镜像的目录的路径:

      $ REMOVABLE_MEDIA_PATH=<path> 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定完整路径,包括开始的前斜杠(/)字符。
  3. 将版本镜像(mirror)到镜像 registry:

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

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

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON}  \
             --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \
             --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
             --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE} --dry-run
        Copy to Clipboard Toggle word wrap
      3. 记录上一命令输出中的 imageContentSources 部分。您的镜像信息与您的镜像存储库相对应,您必须在安装过程中将 imageContentSources 部分添加到 install-config.yaml 文件中。
      4. 将镜像镜像到可移动介质的目录中:

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON} --to-dir=${REMOVABLE_MEDIA_PATH}/mirror quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE}
        Copy to Clipboard Toggle word wrap
      5. 将介质上传到受限网络环境中,并将镜像上传到本地容器 registry。

        $ oc image mirror -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} 
        1
        Copy to Clipboard Toggle word wrap
        1
        对于 REMOVABLE_MEDIA_PATH,您必须使用与镜像镜像时指定的同一路径。
        重要

        运行 oc image mirror 可能会导致以下错误: error: unable to retrieve source image。当镜像索引包括对镜像 registry 中不再存在的镜像的引用时,会发生此错误。镜像索引可能会保留旧的引用,以便为运行这些镜像的用户在升级图表中显示新的升级路径。作为临时解决方案,您可以使用 --skip-missing 选项绕过错误并继续下载镜像索引。如需更多信息,请参阅 Service Mesh Operator 镜像失败

    • 如果本地容器 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} \
             --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}
        Copy to Clipboard Toggle word wrap

        该命令将发行信息提取为摘要,其输出包括安装集群时所需的 imageContentSources 数据。

      2. 记录上一命令输出中的 imageContentSources 部分。您的镜像信息与您的镜像存储库相对应,您必须在安装过程中将 imageContentSources 部分添加到 install-config.yaml 文件中。

        注意

        镜像名称在镜像过程中被修补到 Quay.io, podman 镜像将在 bootstrap 虚拟机的 registry 中显示 Quay.io。

  4. 要创建基于您镜像内容的安装程序,请提取内容并将其固定到发行版中:

    • 如果您的镜像主机无法访问互联网,请运行以下命令:

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --icsp-file=<file> --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}" \
      --insecure=true 
      1
      Copy to Clipboard Toggle word wrap
      1
      可选:如果您不想为目标 registry 配置信任,请添加 --insecure=true 标志。
    • 如果本地容器 registry 连接到镜像主机,请运行以下命令:

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"
      Copy to Clipboard Toggle word wrap
      重要

      要确保将正确的镜像用于您选择的 OpenShift Container Platform 版本,您必须从镜像内容中提取安装程序。

      您必须在有活跃互联网连接的机器上执行这个步骤。

  5. 对于使用安装程序置备的基础架构的集群,运行以下命令:

    $ openshift-install
    Copy to Clipboard Toggle word wrap

在断开连接的环境中,在安装集群后执行额外的步骤来配置 Cluster Samples Operator。在准备过程中查阅以下信息:

3.6.1. 协助镜像的 Cluster Samples Operator

在安装过程中,OpenShift Container Platform 在 openshift-cluster-samples-operator 命名空间中创建一个名为 imagestreamtag-to-image 的配置映射。imagestreamtag-to-image 配置映射包含每个镜像流标签的条目(填充镜像)。

配置映射中 data 字段中每个条目的键格式为 <image_stream_name>_<image_stream_tag_name>

在断开连接的 OpenShift Container Platform 安装过程中,Cluster Samples Operator 的状态被设置为 Removed。如果您将其改为 Managed,它会安装示例。

注意

在网络限制或断开连接的环境中使用示例可能需要通过网络访问服务。某些示例服务包括:Github、Maven Central、npm、RubyGems、PyPi 等。这可能需要执行额外的步骤,让集群 samples operator 对象能够访问它们所需的服务。

您可以使用此配置映射作为导入镜像流所需的镜像的引用。

  • 在 Cluster Samples Operator 被设置为 Removed 时,您可以创建镜像的 registry,或决定您要使用哪些现有镜像 registry。
  • 使用新的配置映射作为指南来镜像您要镜像的 registry 的示例。
  • 将没有镜像的任何镜像流添加到 Cluster Samples Operator 配置对象的 skippedImagestreams 列表中。
  • 将 Cluster Samples Operator 配置对象的 samplesRegistry 设置为已镜像的 registry。
  • 然后,将 Cluster Samples Operator 设置为 Managed 来安装您已镜像的镜像流。

3.7. 镜像用于断开连接的集群的 Operator 目录

您可以使用 oc adm catalog mirror 命令将红帽提供的目录或自定义目录的 Operator 内容镜像到容器镜像 registry 中。目标 registry 必须支持 Docker v2-2。对于受限网络中的集群,此 registry 可以是集群有网络访问权限的 registry,如在受限网络集群安装过程中创建的镜像 registry。

重要
  • OpenShift 镜像 registry 不能用作目标 registry,因为它不支持没有标签的推送,在镜像过程中需要这个推送。
  • 运行 oc adm catalog mirror 可能会导致以下错误: error: unable to retrieve source image。当镜像索引包括对镜像 registry 中不再存在的镜像的引用时,会发生此错误。镜像索引可能会保留旧的引用,以便为运行这些镜像的用户在升级图表中显示新的升级路径。作为临时解决方案,您可以使用 --skip-missing 选项绕过错误并继续下载镜像索引。如需更多信息,请参阅 Service Mesh Operator 镜像失败

oc adm catalog mirror 命令还会自动将在镜像过程中指定的索引镜像(无论是红帽提供的索引镜像还是您自己的自定义构建索引镜像)镜像到目标 registry。然后,您可以使用镜像的索引镜像创建一个目录源,允许 Operator Lifecycle Manager(OLM)将镜像目录加载到 OpenShift Container Platform 集群。

3.7.1. 先决条件

与断开连接的集群一起使用的 Operator 目录具有以下先决条件:

  • 没有网络访问限制的工作站
  • podman 1.9.3 或更高版本。
  • 如果要过滤或 prune 一个现存的目录,且仅选择性地镜像部分 Operator,请参阅以下部分:

  • 如果要镜像红帽提供的目录,请在具有无网络访问限制的工作站中运行以下命令,以便与 registry.redhat.io 进行身份验证:

    $ podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
  • 访问支持 Docker v22 的镜像 registry。
  • 在镜像 registry 上,决定使用哪个存储库或命名空间来存储已镜像的 Operator 内容。例如,您可以创建一个 olm-mirror 存储库。
  • 如果您的镜像 registry 无法访问互联网,请将可移动介质连接到您的没有网络访问限制的工作站。
  • 如果您正在使用私有 registry,包括 registry.redhat.io,请将 REG_CREDS 环境变量设置为 registry 凭证的文件路径,以便在后续步骤中使用。例如,对于 podman CLI:

    $ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json
    Copy to Clipboard Toggle word wrap

3.7.2. 提取和镜像目录内容

oc adm catalog mirror 命令提取索引镜像的内容,以生成镜像所需的清单。命令的默认行为会生成清单,然后会自动将索引镜像以及索引镜像本身中的所有镜像内容镜像(mirror)到您的镜像 registry。

另外,如果您的镜像 registry 位于完全断开连接的主机上,或者断开连接的或 airgapped 主机上,您可以首先将内容镜像到可移动介质,将介质移到断开连接的环境中,然后将内容从介质镜像到 registry。

如果您的镜像 registry 与您的没有网络访问限制的工作站位于同一个网络中,请在您的工作站上执行以下操作:

流程

  1. 如果您的镜像 registry 需要身份验证,请运行以下命令登录到 registry:

    $ podman login <mirror_registry>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,将内容提取并镜像到镜像 registry:

    $ oc adm catalog mirror \
        <index_image> \ 
    1
    
        <mirror_registry>:<port>[/<repository>] \ 
    2
    
        [-a ${REG_CREDS}] \ 
    3
    
        [--insecure] \ 
    4
    
        [--index-filter-by-os='<platform>/<arch>'] \ 
    5
    
        [--manifests-only] 
    6
    Copy to Clipboard Toggle word wrap
    1
    指定您要镜像的目录的索引镜像。
    2
    指定要将 Operator 内容镜像到的目标 registry 的完全限定域名(FQDN)。镜像 registry <repository> 可以是 registry 上的任何现有存储库或命名空间,如先决条件中所述,如 olm-mirror。如果在镜像过程中找到现有的存储库,存储库名称将添加到生成的镜像名称中。如果您不希望镜像名称包含存储库名称,请省略此行中的 <repository> 值,例如 <mirror_registry>:<port>
    3
    可选:如果需要,指定 registry 凭证文件的位置。registry.redhat.io 需要 {REG_CREDS}
    4
    可选:如果您不想为目标 registry 配置信任,请添加 --insecure 标志。
    5
    可选:在有多个变体可用时,指定索引镜像的平台和架构。镜像被传递为 '<platform>/<arch>[/<variant>]'。这不适用于索引引用的镜像。有效值为 linux/amd64, linux/ppc64le, linux/s390x, linux/arm64.
    6
    可选:只生成镜像所需的清单,而不实际将镜像内容镜像到 registry。这个选项对检查哪些将被镜像(mirror)非常有用,如果您只需要一小部分软件包,可以对映射列表进行修改。然后,您可以使用带有 oc image mirror 命令的 mapping.txt 文件来在以后的步骤中镜像修改的镜像列表。此标志用于从目录中对内容进行高级选择性镜像。

    输出示例

    src image has index label for database path: /database/index.db
    using database path mapping: /database/index.db:/tmp/153048078
    wrote database to /tmp/153048078 
    1
    
    ...
    wrote mirroring manifests to manifests-redhat-operator-index-1614211642 
    2
    Copy to Clipboard Toggle word wrap

    1
    命令生成的临时 index.db 数据库的目录。
    2
    记录生成的 manifests 目录名称。该目录在后续过程中被引用。
    注意

    Red Hat Quay 不支持嵌套存储库。因此,运行 oc adm catalog mirror 命令会失败,并显示 401 未授权错误。作为临时解决方案,您可以在运行 oc adm catalog mirror 命令时使用 --max-components=2 选项来禁用嵌套存储库的创建。有关此临时解决方案的更多信息,请参阅 Unauthorized error thrown while using catalog mirror command with Quay registry

3.7.2.2. 将目录内容镜像到 airgapped registry

如果您的镜像 registry 位于完全断开连接的主机上,或 airgapped 主机上,请执行以下操作。

流程

  1. 在您的工作站中运行以下命令,且没有网络访问权限将内容镜像到本地文件中:

    $ oc adm catalog mirror \
        <index_image> \ 
    1
    
        file:///local/index \ 
    2
    
        -a ${REG_CREDS} \ 
    3
    
        --insecure \ 
    4
    
        --index-filter-by-os='<platform>/<arch>' 
    5
    Copy to Clipboard Toggle word wrap
    1
    指定您要镜像的目录的索引镜像。
    2
    指定要镜像到当前目录中的本地文件的内容。
    3
    可选:如果需要,指定 registry 凭证文件的位置。
    4
    可选:如果您不想为目标 registry 配置信任,请添加 --insecure 标志。
    5
    可选:在有多个变体可用时,指定索引镜像的平台和架构。镜像被指定为 '<platform>/<arch>[/<variant>]'。这不适用于索引引用的镜像。有效值为 linux/amd64, linux/ppc64le, linux/s390x, linux/arm64, 和 .*

    输出示例

    ...
    info: Mirroring completed in 5.93s (5.915MB/s)
    wrote mirroring manifests to manifests-my-index-1614985528 
    1
    
    
    To upload local images to a registry, run:
    
    	oc adm catalog mirror file://local/index/myrepo/my-index:v1 REGISTRY/REPOSITORY 
    2
    Copy to Clipboard Toggle word wrap

    1
    记录生成的 manifests 目录名称。该目录在后续过程中被引用。
    2
    记录根据您提供的索引镜像扩展的 file:// 路径。这个路径在后续步骤中被引用。

    此命令会在当前目录中创建 v2/ 目录中。

  2. v2/ 目录复制到可移动介质。
  3. 物理删除该介质并将其附加到断开连接的环境中可访问镜像 registry 的主机。
  4. 如果您的镜像 registry 需要身份验证,请在断开连接的环境中的主机上运行以下命令以登录到 registry:

    $ podman login <mirror_registry>
    Copy to Clipboard Toggle word wrap
  5. 从包含 v2/ 目录的父目录运行以下命令,将镜像从本地文件上传到镜像 registry:

    $ oc adm catalog mirror \
        file://local/index/<repository>/<index_image>:<tag> \ 
    1
    
        <mirror_registry>:<port>[/<repository>] \ 
    2
    
        -a ${REG_CREDS} \ 
    3
    
        --insecure \ 
    4
    
        --index-filter-by-os='<platform>/<arch>' 
    5
    Copy to Clipboard Toggle word wrap
    1
    指定上一命令输出中的 file:// 路径。
    2
    指定要将 Operator 内容镜像到的目标 registry 的完全限定域名(FQDN)。镜像 registry <repository> 可以是 registry 上的任何现有存储库或命名空间,如先决条件中所述,如 olm-mirror。如果在镜像过程中找到现有的存储库,存储库名称将添加到生成的镜像名称中。如果您不希望镜像名称包含存储库名称,请省略此行中的 <repository> 值,例如 <mirror_registry>:<port>
    3
    可选:如果需要,指定 registry 凭证文件的位置。
    4
    可选:如果您不想为目标 registry 配置信任,请添加 --insecure 标志。
    5
    可选:在有多个变体可用时,指定索引镜像的平台和架构。镜像被指定为 '<platform>/<arch>[/<variant>]'。这不适用于索引引用的镜像。有效值为 linux/amd64, linux/ppc64le, linux/s390x, linux/arm64, 和 .*
    注意

    Red Hat Quay 不支持嵌套存储库。因此,运行 oc adm catalog mirror 命令会失败,并显示 401 未授权错误。作为临时解决方案,您可以在运行 oc adm catalog mirror 命令时使用 --max-components=2 选项来禁用嵌套存储库的创建。有关此临时解决方案的更多信息,请参阅 Unauthorized error thrown while using catalog mirror command with Quay registry

  6. 再次运行 oc adm catalog mirror 命令。使用新镜像的索引镜像作为源,以及上一步中使用的同一镜像 registry 目标:

    $ oc adm catalog mirror \
        <mirror_registry>:<port>/<index_image> \
        <mirror_registry>:<port>[/<repository>] \
        --manifests-only \
    1
    
        [-a ${REG_CREDS}] \
        [--insecure]
    Copy to Clipboard Toggle word wrap
    1
    此步骤需要 --manifests-only 标志,以便该命令不会再次复制所有镜像的内容。
    重要

    这一步是必需的,因为上一步中生成的 imageContentSourcePolicy.yaml 文件中的镜像映射必须从本地路径更新为有效的镜像位置。如果不这样做,会在稍后的步骤中创建 ImageContentSourcePolicy 对象时会导致错误。

在镜像目录后,您可以继续执行集群的其余部分。在集群安装成功完成后,您必须指定此流程中的 manifests 目录来创建 ImageContentSourcePolicyCatalogSource 对象。需要这些对象才能从 OperatorHub 安装 Operator。

3.7.3. 生成的清单

将 Operator 目录内容镜像到镜像 registry 后,会在当前目录中生成清单目录。

如果您将内容镜像到同一网络上的 registry,则目录名称采用以下模式:

manifests-<index_image_name>-<random_number>
Copy to Clipboard Toggle word wrap

如果您在上一节中将内容镜像到断开连接的主机上的 registry,则目录名称采用以下模式:

manifests-index/<repository>/<index_image_name>-<random_number>
Copy to Clipboard Toggle word wrap
注意

清单目录名称在后续过程中被引用。

manifests 目录包含以下文件,其中的一些文件可能需要进一步修改:

  • catalogSource.yaml 文件是 CatalogSource 对象的基本定义,它预先填充索引镜像标签及其他相关元数据。此文件可原样使用,或进行相应修改来在集群中添加目录源。

    重要

    如果将内容镜像到本地文件,您必须修改 catalogSource .yaml 文件,从 metadata.name 字段中删除任何反斜杠(/)字符。否则,当您试图创建对象时,会失败并显示 "invalid resource name” 错误。

  • 用来定义 ImageContentSourcePolicy 对象的 imageContentSourcePolicy.yaml,它可以将节点配置为在 Operator 清单中存储的镜像(image)引用和镜像 (mirror) 的 registry 间进行转换。

    注意

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

  • mapping.txt 文件,在其中包含所有源镜像,并将它们映射到目标 registry。此文件与 oc image mirror 命令兼容,可用于进一步自定义镜像(mirror)配置。

    重要

    如果您在镜像过程中使用 --manifests-only 标志,并希望进一步调整要镜像的软件包子集,请参阅 OpenShift Container Platform 4.7 文档中的镜像软件包清单格式目录镜像流程中有关修改 mapping.txt 文件并使用 oc image mirror 命令的步骤。

3.7.4. 安装后的要求

在镜像目录后,您可以继续执行集群的其余部分。在集群安装成功完成后,您必须指定此流程中的 manifests 目录来创建 ImageContentSourcePolicyCatalogSource 对象。这些对象需要填充和启用从 OperatorHub 安装 Operator。

3.8. 后续步骤

可以在没有直接的互联网连接的受限网络中运行集群,方法是使用在一个私有 registry 中的 mirror OpenShift Container Platform 容器镜像安装集群。集群运行时必须始终运行此 registry。如需更多信息,请参阅先决条件部分。

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

4.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 提供了更新路径,并根据需要执行依赖项解析。

4.1.1. 高级别工作流

下列步骤概述了如何使用 oc-mirror 插件将镜像镜像到镜像 registry 的高级别工作流:

  1. 创建镜像设置配置文件。
  2. 使用以下方法之一将镜像设置为目标镜像 registry:

    • 将镜像直接设置为目标镜像 registry。
    • 镜像集合镜像到磁盘,将镜像设置为目标环境,然后将镜像上传到目标镜像 registry。
  3. 配置集群以使用 oc-mirror 插件生成的资源。
  4. 根据需要重复这些步骤以更新目标镜像 registry。
重要

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

4.2. oc-mirror 插件兼容性和支持

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

注意

aarch64, ppc64le, 和 s390x 架构中,oc-mirror 插件只支持 OpenShift Container Platform 版本 4.14 及更新的版本。

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

4.3. 关于镜像 registry

您可以镜像 OpenShift Container Platform 安装所需的镜像,以及支持 Docker v2-2 (如 Red Hat Quay)的容器镜像 registry 所需的镜像。如果您无法访问大型容器 registry,可以使用 mirror registry for Red Hat OpenShift,它是一个包括在 OpenShift Container Platform 订阅中的小型容器 registry。

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

重要

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

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

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

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

注意

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

4.4. 先决条件

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

    注意

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

    如果您还没有容器镜像 registry,OpenShift Container Platform 可以为订阅者提供一个 mirror registry for Red Hat OpenShift。您的订阅中包含 mirror registry for Red Hat OpenShift,它是一个小型容器 registry,可用于在断开连接的安装中镜像 OpenShift Container Platform 所需的容器镜像。

4.5. 准备您的镜像主机

在使用 oc-mirror 插件镜像(mirror)前,您必须安装插件并创建容器镜像 registry 凭据文件,以允许从红帽镜像到您的镜像。

4.5.1. 安装 oc-mirror OpenShift CLI 插件

安装 oc-mirror OpenShift CLI 插件以在断开连接的环境中管理镜像集。

先决条件

  • 已安装 OpenShift CLI(oc)。如果您在完全断开连接的环境中镜像镜像集,请确保以下内容:

    • 您已在可访问互联网的主机上安装了 oc-mirror 插件。
    • 在断开连接的环境中的主机可以访问目标镜像 registry。
  • 您已在使用 oc-mirror 的操作系统中,将 umask 参数设置为 0022
  • 您已为您要使用的 RHEL 版本安装了正确的二进制文件。

流程

  1. 下载 oc-mirror CLI 插件。

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

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

    $ chmod +x oc-mirror
    Copy to Clipboard Toggle word wrap
    注意

    不要重命名 oc-mirror 文件。

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

    $ sudo mv oc-mirror /usr/local/bin/.
    Copy to Clipboard Toggle word wrap

验证

  • 运行以下命令,验证 oc-mirror v1 的插件是否已成功安装:

    $ oc mirror help
    Copy to Clipboard Toggle word wrap

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

创建容器镜像 registry 凭证文件,可让您将镜像从红帽 mirror 到您的镜像。

警告

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

警告

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

先决条件

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

流程

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

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

    $ cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json> 
    1
    Copy to Clipboard Toggle word wrap
    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"
        }
      }
    }
    Copy to Clipboard Toggle word wrap
  3. 将文件保存为 ~/.docker/config.json$XDG_RUNTIME_DIR/containers/auth.json

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

      $ mkdir -p <directory_name>
      Copy to Clipboard Toggle word wrap

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

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

      $ cp <path>/<pull_secret_file_in_json> <directory_name>/<auth_file>
      Copy to Clipboard Toggle word wrap

      其中 <directory_name>~/.docker$XDG_RUNTIME_DIR/containers<auth_file>config.jsonauth.json

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

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

      "auths": {
        "<mirror_registry>": { 
    1
    
          "auth": "<credentials>", 
    2
    
          "email": "you@example.com"
        }
      },
    Copy to Clipboard Toggle word wrap
    1
    指定 registry 域名,以及您的镜像 registry 用来提供内容的可选端口。例如:registry.example.comregistry.example.com:8443
    2
    指定镜像 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"
        }
      }
    }
    Copy to Clipboard Toggle word wrap

4.6. 创建镜像设置配置

在使用 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 <storage_backend> > imageset-config.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定存储后端的位置,如 example.com/mirror/oc-mirror-metadata
  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.16                                             
    4
    
          type: ocp
        graph: true                                                     
    5
    
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.16  
    6
    
        packages:
        - name: serverless-operator                                     
    7
    
          channels:
          - name: stable                                                
    8
    
      additionalImages:
      - name: registry.redhat.io/ubi9/ubi:latest                        
    9
    
      helm: {}
    Copy to Clipboard Toggle word wrap
    1
    添加 archiveSize 以设置镜像集合中的每个文件的最大大小(以 GiB 为单位)。
    2
    设置后端位置,以将镜像设置元数据保存到。此位置可以是 registry 或本地目录。必须指定 storageConfig 值。
    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 镜像,以及其他镜像的镜像。

    当升级 OpenShift Container Platform 延长更新支持 (EUS) 版本时,在当前和目标版本之间可能需要一个中间版本。例如,如果当前版本是 4.14,目标版本为 4.16,您可能需要在使用 oc-mirror 插件 v1 时在 ImageSetConfiguration 中包含版本,如 4.15.8

    oc-mirror 插件 v1 可能并不总是自动检测,因此请检查 Cincinnati 图形网页以确认任何所需的中间版本并手动添加到您的配置中。

    有关各种镜像用例,请参阅"镜像设置配置参数"和"镜像设置配置示例"。

  3. 保存更新的文件。

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

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

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

这些步骤假定您已设置了镜像 registry。

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

4.7.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
    Copy to Clipboard Toggle word wrap
    1
    指定您创建的镜像设置配置文件。例如,imageset-config.yaml
    2
    指定要镜像设置文件的 registry。registry 必须以 docker:// 开头。如果为镜像 registry 指定顶层命名空间,则必须在后续执行时使用此命名空间。

验证

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

ImageContentSourcePolicy YAML 文件的 repositoryDigestMirrors 部分在安装过程中用于 install-config.yaml 文件。

后续步骤

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

故障排除

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

4.7.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
    Copy to Clipboard Toggle word wrap
    1
    传递创建的镜像设置配置文件。此流程假设它名为 imageset-config.yaml
    2
    指定要输出镜像集文件的目标目录。目标目录路径必须以 file:// 开头。

验证

  1. 进入您的输出目录:

    $ cd <path_to_output_directory>
    Copy to Clipboard Toggle word wrap
  2. 验证是否创建了镜像设置 .tar 文件:

    $ ls
    Copy to Clipboard Toggle word wrap

    输出示例

    mirror_seq1_000000.tar
    Copy to Clipboard Toggle word wrap

后续步骤

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

故障排除

4.7.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
    Copy to Clipboard Toggle word wrap
    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 生成的资源。

故障排除

4.8. 配置集群以使用 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/
    Copy to Clipboard Toggle word wrap
  3. 如果镜像(mirror)镜像,请运行以下命令将发行版本镜像签名应用到集群:

    $ oc apply -f ./oc-mirror-workspace/results-1639608409/release-signatures/
    Copy to Clipboard Toggle word wrap
    注意

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

验证

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

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

    $ oc get catalogsource -n openshift-marketplace
    Copy to Clipboard Toggle word wrap

4.9. 更新您的镜像 registry 内容

您可以通过更新镜像设置配置文件并将镜像集镜像到镜像 registry 来更新镜像 registry 内容。下次运行 oc-mirror 插件时,会生成一个镜像集,该镜像集仅包含之前执行以来的新和更新镜像。

在更新镜像 registry 时,您必须考虑以下注意事项:

  • 如果镜像不再包含在生成和镜像的最新镜像集中,则会从目标镜像 registry 中修剪镜像。因此,请确保为以下关键组件相同的组合更新镜像,以便只创建并镜像不同的镜像集:

    • 镜像设置配置
    • 目标 registry
    • 存储配置
  • 当要 mirror 或 mirror 到 mirror 工作流时,可以修剪镜像。
  • 生成的镜像集必须按顺序推送到目标镜像 registry。您可以从生成的镜像设置归档文件的文件名中获取序列号。
  • 不要删除或修改 oc-mirror 插件生成的元数据镜像。
  • 如果您在初始镜像集创建过程中为镜像 registry 指定顶层命名空间,则每次针对同一镜像 registry 运行 oc-mirror 插件时都必须使用此命名空间。

有关更新镜像 registry 内容的工作流的更多信息,请参阅"高级别工作流"部分。

4.9.1. 镜像 registry 更新示例

本节论述了将镜像 registry 从磁盘更新到镜像的用例。

以前用于镜像的 ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  platform:
    channels:
      - name: stable-4.12
        minVersion: 4.12.1
        maxVersion: 4.12.1
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.14
      packages:
        - name: rhacs-operator
          channels:
          - name: stable
Copy to Clipboard Toggle word wrap

通过修剪现有镜像来镜像特定的 OpenShift Container Platform 版本

更新了 ImageSetConfiguration 文件

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  platform:
    channels:
      - name: stable-4.13 
1

  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.14
      packages:
        - name: rhacs-operator
          channels:
          - name: stable
Copy to Clipboard Toggle word wrap

1
使用 stable-4.13 修剪 stable-4.12 的所有镜像。
通过修剪现有镜像升级到 Operator 的最新版本

更新了 ImageSetConfiguration 文件

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  platform:
    channels:
      - name: stable-4.12
        minVersion: 4.12.1
        maxVersion: 4.12.1
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.14
      packages:
        - name: rhacs-operator
          channels:
          - name: stable 
1
Copy to Clipboard Toggle word wrap

1
使用相同的频道而没有指定版本会修剪现有镜像,并使用最新版本的镜像进行更新。
通过修剪现有的 Operator 来镜像新 Operator

更新了 ImageSetConfiguration 文件

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  platform:
    channels:
      - name: stable-4.12
        minVersion: 4.12.1
        maxVersion: 4.12.1
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.14
      packages:
        - name: <new_operator_name> 
1

          channels:
          - name: stable
Copy to Clipboard Toggle word wrap

1
使用 new_operator_name 替换 rhacs-operator 修剪 Red Hat Advanced Cluster Security for Kubernetes Operator。
修剪所有 OpenShift Container Platform 镜像

更新了 ImageSetConfiguration 文件

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  local:
    path: /home/user/metadata
mirror:
  platform:
    channels:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.14
      packages:
Copy to Clipboard Toggle word wrap

4.10. 执行空运行

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

先决条件

  • 您可以访问互联网来获取所需的容器镜像。
  • 已安装 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
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

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

    $ cd oc-mirror-workspace/
    Copy to Clipboard Toggle word wrap
  3. 查看生成的 mapping.txt 文件。

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

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

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

    注意

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

4.11. 包括本地 OCI Operator 目录

虽然将 OpenShift Container Platform 发行版本、Operator 目录和其他额外的镜像从 registry mirror 到一个部分断开连接的集群中,但您还可以在一个本地磁盘中的基于文件的目录中包含 Operator 目录镜像。本地目录必须采用开放容器项目 (OCI) 格式。

本地目录及其内容会根据镜像设置配置文件中的过滤信息,mirror 到您的目标 mirror registry。

重要

在镜像本地 OCI 目录时,所有您要 mirror 的 OpenShift Container Platform 发行版本或其他需要和本地 OCI 格式目录一起 mirror 的镜像都必须从 registry 中拉取。

您无法在磁盘中一起 mirror OCI 目录和一个 oc-mirror 镜像集文件镜像。

使用 OCI 功能的一个用例是,您有一个 CI/CD 系统将 OCI 目录构建到磁盘上的位置,并需要将 OCI 目录以及 OpenShift Container Platform 发行版本一起 mirror 到您的 mirror 镜像 registry。

注意

如果您为 OpenShift Container Platform 4.12 的 oc-mirror 插件使用了预览预览的 OCI 本地目录功能,则无法再使用 oc-mirror 插件的 OCI 本地目录功能在本地复制目录,并将其转换为 OCI 格式作为 mirror 到一个完全断开连接的集群中的第一步。

先决条件

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

流程

  1. 创建镜像设置配置文件,并根据需要调整设置。

    以下示例镜像设置配置在磁盘上 mirror 一个 OCI 目录,以及来自 registry.redhat.io 的 OpenShift Container Platform 发行版本和 UBI 镜像。

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v1alpha2
    storageConfig:
      local:
        path: /home/user/metadata                                                
    1
    
    mirror:
      platform:
        channels:
        - name: stable-4.16                                                      
    2
    
          type: ocp
        graph: false
      operators:
      - catalog: oci:///home/user/oc-mirror/my-oci-catalog                       
    3
    
        targetCatalog: my-namespace/redhat-operator-index                        
    4
    
        packages:
        - name: aws-load-balancer-operator
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.16           
    5
    
        packages:
        - name: rhacs-operator
      additionalImages:
      - name: registry.redhat.io/ubi9/ubi:latest                                 
    6
    Copy to Clipboard Toggle word wrap
    1
    设置后端位置,以将镜像设置元数据保存到。此位置可以是 registry 或本地目录。必须指定 storageConfig 值。
    2
    (可选)包括一个 OpenShift Container Platform 发行版本,以便从 registry.redhat.io mirror。
    3
    指定磁盘上 OCI 目录位置的绝对路径。使用 OCI 功能时,路径必须以 oci:// 开头。
    4
    另外,还可指定替代命名空间和名称来镜像目录。
    5
    (可选)指定要从 registry 中拉取的额外 Operator 目录。
    6
    (可选)指定要从 registry 中拉取的额外镜像。
  2. 运行 oc mirror 命令将 OCI 目录 mirror 到目标 mirror registry:

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

    另外,您可以指定其他标记来调整 OCI 功能的行为:

    --oci-insecure-signature-policy
    不要将签名推送到目标 mirror registry。
    --oci-registries-config

    指定 TOML 格式的 registry.conf 文件的路径。您可以使用它来从不同的 registry 中镜像,如用于测试的预生产位置,而无需更改镜像设置配置文件。这个标志只会影响本地 OCI 目录,而不会影响任何其他被镜像的内容。

    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
    Copy to Clipboard Toggle word wrap

后续步骤

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

4.12. 镜像设置配置参数

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

Expand
表 4.1. ImageSetConfiguration 参数
参数描述

apiVersion

ImageSetConfiguration 内容的 API 版本。

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

archiveSize

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

整数.例如: 4

mirror

镜像集的配置。

对象

mirror.additionalImages

镜像集的额外镜像配置。

对象数组。例如:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

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.16
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

mirror.operators.catalog

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

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

mirror.operators.full

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

布尔值.默认值为 false

mirror.operators.packages

Operator 软件包配置。

对象数组。例如:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.16
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

mirror.operators.packages.name

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

字符串.例如: elasticsearch-operator

mirror.operators.packages.channels

Operator 软件包频道配置。

对象

mirror.operators.packages.channels.name

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

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

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.targetCatalog

要镜像引用的目录的替代名称和可选命名空间层次结构。

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

mirror.operators.targetName

将引用的目录镜像为。

targetName 参数已弃用。改为使用 targetCatalog 参数。

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

mirror.operators.targetTag

附加到 targetNametargetCatalog 的替代标签。

字符串.例如: v1

mirror.platform

镜像集的平台配置。

对象

mirror.platform.architectures

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

字符串数组。例如:

architectures:
  - amd64
  - arm64
  - multi
  - ppc64le
  - s390x
Copy to Clipboard Toggle word wrap

默认值为 amd64。值 multi 确保镜像支持所有可用架构,无需指定单个架构。

mirror.platform.channels

镜像集的平台频道配置。

对象数组。例如:

channels:
  - name: stable-4.10
  - name: stable-4.16
Copy to Clipboard Toggle word wrap

mirror.platform.channels.full

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

布尔值.默认值为 false

mirror.platform.channels.name

发行频道的名称。

字符串.例如: stable-4.16

mirror.platform.channels.minVersion

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

字符串.例如:4.12.6

mirror.platform.channels.maxVersion

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

字符串.例如: 4.16.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 图都可以不同,所以您可能需要调整这些值,直到错误解决为止。

4.13. 镜像设置配置示例

以下 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
Copy to Clipboard Toggle word wrap

使用案例:包含对于多架构的版本的从最低到最新版本的所有 OpenShift Container Platform 版本

以下 ImageSetConfiguration 文件使用一个 registry 存储后端,并包括从最小 4.13.4 迁移到频道中最新版本的所有 OpenShift Container Platform 版本。对于每个使用此镜像集合配置的 oc-mirror,评估 stable-4.13 频道的最新发行版本,因此定期运行 oc-mirror 可确保您自动收到最新版本的 OpenShift Container Platform 镜像。

通过将 platform.architectures 的值设置为 multi,您可以确保支持多架构版本的镜像。

ImageSetConfiguration 文件示例

apiVersion: mirror.openshift.io/v1alpha2
kind: ImageSetConfiguration
storageConfig:
  registry:
    imageURL: example.com/mirror/oc-mirror-metadata
    skipTLS: false
mirror:
  platform:
    architectures:
      - "multi"
    channels:
      - name: stable-4.13
        minVersion: 4.13.4
        maxVersion: 4.13.6
Copy to Clipboard Toggle word wrap

使用案例:包含从最低到最新的 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.16
      packages:
        - name: rhacs-operator
          channels:
          - name: stable
            minVersion: 4.0.1
Copy to Clipboard Toggle word wrap

注意

要指定最大版本而不是最新的版本,请设置 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.11
      type: ocp
    graph: true
  operators:
  - catalog: registry.redhat.io/redhat/certified-operator-index:v4.16
    packages:
    - name: nutanixcsioperator
      channels:
      - name: stable
  additionalImages:
  - name: registry.redhat.io/ubi9/ubi:latest
Copy to Clipboard Toggle word wrap

使用案例:包含默认 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.16
    packages:
    - name: elasticsearch-operator
      channels:
      - name: stable-5.7
      - name: stable
Copy to Clipboard Toggle word wrap

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

以下 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.16
      full: true
Copy to Clipboard Toggle word wrap

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

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

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

本例还使用 targetCatalog 字段指定替代命名空间和名称来镜像目录。

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.16
    targetCatalog: my-namespace/my-operator-catalog
Copy to Clipboard Toggle word wrap

用例:包含任意镜像和 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.16
 operators:
   - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.16
 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
Copy to Clipboard Toggle word wrap

用例:包含 EUS 版本的升级路径

以下 ImageSetConfiguration 文件包含 eus-<version> 频道,其中 maxVersion 值至少要比 minVersion 的值高两个次版本。

例如,在这个 ImageSetConfiguration 文件中,minVersion 设置为 4.12.28,而 eus-4.14 频道的 maxVersion4.14.16

ImageSetConfiguration 文件示例

kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v2alpha1
mirror:
  platform:
    graph: true # Required for the OSUS Operator
    architectures:
    - amd64
    channels:
    - name: stable-4.12
      minVersion: '4.12.28'
      maxVersion: '4.12.28'
      shortestPath: true
      type: ocp
    - name: eus-4.14
      minVersion: '4.12.28'
      maxVersion: '4.14.16'
      shortestPath: true
      type: ocp
Copy to Clipboard Toggle word wrap

4.14. oc-mirror 的命令参考

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

Expand
表 4.2. oc mirror 子命令
子命令描述

completion

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

describe

输出镜像集合的内容。

帮助

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

init

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

list

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

version

输出 oc-mirror 版本。

Expand
表 4.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 的最大嵌套路径数。默认值为 0

--max-per-registry <int>

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

--oci-insecure-signature-policy

在镜像本地 OCI 目录时不要推送签名(使用 --include-local-oci-catalogs)。

--oci-registries-config

提供 registry 配置文件,以指定在镜像本地 OCI 目录(使用 --include-local-oci-catalogs)时复制的替代 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。

-v, --verbose <int>

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

如果从私有 registry 中的镜像 OpenShift Container Platform 容器镜像安装集群,则可以在没有直接互联网连接的受限网络中运行集群。每当集群运行时,此 registry 必须正在运行。

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

重要

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

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

5.1. 先决条件

  • 如果您没有容器镜像 registry 的现有解决方案,OpenShift Container Platform 订阅者会收到一个 mirror registry for Red Hat OpenShift。此镜像 registry 包含在您的订阅中,并充当小型容器 registry。您可以使用此 registry 为断开连接的安装镜像 OpenShift Container Platform 所需的容器镜像。
  • 置备的集群中的每个机器都必须有权访问镜像 registry。如果 registry 无法访问,安装、更新或常规操作等任务(如工作负载重新定位)可能会失败。镜像 registry 必须以高可用性的方式运行,确保其可用性与 OpenShift Container Platform 集群的生产环境可用性一致。

高级别工作流

以下步骤概述了如何使用 oc-mirror 插件 v2 将镜像镜像到镜像 registry 的高级别工作流:

  1. 创建镜像设置配置文件。
  2. 使用以下工作流之一将镜像设置为目标镜像 registry:

    • 将镜像直接设置为目标镜像 registry (mirror 到 mirror)。

      • 镜像设置为磁盘(Mirror-to-Disk),将 tar 文件传送到目标环境,然后将镜像设置为目标镜像 registry (Disk-to-Mirror)。
  3. 配置集群以使用 oc-mirror 插件 v2 生成的资源。
  4. 根据需要重复这些步骤以更新目标镜像 registry。

5.2. 关于 oc-mirror 插件 v2

oc-mirror OpenShift CLI (oc) 插件是一个单一工具,可将所有所需的 OpenShift Container Platform 内容和其他镜像 (mirror)镜像到您的镜像 registry。

要使用 oc-mirror 的新技术预览版本,请在 oc-mirror 插件 v2 命令行中添加--v2 标志。

oc-mirror 插件 v2 具有以下功能:

  • 验证镜像设置配置中指定的完整镜像集是否已镜像到已镜像的 registry,无论镜像之前是否被镜像(mirror)。
  • 使用缓存系统而不是元数据。
  • 通过将新镜像合并到存档中来维护最小归档大小。
  • 使用通过镜像日期选择的内容生成镜像存档。
  • 可以为完整镜像集生成 ImageDigestMirrorSet (IDMS)、ImageTagMirrorSet (ITMS) 而不是 ImageContentSourcePolicy (ICSP),而不是只针对增量更改。
  • 根据捆绑包名称保存过滤器 Operator 版本。
  • 不执行自动修剪。V2 现在有一个 Delete 功能,它授予用户对删除镜像的更多控制。
  • 引入了对 registry.conf 的支持。此更改有助于在使用相同的缓存时镜像到多个 enclaves。

5.2.1. oc-mirror 插件 v2 兼容性和支持

OpenShift Container Platform 支持 oc-mirror 插件 v2。

注意

aarch64,ppc64le, 和 s390x 架构上,oc-mirror 插件 v2 只支持 OpenShift Container Platform 版本 4.14 及更新的版本。

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

5.3. 准备您的镜像主机

要将 oc-mirror 插件 v2 用于镜像镜像,您需要安装插件并使用容器镜像凭证创建文件,使您能够从红帽镜像到您的镜像。

5.3.1. 安装 oc-mirror OpenShift CLI 插件

安装 oc-mirror OpenShift CLI 插件以在断开连接的环境中管理镜像集。

先决条件

  • 已安装 OpenShift CLI(oc)。如果您在完全断开连接的环境中镜像镜像集,请确保以下内容:

    • 您已在可访问互联网的主机上安装了 oc-mirror 插件。
    • 在断开连接的环境中的主机可以访问目标镜像 registry。
  • 您已在使用 oc-mirror 的操作系统中,将 umask 参数设置为 0022
  • 您已为您要使用的 RHEL 版本安装了正确的二进制文件。

流程

  1. 下载 oc-mirror CLI 插件。

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

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

    $ chmod +x oc-mirror
    Copy to Clipboard Toggle word wrap
    注意

    不要重命名 oc-mirror 文件。

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

    $ sudo mv oc-mirror /usr/local/bin/.
    Copy to Clipboard Toggle word wrap

验证

  • 运行以下命令,验证 oc-mirror v2 的插件是否已成功安装:

    $ oc mirror --v2 --help
    Copy to Clipboard Toggle word wrap

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

创建容器镜像 registry 凭证文件,可让您将镜像从红帽 mirror 到您的镜像。

警告

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

警告

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

先决条件

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

流程

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

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

    $ cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json> 
    1
    Copy to Clipboard Toggle word wrap
    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"
        }
      }
    }
    Copy to Clipboard Toggle word wrap
  3. 将文件保存为 $XDG_RUNTIME_DIR/containers/auth.json
  4. 为您的镜像 registry 生成 base64 编码的用户名和密码或令牌:

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

      "auths": {
        "<mirror_registry>": { 
    1
    
          "auth": "<credentials>", 
    2
    
          "email": "you@example.com"
        }
      },
    Copy to Clipboard Toggle word wrap
    1
    指定 registry 域名,以及您的镜像 registry 用来提供内容的可选端口。例如:registry.example.comregistry.example.com:8443
    2
    指定镜像 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"
        }
      }
    }
    Copy to Clipboard Toggle word wrap

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

将镜像集镜像到镜像 registry 可确保所需的镜像在安全且受控的环境中可用,从而促进平稳部署、更新和维护任务。

5.4.1. 构建镜像设置配置

oc-mirror 插件 v2 使用镜像设置配置作为输入文件,以确定镜像镜像所需的镜像。

ImageSetConfiguration 输入文件示例

kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v2alpha1
mirror:
  platform:
    channels:
    - name: stable-4.13
      minVersion: 4.13.10
      maxVersion: 4.13.10
    graph: true
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
      packages:
       - name: aws-load-balancer-operator
       - name: 3scale-operator
       - name: node-observability-operator
  additionalImages:
   - name: registry.redhat.io/ubi8/ubi:latest
   - name: registry.redhat.io/ubi9/ubi@sha256:20f695d2a91352d4eaa25107535126727b5945bff38ed36a3e59590f495046f0
Copy to Clipboard Toggle word wrap

您可以在带有受限互联网访问的环境中使用 oc-mirror 插件 v2 将镜像集镜像到 registry。

先决条件

  • 在运行 oc-mirror 插件 v2 的环境中,您可以访问互联网和镜像 registry。

流程

  • 运行以下命令,将指定镜像设置配置中的镜像镜像到指定的 registry:

    $ oc mirror -c isc.yaml --workspace file://<file_path> docker://<mirror_registry_url> --v2 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定存储镜像并从中删除镜像的镜像 registry 的 URL 或地址。

验证

  1. 进入到 working-dir 中的 cluster-resources 目录,它在 <file_path> 目录中生成。
  2. 验证 ImageDigestMirrorSetImageTagMirrorSetCatalogSource 资源是否存在 YAML 文件。

后续步骤

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

您可以在 OpenShift Container Platform 集群无法访问互联网的完全断开连接的环境中镜像镜像集。

  1. 镜像到磁盘 :准备包含为镜像设置的镜像的存档。需要访问互联网。
  2. 手动步骤 :将存档传输到断开连接的镜像 registry 的网络。
  3. 磁盘到镜像: 要将存档中的镜像集镜像到目标断开连接的 registry,请从可访问镜像 registry 的环境运行 oc-mirror 插件 v2。
5.4.3.1. 从镜像镜像到磁盘

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

oc-mirror 插件 v2 从镜像设置配置中指定的源中检索容器镜像,并将它们打包到本地目录中的 tar 存档中。

流程

  • 运行以下命令,将指定镜像集配置中的镜像镜像到磁盘:

    $ oc mirror -c isc.yaml file://<file_path> --v2 
    1
    Copy to Clipboard Toggle word wrap
    1
    添加所需的文件路径。

验证

  1. 进入生成的 <file_path> 目录。
  2. 验证存档文件是否已生成。

后续步骤

  • 配置集群以使用 oc-mirror 插件 v2 生成的资源。
5.4.3.2. 从磁盘镜像到镜像

您可以使用 oc-mirror 插件 v2 将磁盘中的镜像集镜像到目标镜像 registry。

oc-mirror 插件 v2 从本地磁盘检索容器镜像并将其传送到指定的镜像 registry。

流程

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

    $ oc mirror -c isc.yaml --from file://<file_path> docker://<mirror_registry_url> --v2 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定存储镜像并从中删除镜像的镜像 registry 的 URL 或地址。

验证

  1. 进入到 working-dir 中的 cluster-resources 目录,它在 <file_path> 目录中生成。
  2. 验证 ImageDigestMirrorSetImageTagMirrorSetCatalogSource 资源是否存在 YAML 文件。

后续步骤

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

5.5. 其他资源

5.6. 关于 v2 生成的自定义资源

使用 oc-mirror 插件 v2 时,如果至少找到一个标签,则默认生成 ImageDigestMirrorSet (IDMS) 和 ImageTagMirrorSet (ITMS)。这些集合包含由版本、Operator 目录和其他镜像中的摘要或标签引用的镜像的镜像。

ImageDigestMirrorSet (IDMS) 将镜像 registry 链接到源 registry,并使用摘要规格转发镜像拉取请求。但是,ImagetagMirrorSet (ITMS) 资源使用镜像标签重定向镜像拉取请求。

Operator Lifecycle Manager (OLM) 使用 CatalogSource 资源来检索有关镜像 registry 中可用 Operator 的信息。

OSUS 服务使用 UpdateService 资源为断开连接的环境提供 Cincinnati 图。

将镜像设置为镜像 registry 后,您必须将生成的 ImageDigestMirrorSet (IDMS)、ImageTagMirrorSet (ITMS)、CatalogSourceUpdateService 应用到集群。

重要

在 oc-mirror 插件 v2 中,IDMS 和 ITMS 文件涵盖了整个镜像集,这与 oc-mirror 插件 v1 中的 ICSP 文件不同。因此,即使您仅在增量镜像过程中添加新镜像,IDMS 和 ITMS 文件还包含集合的所有镜像。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  • 运行以下命令,将结果目录中的 YAML 文件应用到集群:

    $ oc apply -f <path_to_oc-mirror_workspace>/working-dir/cluster-resources
    Copy to Clipboard Toggle word wrap

验证

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

    $ oc get imagedigestmirrorset
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令验证 ImageTagMirrorSet 资源是否已成功安装:

    $ oc get imagetagmirrorset
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令验证 CatalogSource 资源是否已成功安装:

    $ oc get catalogsource -n openshift-marketplace
    Copy to Clipboard Toggle word wrap

5.7. 在断开连接的环境中删除镜像

在使用 oc-mirror 插件 v2 之前,您必须删除之前部署的镜像。oc-mirror 插件 v2 不再执行自动修剪。

在使用 oc-mirror 插件 v2 时,您必须创建 DeleteImageSetConfiguration 文件来删除镜像配置。这可防止在使用 ImageSetConfig.yaml 更改时意外删除必要的或部署的镜像。

在以下示例中,DeleteImageSetConfiguration 会删除以下内容:

  • OpenShift Container Platform release 4.13.3 的所有镜像。
  • 目录镜像 redhat-operator-index v4.12
  • aws-load-balancer-operator v0.0.1 捆绑包及其所有相关镜像。
  • 相应的摘要引用的额外镜像 ubiubi-minimal

示例: DeleteImageSetConfig

apiVersion: mirror.openshift.io/v2alpha1
kind: DeleteImageSetConfiguration
delete:
  platform:
    channels:
      - name: stable-4.13
        minVersion: 4.13.3
        maxVersion: 4.13.3
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
      packages:
      - name: aws-load-balancer-operator
         minVersion: 0.0.1
         maxVersion: 0.0.1
  additionalImages:
    - name: registry.redhat.io/ubi8/ubi@sha256:bce7e9f69fb7d4533447232478fd825811c760288f87a35699f9c8f030f2c1a6
    - name: registry.redhat.io/ubi8/ubi-minimal@sha256:8bedbe742f140108897fb3532068e8316900d9814f399d676ac78b46e740e34e
Copy to Clipboard Toggle word wrap

重要

考虑使用 mirror-to-disk 和 disk-to-mirror 工作流来减少镜像问题。

在镜像删除工作流中,oc-mirror 插件 v2 只删除镜像的清单,这不会减少 registry 中占用的存储。

要从不必要的镜像(如带有删除的清单)中释放存储空间,您必须在容器 registry 上启用垃圾收集器。启用垃圾收集器后,registry 将删除不再引用任何清单的镜像 Blob,从而减少之前由已删除 Blob 占用的存储。启用垃圾收集器会因容器 registry 而异。

重要

要在删除镜像时跳过删除 Operator 目录镜像,您必须在 DeleteImageSetConfiguration 文件中的 Operator 目录镜像下列出特定的 Operator。这样可确保只有指定的 Operator 被删除,而不是目录镜像。

如果只指定 Operator 目录镜像,则该目录中的所有 Operator 以及目录镜像本身都将被删除。

5.7.1. 从断开连接的环境中删除镜像

要使用 oc-mirror 插件 v2 从断开连接的环境中删除镜像,请按照以下步骤操作。

流程

  1. 创建删除之前镜像的 YAML 文件:

    $ oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>
    Copy to Clipboard Toggle word wrap

    其中:

    • <previously_mirrored_work_folder> :使用镜像之前在镜像过程中镜像或存储的目录。
    • <remote_registry> : 插入从中删除镜像的远程容器 registry 的 URL 或地址。
  2. 进入创建的 <previously_mirrored_work_folder>/delete directory
  3. 验证 delete-images.yaml 文件是否已生成。
  4. 手工确保文件中列出的每个镜像不再被集群需要,可以安全地从 registry 中删除。
  5. 在生成 delete YAML 文件后,从远程 registry 中删除镜像:

    $ oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/delete/delete-images.yaml docker:/ <remote_registry>
    Copy to Clipboard Toggle word wrap

    其中:

    • <previously_mirrored_work_folder>:指定之前镜像的工作文件夹。

      重要

      使用 mirror-to-mirror 时,镜像不会在本地缓存,因此您无法从本地缓存中删除镜像。

5.8. 验证您选择的镜像以进行镜像

您可以使用 oc-mirror 插件 v2 执行不实际镜像任何镜像的测试运行(dry run)。这可让您查看要镜像的镜像列表。您也可以在早期使用空运行来捕获与镜像设置配置的任何错误。在镜像到磁盘工作流上运行空运行时,oc-mirror 插件 v2 会检查镜像集中的所有镜像是否在其缓存中可用。missing.txt 文件中列出了任何缺少的镜像。在镜像前执行空运行时,missing.txtmapping.txt 文件都包含相同的镜像列表。

5.8.1. 为 oc-mirror 插件 v2 执行空运行

通过在不镜像的情况下执行空运行来验证您的镜像设置。这样可确保您的设置正确,并防止意外更改。

流程

  • 要执行测试运行,请运行 oc mirror 命令,并在命令中使用 --dry-run 参数:

    $ oc mirror -c <image_set_config_yaml> --from file://<oc_mirror_workspace_path> docker://<mirror_registry_url> --dry-run --v2
    Copy to Clipboard Toggle word wrap

    其中:

    • <image_set_config_yaml> :使用您刚才创建的镜像设置配置文件。
    • <oc_mirror_workspace_path>:插入 workspace 路径的地址。
    • <mirror_registry_url> : 插入从中删除镜像的远程容器 registry 的 URL 或地址。

      输出示例

      $ oc mirror --config /tmp/isc_dryrun.yaml file://<oc_mirror_workspace_path> --dry-run --v2
      
      [INFO]   : :warning:  --v2 flag identified, flow redirected to the oc-mirror v2 version. This is Tech Preview, it is still under development and it is not production ready.
      [INFO]   : :wave: Hello, welcome to oc-mirror
      [INFO]   : :gear:  setting up the environment for you...
      [INFO]   : :twisted_rightwards_arrows: workflow mode: mirrorToDisk
      [INFO]   : :sleuth_or_spy:  going to discover the necessary images...
      [INFO]   : :mag: collecting release images...
      [INFO]   : :mag: collecting operator images...
      [INFO]   : :mag: collecting additional images...
      [WARN]   : :warning:  54/54 images necessary for mirroring are not available in the cache.
      [WARN]   : List of missing images in : CLID-19/working-dir/dry-run/missing.txt.
      please re-run the mirror to disk process
      [INFO]   : :page_facing_up: list of all images for mirroring in : CLID-19/working-dir/dry-run/mapping.txt
      [INFO]   : mirror time     : 9.641091076s
      [INFO]   : :wave: Goodbye, thank you for using oc-mirror
      Copy to Clipboard Toggle word wrap

验证

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

    $ cd <oc_mirror_workspace_path>
    Copy to Clipboard Toggle word wrap
  2. 检查生成的 mapping.txtmissing.txt 文件。这些文件包含将要镜像的所有镜像的列表。

5.8.2. oc-mirror 插件 v2 错误故障排除

oc-mirror 插件 v2 现在会在单独的文件中记录所有镜像同步错误,从而更轻松地跟踪和诊断失败。

重要

如果镜像(mirror)发行版本或发行组件镜像时出现错误,它们至关重要。这会立即停止镜像(mirror)过程。

镜像 (mirror) Operator、与 Operator 相关的镜像或其他镜像的错误不会停止镜像(mirror)过程。镜像 (mirror) 过程将继续,oc-mirror 插件 v2 会在处理每 8 个镜像后记录更新日志。

当一个镜像无法被镜像(mirror)时,该镜像会作为一个或多个 Operator 捆绑包的一部分被镜像(mirror),oc-mirror 插件 v2 会通知用户 Operator 不完整,从而明确提供受错误影响的 Operator 捆绑包的信息。

流程

  1. 检查与服务器相关的问题:

    错误示例

    [ERROR]  : [Worker] error mirroring image localhost:55000/openshift/graph-image:latest error: copying image 1/4 from manifest list: trying to reuse blob sha256:edab65b863aead24e3ed77cea194b6562143049a9307cd48f86b542db9eecb6e at destination: pinging container registry localhost:5000: Get "https://localhost:5000/v2/": http: server gave HTTP response to HTTPS client
    Copy to Clipboard Toggle word wrap

    1. 在 oc-mirror 插件 v2 输出目录中,打开 working-dir/logs 文件夹中的 mirroring_error_date_time.log 文件。
    2. 查找表示服务器端问题的错误消息,如 HTTP 500 错误、令牌过期或超时。
    3. 如果问题仍然存在,请重试镜像过程或联系技术支持。
  2. 检查对 Operator 进行镜像的过程不完整:

    错误示例

    error mirroring image docker://registry.redhat.io/3scale-amp2/zync-rhel9@sha256:8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d (Operator bundles: [3scale-operator.v0.11.12] - Operators: [3scale-operator]) error: initializing source docker://localhost:55000/3scale-amp2/zync-rhel9:8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d: reading manifest 8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d in localhost:55000/3scale-amp2/zync-rhel9: manifest unknown
    error mirroring image docker://registry.redhat.io/3scale-amp2/3scale-rhel7-operator-metadata@sha256:de0a70d1263a6a596d28bf376158056631afd0b6159865008a7263a8e9bf0c7d error: skipping operator bundle docker://registry.redhat.io/3scale-amp2/3scale-rhel7-operator-metadata@sha256:de0a70d1263a6a596d28bf376158056631afd0b6159865008a7263a8e9bf0c7d because one of its related images failed to mirror
    error mirroring image docker://registry.redhat.io/3scale-amp2/system-rhel7@sha256:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e (Operator bundles: [3scale-operator.v0.11.12] - Operators: [3scale-operator]) error: initializing source docker://localhost:55000/3scale-amp2/system-rhel7:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e: reading manifest fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e in localhost:55000/3scale-amp2/system-rhel7: manifest unknown
    Copy to Clipboard Toggle word wrap

    1. 在控制台或日志文件中检查相关的警告,以了解哪些 Operator 不完整。

      如果一个 Operator 被标记为不完整,与该 Operator 相关的镜像可能会无法镜像 (mirror)。

    2. 手动镜像(mirror)缺少的镜像或重试镜像 (mirror) 的过程。
  3. 检查与生成的集群资源相关的错误。即使无法镜像(mirror)某些镜像,oc-mirror v2 仍会为已成功镜像(mirror)的镜像生成集群资源,如 IDMS.yamlITMS.yaml 文件。

    1. 在输出目录中检查生成的文件。
    2. 如果特定镜像缺少了这些文件,请确保在镜像(mirror)过程中没有发生关键错误。

按照以下步骤,您可以更好地诊断问题并确保更顺畅地进行镜像。

5.9. enclave 支持的好处

enclave 支持限制内部访问网络的特定部分。与一个 demilitarized zone (DMZ)网络不同,它允许通过防火墙界限和出站流量访问,enclaves 不跨防火墙界限。

重要

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

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

新的 enclave 支持功能适用于在至少一个中间断开连接的网络中保护的多个 enclave 时需要镜像(mirror)。

enclave 支持有以下优点:

  • 您可以镜像多个 enclaves 的内容,并将其集中到一个内部 registry 中。因为有些客户希望在镜像的内容上运行安全检查,所以此设置他们可以一次性运行这些检查。然后,在镜像到下游 enclaves 之前,内容会被检查。
  • 您可以直接从集中式内部 registry 中镜像内容,而无需为每个 enclave 重启镜像过程。
  • 您可以最小化网络阶段的数据传输,以确保 Blob 或镜像仅从一个阶段传输到另一个阶段。

5.9.1. enclave 镜像工作流

上一个镜像概述了在不同环境中使用 oc-mirror 插件的流程,包括在有互联网连接和没有互联网连接的环境中进行。

带有互联网连接的环境

  1. 用户执行 oc-mirror 插件 v2,将在线 registry 的内容镜像到本地磁盘目录。
  2. 镜像内容保存到磁盘中,用于在离线环境中使用。

断开连接的企业环境(没有互联网 ):

  • 流 1:

    • 用户运行 oc-mirror 插件 v2,从磁盘目录中加载镜像的内容(来自在线的环境)加载到 enterprise-registry.in registry。
  • 流 2:

    1. 更新 registry.conf 文件后,用户执行 oc-mirror 插件 v2 以将来自 enterprise-registry.in registry 的内容镜像到 enclave 环境中。
    2. 内容被保存到一个磁盘目录,用于转移到 enclave。

Enclave 环境 (没有互联网):

  • 用户运行 oc-mirror 插件 v2,将目录从磁盘目录加载到 enclave-registry.in registry 中。

图显示了跨这些环境的数据流,侧重于使用 oc-mirror 来处理断开连接的环境和没有互联网连接的环境。

5.9.2. 镜像到 enclave

当镜像到 enclave 时,您必须首先将必要的镜像从一个或多个 enclaves 传送到企业中央 registry 中。

中央 registry 位于安全网络中,特别是断开连接的环境,且不会直接链接到公共互联网。但是,用户必须在一个可访问公共互联网的环境中执行 oc mirror

流程

  1. 在断开连接的环境中运行 oc-mirror 插件 v2 之前,请创建一个 registry.conf 文件。该文件的 TOML 格式如下所述:

    注意

    建议将文件存储在 $HOME/.config/containers/registries.conf/etc/containers/registries.conf 下。

    registry.conf 示例

    [[registry]]
    location="registry.redhat.io"
    [[registry.mirror]]
    location="<enterprise-registry.in>"
    
    [[registry]]
    location="quay.io"
    [[registry.mirror]]
    location="<enterprise-registry.in>"
    Copy to Clipboard Toggle word wrap

  2. 生成镜像存档。

    1. 要将所有 OpenShift Container Platform 内容收集到磁盘的一个归档中(<file_path>/enterprise-content),请运行以下命令:

      $ oc mirror --v2 -c isc.yaml file://<file_path>/enterprise-content
      Copy to Clipboard Toggle word wrap

      isc.yaml 示例

      apiVersion: mirror.openshift.io/v2alpha1
      kind: ImageSetConfiguration
      mirror:
        platform:
          architectures:
            - "amd64"
          channels:
            - name: stable-4.15
              minVersion: 4.15.0
              maxVersion: 4.15.3
      Copy to Clipboard Toggle word wrap

      生成存档后,它将传送到断开连接的环境中。传输机制不是 oc-mirror 插件 v2 的一部分。企业网络管理员需要负责制定传输策略。

      在某些情况下,传输是手动完成的,例如在一个没有网络连接的环境中,将磁盘从一个物理机器中拔出,并插入到另外一个系统。在其他情况下,使用安全文件传输协议 (SFTP) 或其他协议。

  3. 完成存档传输后,您可以再次执行 oc-mirror 插件 v2,以便将相关存档内容镜像到 registry (在示例中是 entrerpise_registry.in),如下例所示:

    $ oc mirror --v2 -c isc.yaml --from file://<disconnected_environment_file_path>/enterprise-content docker://<enterprise_registry.in>/
    Copy to Clipboard Toggle word wrap

    其中:

    • --from 指向包含存档的文件夹。它以 file:// 开头。
    • docker:// 是镜像 (mirror) 的目的地,这是最后的参数。因为它是一个 docker registry。
    • -c (--config)是一个强制参数。它可让 oc-mirror 插件 v2 最终仅将存档的子部分镜像到 registry。一个存档可能包含几个 OpenShift Container Platform 版本,但断开连接的环境或 enclave 可能只镜像几个。
  4. 准备 imageSetConfig YAML 文件,该文件描述了要镜像到 enclave 的内容:

    示例 isc-enclave.yaml

    apiVersion: mirror.openshift.io/v2alpha1
    kind: ImageSetConfiguration
    mirror:
      platform:
        architectures:
          - "amd64"
        channels:
          - name: stable-4.15
            minVersion: 4.15.2
            maxVersion: 4.15.2
    Copy to Clipboard Toggle word wrap

    您必须在可访问断开连接的 registry 的机器上运行 oc-mirror 插件 v2。在上例中,可以访问断开连接的环境 enterprise-registry.in

  5. 更新图形 URL

    如果您使用 graph:true,oc-mirror 插件 v2 会尝试访问 cincinnati API 端点。由于此环境断开连接,因此请务必导出环境变量 UPDATE_URL_OVERRIDE,以引用 OpenShift Update Service (OSUS)的 URL:

    $ export UPDATE_URL_OVERRIDE=https://<osus.enterprise.in>/graph
    Copy to Clipboard Toggle word wrap

    有关在 OpenShift 集群上设置 OSUS 的更多信息,请参阅"使用 OpenShift Update Service 在断开连接的环境中更新集群"。

注意

当升级 OpenShift Container Platform 延长更新支持 (EUS) 版本时,在当前和目标版本之间可能需要一个中间版本。例如,如果当前版本是 4.14,目标版本为 4.16,您可能需要在使用 oc-mirror 插件 v2 时在 ImageSetConfiguration 中包含版本,如 4.15.8

oc-mirror 插件 v2 可能并不总是自动检测,因此请检查 Cincinnati 图形网页以确认任何所需的中间版本并手动添加到您的配置中。

  1. 为 enclave 从企业 registry 中生成镜像存档。

    要为 enclave1 准备存档,用户使用针对那个 enclave 专用的 imageSetConfiguration 在企业断开连接的环境中执行 oc-mirror 插件 v2。这样可确保仅镜像 enclave 需要的镜像:

    $ oc mirror --v2 -c isc-enclave.yaml
    file:///disk-enc1/
    Copy to Clipboard Toggle word wrap

    此操作将所有 OpenShift Container Platform 内容收集到存档中,并在磁盘上生成存档。

  2. 生成存档后,它将传送到 enclave1 网络。传输机制不是 oc-mirror 插件 v2 的责任。
  3. 将内容镜像到 enclave registry

    完成存档传输后,用户可以再次执行 oc-mirror 插件 v2,以便将相关存档内容镜像到 registry。

    $ oc mirror --v2 -c isc-enclave.yaml --from file://local-disk docker://registry.enc1.in
    Copy to Clipboard Toggle word wrap

    enclave1 中的 OpenShift Container Platform 集群的管理员现在可以安装或升级该集群。

5.10. 过滤在 Operator 目录中如何工作

oc-mirror 插件 v2 通过处理 imageSetConfig 中的信息来选择用于镜像的捆绑包列表。

当 oc-mirror 插件 v2 选择用于镜像的捆绑包时,它不会推断 Group Version Kind (GVK) 或捆绑包依赖项,从镜像集中省略它们。相反,它严格遵循用户指令。您必须明确指定任何所需的依赖软件包及其版本。

捆绑包版本通常使用语义版本标准 (SemVer),您可以根据版本在频道中对捆绑包进行排序。您可以选择位于 ImageSetConfig 中的特定范围的 buncles。

此选择算法确保与 oc-mirror 插件 v1 相比的一致性结果。但是,它不包括升级图形详情,如 replaces, skip, 和 skipRange。这种方法与 OLM 算法不同。它可能会比升级集群所需的更多捆绑包进行镜像(mirror),因为 minVersionmaxVersion 之间的升级路径可能比较短。

Expand
表 5.1. 使用下表查看在不同场景中包括哪些捆绑包版本
ImageSetConfig operator 过滤预期的捆绑包版本

场景 1

mirror:
 operators:
   - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10
Copy to Clipboard Toggle word wrap

对于目录中每个包(1 个捆绑包),对应于该软件包的默认频道的头版本。

场景 2

mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10
      full: true
Copy to Clipboard Toggle word wrap

指定目录的所有频道的所有捆绑包

场景 3

mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10
     packages:
    - name: compliance-operator
Copy to Clipboard Toggle word wrap

一个捆绑包,对应于该软件包的默认频道的头版本

场景 4

mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10
      full: true
      - packages:
          - name: elasticsearch-operator
Copy to Clipboard Toggle word wrap

指定软件包的所有频道捆绑包

场景 5

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
       minVersion: 5.6.0
Copy to Clipboard Toggle word wrap

默认频道中的所有捆绑包(从 minVersion )到频道头,该软件包不依赖于升级图表的最短路径。

场景 6

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

默认频道中的所有捆绑包都低于该软件包的 maxVersion

场景 7

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        minVersion: 5.6.0
        maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

默认频道中的所有捆绑包,在那个软件包的 minVersionmaxVersion 之间。频道头不包含,即使过滤中包含多个频道。

场景 8

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        channels
          - name: stable
Copy to Clipboard Toggle word wrap

该软件包所选频道的头捆绑包。

场景 9

mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10
      full: true
      - packages:
          - name: elasticsearch-operator
            channels:
               - name: 'stable-v0'
Copy to Clipboard Toggle word wrap

指定软件包和频道的所有捆绑包。

场景 10

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        channels
          - name: stable
          - name: stable-5.5
Copy to Clipboard Toggle word wrap

该软件包每个所选频道的头捆绑包。

场景 11

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        channels
          - name: stable
            minVersion: 5.6.0
Copy to Clipboard Toggle word wrap

在该软件包所选频道中,所有版本都以 minVersion 开头,直到频道头。这个场景并不能依赖升级图表中的最短路径。

场景 12

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        channels
          - name: stable
            maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

在该软件包所选频道中,所有版本都最多为 maxVersion (不依赖于升级图中的最佳路径)。频道头不包含,即使过滤中包含多个频道。

场景 13

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
       channels
          - name: stable
            minVersion: 5.6.0
            maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

在该软件包的所选频道中,minVersionmaxVersion 之间的所有版本都不依赖于升级图表中最短的路径。频道头不包含,即使过滤中包含多个频道。

场景 14

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.14
    packages:
    - name: aws-load-balancer-operator
      bundles:
      - name: aws-load-balancer-operator.v1.1.0
    - name: 3scale-operator
      bundles:
      - name: 3scale-operator.v0.10.0-mas
Copy to Clipboard Toggle word wrap

只有为每个软件包指定的捆绑包才会包含在过滤中。

场景 15

mirror:
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        channels
          - name: stable
        minVersion: 5.6.0
        maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

不要使用这个场景。通过频道过滤,以及不允许带有 minVersionmaxVersion 的软件包。

场景 16

mirror:
  operators:
   - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
    - name: compliance-operator
        channels
          - name: stable
        minVersion: 5.6.0
        maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

请勿使用此场景。您不能使用 full:trueminVersionmaxVersion 进行过滤。

场景 17

mirror:
  operators:
    - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
      full: true
    packages:
    - name: compliance-operator
        channels
          - name: stable
            minVersion: 5.6.0
            maxVersion: 6.0.0
Copy to Clipboard Toggle word wrap

请勿使用此场景。您不能使用 full:trueminVersionmaxVersion 进行过滤。

5.11. oc-mirror 插件 v2 的 ImageSet 配置参数

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

注意

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

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

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

Expand
表 5.2. ImageSetConfiguration 参数
参数描述

apiVersion

ImageSetConfiguration 内容的 API 版本。

字符串示例: mirror.openshift.io/v2alpha1

archiveSize

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

整数示例:4

mirror

镜像集的配置。

对象

mirror.additionalImages

镜像集的额外镜像配置。

对象数组

Example:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

mirror.additionalImages.name

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

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

mirror.blockedImages

用于阻止镜像(tag)或摘要(SHA)的镜像列表。

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

mirror.operators

镜像集的 Operator 配置。

对象数组

Example:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.16
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

mirror.operators.catalog

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

字符串示例: registry.redhat.io/redhat/redhat-operator-index:v4.15

mirror.operators.full

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

布尔值,默认值为 false

mirror.operators.packages

Operator 软件包配置。

对象数组

Example:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.16
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

mirror.operators.packages.name

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

字符串示例:elasticsearch-operator

mirror.operators.packages.channels

Operator 软件包频道配置

对象

mirror.operators.packages.channels.name

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

字符串示例:faststable-v4.15

mirror.operators.packages.channels.maxVersion

Operator 镜像的最高版本,在其中存在所有频道。

字符串示例:5.2.3-31

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.packages.bundles

选择的捆绑包配置

对象数组

Example:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.16
    packages:
    - name: 3scale-operator
      bundles:
      - name: 3scale-operator.v0.10.0-mas
Copy to Clipboard Toggle word wrap

mirror.operators.packages.bundles.name

为镜像选择的捆绑包的名称(因为它出现在目录中)。

字符串示例:3scale-operator.v0.10.0-mas

mirror.operators.targetCatalog

将引用的目录镜像为的替代名称和可选命名空间层次结构

字符串示例:my-namespace/my-operator-catalog

mirror.operators.targetCatalogSourceTemplate

用于完成 oc-mirror 插件 v2 生成的 catalogSource 自定义资源的模板的路径。

字符串示例:/tmp/catalog-source_template.yaml 模板文件示例:

apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: discarded
  namespace: openshift-marketplace
spec:
  image: discarded
  sourceType: grpc
  updateStrategy:
    registryPoll:
      interval: 30m0s
Copy to Clipboard Toggle word wrap

mirror.operators.targetTag

附加到 targetNametargetCatalog 的替代标签。

字符串示例:v1

mirror.platform

镜像集的平台配置。

对象

mirror.platform.architectures

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

字符串数组示例:

architectures:
  - amd64
  - arm64
  - multi
  - ppc64le
  - s390x
Copy to Clipboard Toggle word wrap

默认值为 amd64。值 multi 确保镜像支持所有可用架构,无需指定单个架构。

mirror.platform.channels

镜像集的平台频道配置。

对象数组示例:

channels:
  - name: stable-4.12
  - name: stable-4.16
Copy to Clipboard Toggle word wrap

mirror.platform.channels.full

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

布尔值,默认为 false

mirror.platform.channels.name

版本频道的名称

字符串示例:stable-4.15

mirror.platform.channels.minVersion

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

字符串示例:4.12.6

mirror.platform.channels.maxVersion

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

字符串示例:4.15.1

mirror.platform.channels.shortestPath

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

布尔值,默认为 false

mirror.platform.channels.type

要镜像的平台的类型

字符串示例:ocpokd。默认为 ocp

mirror.platform.graph

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

布尔值,默认为 false

5.11.1. 删除 ImageSet 配置参数

要使用 oc-mirror 插件 v2,您必须有删除镜像设置配置文件,该文件定义要从镜像 registry 中删除哪些镜像。下表列出了 DeleteImageSetConfiguration 资源的可用参数。

Expand
表 5.3. DeleteImageSetConfiguration 参数
参数描述

apiVersion

DeleteImageSetConfiguration 内容的 API 版本。

字符串示例: mirror.openshift.io/v2alpha1

delete

镜像集要删除的配置。

对象

delete.additionalImages

删除镜像集的额外镜像配置。

对象数组示例:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

delete.additionalImages.name

要删除的镜像的标签或摘要。

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

delete.operators

删除镜像集的 Operator 配置。

对象数组示例:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

delete.operators.catalog

要在 delete 镜像集中包含的 Operator 目录。

字符串示例: registry.redhat.io/redhat/redhat-operator-index:v4.15

delete.operators.full

如果为 true,则删除完整目录、Operator 软件包或 Operator 频道。

布尔值,默认为 false

delete.operators.packages

Operator 软件包配置

对象数组示例:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

delete.operators.packages.name

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

字符串示例:elasticsearch-operator

delete.operators.packages.channels

Operator 软件包频道配置

对象

delete.operators.packages.channels.name

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

字符串示例: faststable-v4.15

delete.operators.packages.channels.maxVersion

在所选频道中删除的 Operator 的最高版本。

字符串示例:5.2.3-31

delete.operators.packages.channels.minVersion

在存在的选择中删除 Operator 的最低版本。

字符串示例:5.2.3-31

delete.operators.packages.maxVersion

在存在的所有频道中删除 Operator 的最高版本。

字符串示例:5.2.3-31

delete.operators.packages.minVersion

在存在的所有频道中删除 Operator 的最低版本。

字符串示例:5.2.3-31

delete.operators.packages.bundles

所选捆绑包配置

对象数组

您不能为同一 Operator 选择频道和捆绑包。

Example:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
    - name: 3scale-operator
      bundles:
      - name: 3scale-operator.v0.10.0-mas
Copy to Clipboard Toggle word wrap

delete.operators.packages.bundles.name

选择要删除的捆绑包的名称(因为它显示在目录中)

字符串示例:3scale-operator.v0.10.0-mas

delete.platform

镜像集的平台配置

对象

delete.platform.architectures

要删除的平台发行版本有效负载的架构。

字符串数组示例:

architectures:
  - amd64
  - arm64
  - multi
  - ppc64le
  - s390x
Copy to Clipboard Toggle word wrap

默认值为 amd64

delete.platform.channels

镜像集的平台频道配置。

对象数组

Example:

channels:
  - name: stable-4.12
  - name: stable-4.16
Copy to Clipboard Toggle word wrap

delete.platform.channels.full

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

布尔值,默认为 false

delete.platform.channels.name

版本频道的名称

字符串示例:stable-4.15

delete.platform.channels.minVersion

要删除的引用平台的最低版本。

字符串示例:4.12.6

delete.platform.channels.maxVersion

要删除的引用平台的最高版本。

字符串示例:4.15.1

delete.platform.channels.shortestPath

在删除最短路径并删除完整范围之间切换。

布尔值,默认为 false

delete.platform.channels.type

要删除的平台的类型

字符串示例:ocpokd。默认为 ocp

delete.platform.graph

确定是否在镜像 registry 上也删除 OSUS 图形。

布尔值,默认为 false

5.12. oc-mirror 插件 v2 的命令参考

下表描述了 oc mirror 子命令和 oc-mirror 插件 v2 的标志:

Expand
表 5.4. oc-mirror 插件 v2 的子命令和标志
子命令描述

帮助

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

version

输出 oc-mirror 版本

delete

删除远程 registry 和本地缓存中的镜像。

Expand
表 5.5. oc mirror 标记
标记描述

--authfile

显示身份验证文件的字符串路径。默认为 ${XDG_RUNTIME_DIR}/containers/auth.json

-c, --config <string>

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

--dest-tls-verify

在访问容器 registry 或守护进程时,需要 HTTPS 并验证证书。

--dry-run

打印没有 mirror 镜像的操作

--from <string>

指定通过执行 oc-mirror 插件 v2 来加载目标 registry 生成的镜像设置存档的路径。

-h,--help

显示帮助

--loglevel

显示字符串日志级别。支持的值包括 info、debug、trace、error。默认为 info

-p, --port

确定 oc-mirror 插件 v2 本地存储实例使用的 HTTP 端口。默认值为 55000

--max-nested-paths <int>

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

--secure-policy

默认值为 false。如果您设置了非默认值,命令会启用签名验证,这是签名验证的安全策略。

--since

包含自指定日期以来的所有新内容(格式:yyyy-mm-dd)。如果没有提供,自以前的镜像(mirror)以来的新内容会被镜像。

--src-tls-verify

在访问容器 registry 或守护进程时,需要 HTTPS 并验证证书。

--strict-archive

默认值为 false。如果您设置了值,命令会生成比 imageSetConfig 自定义资源 (CR) 中设置的 archiveSize 的存档。如果正在归档的文件超过 archiveSize (GB),则镜像已存在。

-v, --version

显示 oc-mirror 插件 v2 的版本。

--workspace

决定字符串 oc-mirror 插件 v2 工作区,其中生成资源和内部工件。

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat