×

您可以首先创建镜像注册表,然后将集群样本操作符与替代注册表一起使用。

您必须能够访问互联网才能获取必要的容器镜像。在此过程中,您将镜像注册表放置在既可以访问您的网络又可以访问互联网的镜像主机上。

关于镜像注册表

您可以将 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": "[email protected]"
        },
        "quay.io": {
          "auth": "b3BlbnNo...",
          "email": "[email protected]"
        },
        "registry.connect.redhat.com": {
          "auth": "NTE3Njg5Nj...",
          "email": "[email protected]"
        },
        "registry.redhat.io": {
          "auth": "NTE3Njg5Nj...",
          "email": "[email protected]"
        }
      }
    }
  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": "[email protected]"
        }
      },
    1 指定您的镜像注册表用于提供内容的注册表域名,以及可选的端口,例如registry.example.comregistry.example.com:8443
    2 指定镜像注册表的 base64 编码用户名和密码。
    修改后的拉取密钥示例
    {
      "auths": {
        "registry.example.com": {
          "auth": "BGVtbYk3ZHAtqXs=",
          "email": "[email protected]"
        },
        "cloud.openshift.com": {
          "auth": "b3BlbnNo...",
          "email": "[email protected]"
        },
        "quay.io": {
          "auth": "b3BlbnNo...",
          "email": "[email protected]"
        },
        "registry.connect.redhat.com": {
          "auth": "NTE3Njg5Nj...",
          "email": "[email protected]"
        },
        "registry.redhat.io": {
          "auth": "NTE3Njg5Nj...",
          "email": "[email protected]"
        }
      }
    }

镜像 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命名空间中的大多数镜像流都指向 Red Hat 注册表 registry.redhat.io 中的镜像。

cliinstallermust-gathertests 镜像流虽然是安装有效负载的一部分,但并非由集群样本操作符管理。本程序不涉及这些镜像流。

在断开连接的环境中,必须将集群样本操作符设置为Managed。要安装镜像流,您需要一个镜像注册表。

先决条件
  • 以具有cluster-admin角色的用户身份访问集群。

  • 为您的镜像注册表创建一个拉取密钥。

步骤
  1. 访问要镜像的特定镜像流的镜像,例如

    $ oc get is <imagestream> -n openshift -o json | jq .spec.tags[].from.name | grep registry.redhat.io
  2. 镜像来自 registry.redhat.io 的与您需要的任何镜像流关联的镜像

    $ oc image mirror registry.redhat.io/rhscl/ruby-25-rhel7:latest ${MIRROR_ADDR}/rhscl/ruby-25-rhel7:latest
  3. 创建集群的镜像配置对象

    $ oc create configmap registry-config --from-file=${MIRROR_ADDR_HOSTNAME}..5000=$path/ca.crt -n openshift-config
  4. 在集群的镜像配置对象中添加镜像所需的受信任 CA。

    $ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-config"}}}' --type=merge
  5. 更新集群样本操作符配置对象中的samplesRegistry字段,使其包含镜像配置中定义的镜像位置的hostname部分。

    $ oc edit configs.samples.operator.openshift.io -n openshift-cluster-samples-operator

    这是必需的,因为镜像流导入过程目前不使用镜像或搜索机制。

  6. 将任何未镜像的镜像流添加到集群样本操作符配置对象中的skippedImagestreams字段。或者,如果您不想支持任何样本镜像流,请在集群样本操作符配置对象中将集群样本操作符设置为Removed

    如果镜像流导入失败,但集群样本操作符正在定期重试或似乎没有重试,则集群样本操作符会发出警报。

    openshift命名空间中的许多模板都引用了镜像流。因此,使用Removed清除镜像流和模板,可以消除在由于任何缺少的镜像流而导致它们无法正常工作时尝试使用它们的可能性。

集群样本操作符对镜像的辅助

在安装过程中,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以安装您已镜像的镜像流。