×

您可以确保您的集群只使用满足您组织对外部内容控制的容器镜像。在您在受限网络中配置的基础架构上安装集群之前,必须将所需的容器镜像镜像到该环境中。使用oc adm命令,您可以镜像 OpenShift 中的发布和目录镜像。要镜像容器镜像,您必须拥有一个用于镜像的注册表。

您必须能够访问互联网才能获取必要的容器镜像。在此过程中,您将镜像注册表放置在可以访问您的网络和互联网的镜像主机上。如果您无法访问镜像主机,请使用用于断开连接集群的镜像运算符目录过程将镜像复制到您可以跨网络边界移动的设备上。

先决条件

关于镜像注册表

您可以将 OpenShift Container Platform 安装和后续产品更新所需的镜像镜像到容器镜像注册表,例如 Red Hat Quay、JFrog Artifactory、Sonatype Nexus Repository 或 Harbor。如果您无法访问大型容器注册表,可以使用用于 Red Hat OpenShift 的镜像注册表,这是一个包含在 OpenShift Container Platform 订阅中的小型容器注册表。

您可以使用任何支持Docker v2-2的容器注册表,例如 Red Hat Quay、用于 Red Hat OpenShift 的镜像注册表、Artifactory、Sonatype Nexus Repository 或 Harbor。无论您选择哪个注册表,将内容从 Red Hat 托管的互联网站点镜像到隔离的镜像注册表的过程都是相同的。镜像内容后,您将配置每个集群以从您的镜像注册表检索此内容。

OpenShift 镜像注册表不能用作目标注册表,因为它不支持在镜像过程中所需的无标签推送。

如果选择不是用于 Red Hat OpenShift 的镜像注册表的容器注册表,则您配置的每个集群中的每台机器都必须能够访问它。如果注册表无法访问,则安装、更新或正常的操作(例如工作负载重新定位)可能会失败。因此,您必须以高可用性的方式运行镜像注册表,并且镜像注册表至少必须与您的 OpenShift Container Platform 集群的生产可用性相匹配。

当您使用 OpenShift Container Platform 镜像填充镜像注册表时,您可以遵循两种方案。如果您拥有一台可以访问互联网和镜像注册表但不能访问集群节点的主机,则可以直接从该机器镜像内容。此过程称为连接镜像。如果您没有这样的主机,则必须将镜像镜像到文件系统,然后将该主机或可移动介质带入您的受限环境。此过程称为断开连接镜像

对于镜像注册表,要查看已拉取镜像的来源,必须查看 CRI-O 日志中的正在尝试访问日志条目。其他查看镜像拉取来源的方法,例如在节点上使用crictl images命令,即使镜像是从镜像位置拉取的,也会显示非镜像的镜像名称。

Red Hat 不对 OpenShift Container Platform 测试第三方注册表。

附加信息

有关查看 CRI-O 日志以查看镜像来源的信息,请参见 查看镜像拉取来源

准备镜像主机

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

安装 OpenShift CLI

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

如果您安装了早期版本的oc,则无法使用它来完成 OpenShift Container Platform 4.17 中的所有命令。请下载并安装新版本的oc

在 Linux 上安装 OpenShift CLI

您可以使用以下步骤在 Linux 上安装 OpenShift CLI(oc)二进制文件。

步骤
  1. 在 Red Hat 客户门户网站上导航到 OpenShift Container Platform 下载页面

  2. 产品变体下拉列表中选择架构。

  3. 版本下拉列表中选择相应的版本。

  4. 单击OpenShift v4.17 Linux 客户端条目旁边的立即下载并保存文件。

  5. 解压归档文件

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

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

    $ echo $PATH
验证
  • 安装 OpenShift CLI 后,可以使用oc命令。

    $ oc <command>

在 Windows 上安装 OpenShift CLI

您可以使用以下步骤在 Windows 上安装 OpenShift CLI(oc)二进制文件。

步骤
  1. 在 Red Hat 客户门户网站上导航到 OpenShift Container Platform 下载页面

  2. 版本下拉列表中选择相应的版本。

  3. 单击OpenShift v4.17 Windows 客户端条目旁边的立即下载并保存文件。

  4. 使用 ZIP 程序解压缩归档文件。

  5. oc二进制文件移动到PATH中的目录。

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

    C:\> path
验证
  • 安装 OpenShift CLI 后,可以使用oc命令。

    C:\> oc <command>

在 macOS 上安装 OpenShift CLI

您可以使用以下步骤在 macOS 上安装 OpenShift CLI(oc)二进制文件。

步骤
  1. 在 Red Hat 客户门户网站上导航到 OpenShift Container Platform 下载页面

  2. 版本下拉列表中选择相应的版本。

  3. 单击OpenShift v4.17 macOS 客户端条目旁边的立即下载并保存文件。

    对于 macOS arm64,请选择OpenShift v4.17 macOS arm64 客户端条目。

  4. 解压归档文件。

  5. oc二进制文件移动到 PATH 上的目录。

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

    $ echo $PATH
验证
  • 使用oc命令验证您的安装

    $ oc <command>

配置允许镜像镜像的凭据

创建一个容器镜像注册表凭据文件,使您可以将镜像从 Red Hat 镜像到您的镜像。

安装集群时,请勿将此镜像注册表凭据文件用作拉取密钥。如果您在安装集群时提供此文件,则集群中的所有机器都将对您的镜像注册表具有写入访问权限。

先决条件
  • 您已配置一个要在断开连接的环境中使用的镜像注册表。

  • 您已确定镜像注册表上的镜像存储库位置以将镜像镜像到其中。

  • 您已预配了一个镜像注册表帐户,允许将镜像上传到该镜像存储库。

  • 您可以写入镜像注册表。

步骤

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

  1. 从 Red Hat OpenShift 集群管理器下载您的registry.redhat.io 拉取密钥

  2. 通过运行以下命令创建拉取密钥的 JSON 格式副本:

    $ cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json> (1)
    1 指定要存储拉取密钥的文件夹路径以及要创建的 JSON 文件的名称。
    拉取密钥示例
    {
      "auths": {
        "cloud.openshift.com": {
          "auth": "b3BlbnNo...",
          "email": "you@example.com"
        },
        "quay.io": {
          "auth": "b3BlbnNo...",
          "email": "you@example.com"
        },
        "registry.connect.redhat.com": {
          "auth": "NTE3Njg5Nj...",
          "email": "you@example.com"
        },
        "registry.redhat.io": {
          "auth": "NTE3Njg5Nj...",
          "email": "you@example.com"
        }
      }
    }
  3. 通过运行以下命令生成镜像注册表的 base64 编码用户名和密码或令牌:

    $ echo -n '<user_name>:<password>' | base64 -w0 (1)
    1 对于<user_name><password>,请指定您为注册表配置的用户名和密码。
    示例输出
    BGVtbYk3ZHAtqXs=
  4. 编辑 JSON 文件并添加一个描述您的注册表的节:

      "auths": {
        "<mirror_registry>": { (1)
          "auth": "<credentials>", (2)
          "email": "you@example.com"
        }
      },
    1 指定您的镜像注册表用于提供内容的注册表域名,以及可选的端口,例如registry.example.comregistry.example.com:8443
    2 指定镜像注册表的 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"
        }
      }
    }

镜像 OpenShift Container Platform 镜像存储库

将 OpenShift Container Platform 镜像存储库镜像到您的注册表中,以便在集群安装或升级期间使用。

先决条件
  • 您的镜像主机可以访问互联网。

  • 您已配置一个要在受限网络中使用的镜像注册表,并且可以访问您已配置的证书和凭据。

  • 您已下载 Red Hat OpenShift 集群管理器中的拉取密钥 并将其修改为包含对镜像存储库的认证。

  • 如果您使用自签名证书,则您已在证书中指定了主题替代名称。

步骤

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

  1. 查看 OpenShift Container Platform 下载页面 以确定要安装的 OpenShift Container Platform 版本,并在 存储库标签 页面上确定相应的标签。

  2. 设置所需的環境變量

    1. 导出发行版版本

      $ OCP_RELEASE=<release_version>

      对于<release_version>,请指定与要安装的 OpenShift Container Platform 版本相对应的标签,例如4.5.4

    2. 导出本地注册表名称和主机端口

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

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

    3. 导出本地存储库名称

      $ LOCAL_REPOSITORY='<local_repository_name>'

      对于<local_repository_name>,请指定要在注册表中创建的存储库的名称,例如ocp4/openshift4

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

      $ PRODUCT_REPO='openshift-release-dev'

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

    5. 导出注册表拉取密钥的路径

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'

      对于<path_to_pull_secret>,请指定您创建的镜像注册表的拉取密钥的绝对路径和文件名。

    6. 导出发行版镜像

      $ RELEASE_NAME="ocp-release"

      对于生产环境发行版,必须指定ocp-release

    7. 导出集群的架构类型

      $ ARCHITECTURE=<cluster_architecture> (1)
      1 指定集群的架构,例如x86_64aarch64s390xppc64le
    8. 导出用于存放镜像的目录路径

      $ REMOVABLE_MEDIA_PATH=<path> (1)
      1 指定完整路径,包括初始正斜杠 (/) 字符。
  3. 将版本镜像镜像到镜像注册表

    • 如果您的镜像主机没有互联网访问权限,请执行以下操作

      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
      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}
      5. 将介质带到受限网络环境并将镜像上传到本地容器注册表。

        $ oc image mirror -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} (1)
        1 对于REMOVABLE_MEDIA_PATH,您必须使用镜像镜像时指定的相同路径。

        运行oc image mirror可能会导致以下错误:error: unable to retrieve source image。当镜像索引包含对镜像注册表上不再存在的镜像的引用时,会发生此错误。镜像索引可能会保留旧的引用,以允许运行这些镜像的用户升级到升级图上的较新点。作为临时解决方法,您可以使用--skip-missing选项绕过错误并继续下载镜像索引。更多信息,请参见服务网格操作员镜像失败

    • 如果本地容器注册表已连接到镜像主机,请执行以下操作

      1. 使用以下命令直接将发行版镜像推送到本地注册表

        $ 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}

        此命令将发行版信息作为摘要拉取,其输出包含安装集群时所需的imageContentSources数据。

      2. 记录先前命令输出中的整个imageContentSources部分。关于镜像的信息对您的镜像存储库是唯一的,您必须在安装过程中将imageContentSources部分添加到install-config.yaml文件中。

        镜像过程中,镜像名称将被修补为 Quay.io,并且 podman 镜像将在引导虚拟机上的注册表中显示 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)
      1 可选:如果您不想为目标注册表配置信任,请添加--insecure=true标志。
    • 如果本地容器注册表已连接到镜像主机,请运行以下命令

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"

      为确保您使用的是所选 OpenShift Container Platform 版本的正确镜像,您必须从镜像内容中提取安装程序。

      您必须在具有活动互联网连接的机器上执行此步骤。

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

    $ openshift-install

断开连接环境中的集群示例操作员

在断开连接的环境中,安装集群后,您必须执行其他步骤才能配置集群示例操作员。请查看以下信息以作准备。

集群示例操作员镜像辅助

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

配置映射数据字段中每个条目的密钥格式为<image_stream_name>_<image_stream_tag_name>

在 OpenShift Container Platform 的断开连接安装期间,集群示例操作员的状态设置为Removed。如果您选择将其更改为Managed,它将安装示例。

在网络受限或断开连接的环境中使用示例可能需要访问网络外部的服务。一些示例服务包括:Github、Maven Central、npm、RubyGems、PyPi 等。可能需要采取其他步骤才能使集群示例操作员的对象访问他们所需的服务。

您可以将此配置映射用作需要为镜像流导入而镜像哪些镜像的参考。

  • 在集群示例操作员设置为Removed时,您可以创建镜像注册表,或确定要使用的现有镜像注册表。

  • 使用新的配置映射作为您的指南,将您想要的示例镜像到镜像注册表。

  • 将您未镜像的任何镜像流添加到集群示例操作员配置对象的skippedImagestreams列表中。

  • 将集群示例操作员配置对象的samplesRegistry设置为镜像注册表。

  • 然后将集群示例操作员设置为Managed以安装您已镜像的镜像流。

镜像操作员目录以用于断开连接的集群

您可以使用oc adm catalog mirror命令将 Red Hat 提供的目录或自定义目录的操作员内容镜像到容器镜像注册表。目标注册表必须支持Docker v2-2。对于受限网络上的集群,此注册表可以是集群可以访问的注册表,例如在受限网络集群安装期间创建的镜像注册表。

  • OpenShift 镜像注册表不能用作目标注册表,因为它不支持在镜像过程中所需的无标签推送。

  • 运行oc adm catalog mirror可能会导致以下错误:error: unable to retrieve source image。当镜像索引包含对镜像注册表上不再存在的镜像的引用时,会发生此错误。镜像索引可能会保留旧的引用,以允许运行这些镜像的用户升级到升级图上的较新点。作为临时解决方法,您可以使用--skip-missing选项绕过错误并继续下载镜像索引。更多信息,请参见服务网格操作员镜像失败

oc adm catalog mirror命令还会自动将镜像过程中指定的索引镜像(无论是 Red Hat 提供的索引镜像还是您自己构建的自定义索引镜像)镜像到目标注册表。然后,您可以使用镜像的索引镜像创建目录源,允许操作员生命周期管理器 (OLM) 将镜像的目录加载到您的 OpenShift Container Platform 集群上。

先决条件

将操作员目录镜像到断开连接的集群具有以下先决条件

  • 具有不受限制网络访问权限的工作站。

  • podman 版本 1.9.3 或更高版本。

  • 如果您想过滤或修剪现有目录并有选择地仅镜像操作员的子集,请参见以下部分

  • 如果您想镜像 Red Hat 提供的目录,请在您具有不受限制网络访问权限的工作站上运行以下命令以对registry.redhat.io进行身份验证

    $ podman login registry.redhat.io
  • 访问支持Docker v2-2的镜像注册表。

  • 在您的镜像注册表上,确定要用于存储镜像的操作员内容的存储库或命名空间。例如,您可以创建一个olm-mirror存储库。

  • 如果您的镜像注册表无法访问互联网,请将可移动介质连接到具有无限制网络访问权限的工作站。

  • 如果您使用的是私有注册表,包括registry.redhat.io,请将REG_CREDS环境变量设置为您的注册表凭据的文件路径,以便在后续步骤中使用。例如,对于podman CLI

    $ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json

提取和镜像目录内容

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

或者,如果您的镜像注册表位于完全断开连接或隔离的主机上,您可以先将内容镜像到可移动介质,然后将介质移动到断开连接的环境中,再将内容从介质镜像到注册表。

将目录内容镜像到同一网络上的注册表

如果您的镜像注册表与具有无限制网络访问权限的工作站位于同一网络上,请在您的工作站上执行以下操作。

步骤
  1. 如果您的镜像注册表需要身份验证,请运行以下命令登录到注册表

    $ podman login <mirror_registry>
  2. 运行以下命令以提取并将内容镜像到镜像注册表

    $ 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)
    
    1 指定您要镜像的目录的索引镜像。
    2 指定目标注册表的完全限定域名 (FQDN),以将 Operator 内容镜像到该注册表。镜像注册表<repository>可以是注册表上任何现有的存储库或命名空间,例如预先条件中概述的olm-mirror。如果在镜像过程中找到现有存储库,则存储库名称将添加到生成的镜像名称中。如果您不希望镜像名称包含存储库名称,请从此行中省略<repository>值,例如<mirror_registry>:<port>
    3 可选:如果需要,请指定注册表凭据文件的路径。对于registry.redhat.io,需要{REG_CREDS}
    4 可选:如果您不想为目标注册表配置信任,请添加--insecure标志。
    5 可选:当有多个变体可用时,指定要选择的索引镜像的平台和架构。镜像被指定为'<platform>/<arch>[/<variant>]'。这并不适用于索引引用的镜像。有效值为linux/amd64linux/ppc64lelinux/s390xlinux/arm64
    6 可选:仅生成镜像所需的清单,而不实际将镜像内容镜像到注册表。此选项可用于查看将镜像的内容,并允许您对映射列表进行任何更改,如果您只需要一部分包。然后,您可以使用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)
    
    1 命令生成的临时index.db数据库的目录。
    2 记录生成的清单目录名称。此目录在后续步骤中会用到。

    Red Hat Quay 不支持嵌套存储库。因此,运行oc adm catalog mirror命令将失败并出现401未授权错误。作为解决方法,您可以在运行oc adm catalog mirror命令时使用--max-components=2选项来禁用嵌套存储库的创建。有关此解决方法的更多信息,请参阅使用 catalog mirror 命令与 Quay 注册表时抛出的未授权错误知识库解决方案。

将目录内容镜像到隔离的注册表

如果您的镜像注册表位于完全断开连接或隔离的主机上,请执行以下操作。

步骤
  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)
    
    1 指定您要镜像的目录的索引镜像。
    2 指定要镜像到当前目录中本地文件的內容。
    3 可选:如果需要,请指定注册表凭据文件的路径。
    4 可选:如果您不想为目标注册表配置信任,请添加--insecure标志。
    5 可选:当有多个变体可用时,指定要选择的索引镜像的平台和架构。镜像被指定为'<platform>/<arch>[/<variant>]'。这并不适用于索引引用的镜像。有效值为linux/amd64linux/ppc64lelinux/s390xlinux/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)
    
    1 记录生成的清单目录名称。此目录在后续步骤中会用到。
    2 记录基于您提供的索引镜像的扩展file://路径。此路径在后续步骤中会用到。

    此命令会在您的当前目录中创建一个v2/目录。

  2. v2/目录复制到可移动介质。

  3. 物理移除介质并将其连接到断开连接环境中可以访问镜像注册表的主机。

  4. 如果您的镜像注册表需要身份验证,请在断开连接环境中的主机上运行以下命令登录到注册表

    $ podman login <mirror_registry>
  5. 从包含v2/目录的父目录运行以下命令,将镜像从本地文件上传到镜像注册表

    $ 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)
    
    1 指定上一步命令输出的file://路径。
    2 指定目标注册表的完全限定域名 (FQDN),以将 Operator 内容镜像到该注册表。镜像注册表<repository>可以是注册表上任何现有的存储库或命名空间,例如预先条件中概述的olm-mirror。如果在镜像过程中找到现有存储库,则存储库名称将添加到生成的镜像名称中。如果您不希望镜像名称包含存储库名称,请从此行中省略<repository>值,例如<mirror_registry>:<port>
    3 可选:如果需要,请指定注册表凭据文件的路径。
    4 可选:如果您不想为目标注册表配置信任,请添加--insecure标志。
    5 可选:当有多个变体可用时,指定要选择的索引镜像的平台和架构。镜像被指定为'<platform>/<arch>[/<variant>]'。这并不适用于索引引用的镜像。有效值为linux/amd64linux/ppc64lelinux/s390xlinux/arm64.*

    Red Hat Quay 不支持嵌套存储库。因此,运行oc adm catalog mirror命令将失败并出现401未授权错误。作为解决方法,您可以在运行oc adm catalog mirror命令时使用--max-components=2选项来禁用嵌套存储库的创建。有关此解决方法的更多信息,请参阅使用 catalog mirror 命令与 Quay 注册表时抛出的未授权错误知识库解决方案。

  6. 再次运行oc adm catalog mirror命令。使用新镜像的索引镜像作为源,并使用上一步中使用的相同镜像注册表目标

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

    此步骤是必需的,因为在上一步中生成的imageContentSourcePolicy.yaml文件中,镜像映射必须从本地路径更新到有效的镜像位置。否则,当您在后续步骤中创建ImageContentSourcePolicy对象时,将会出现错误。

镜像目录后,您可以继续进行群集安装的其余部分。群集安装成功完成后,必须指定此过程中的清单目录才能创建ImageContentSourcePolicyCatalogSource对象。这些对象是启用从 OperatorHub 安装 Operator 所必需的。

生成的清单

将 Operator 目录内容镜像到您的镜像注册表后,会在您的当前目录中生成一个清单目录。

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

manifests-<index_image_name>-<random_number>

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

manifests-index/<repository>/<index_image_name>-<random_number>

清单目录名称在后续步骤中会用到。

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

  • catalogSource.yaml文件是CatalogSource对象的基准定义,其中预先填充了您的索引镜像标签和其他相关元数据。此文件可以按原样使用,也可以修改以将目录源添加到您的集群。

    如果您将内容镜像到本地文件,则必须修改catalogSource.yaml文件以删除metadata.name字段中的任何反斜杠 (/) 字符。否则,当您尝试创建对象时,它会失败并出现“无效资源名称”错误。

  • imageContentSourcePolicy.yaml文件定义一个ImageContentSourcePolicy对象,该对象可以配置节点以在 Operator 清单中存储的镜像引用和镜像注册表之间进行转换。

    如果您的集群使用ImageContentSourcePolicy对象配置镜像仓库,则只能为镜像注册表使用全局拉取密钥。您无法向项目添加拉取密钥。

  • mapping.txt文件包含所有源镜像以及在目标注册表中的映射位置。此文件与oc image mirror命令兼容,可用于进一步自定义镜像配置。

    如果您在镜像过程中使用了--manifests-only标志,并且想要进一步精简要镜像的软件包子集,请参阅OpenShift Container Platform 4.7文档中镜像包清单格式目录镜像过程中的步骤,了解如何修改您的mapping.txt文件以及如何将该文件与oc image mirror命令一起使用。

安装后要求

镜像目录后,您可以继续进行集群安装的其余步骤。集群安装成功完成后,必须指定此过程中的清单目录来创建ImageContentSourcePolicyCatalogSource对象。这些对象是填充和启用从OperatorHub安装Operator所需的。

后续步骤

其他资源