×

在更新断开连接的环境中的集群之前,必须将容器镜像镜像到镜像注册表。您也可以在连接的环境中使用此过程,以确保您的集群仅运行已满足您组织对外部内容的控制的已批准容器镜像。

集群运行期间,镜像注册表必须始终运行。

以下步骤概述了将镜像镜像到镜像注册表的高级工作流程

  1. 在所有用于检索和推送发行版镜像的设备上安装 OpenShift CLI (oc)。

  2. 下载注册表拉取密钥并将其添加到您的集群。

  3. 如果您使用的是 oc-mirror OpenShift CLI (oc) 插件

    1. 在所有用于检索和推送发行版镜像的设备上安装 oc-mirror 插件。

    2. 为插件创建镜像设置配置文件,用于确定要镜像哪些发行版镜像。您可以稍后编辑此配置文件以更改插件镜像的发行版镜像。

    3. 将目标发行版镜像直接镜像到镜像注册表,或镜像到可移动介质,然后镜像到镜像注册表。

    4. 配置您的集群以使用 oc-mirror 插件生成的资源。

    5. 根据需要重复这些步骤以更新镜像注册表。

  4. 如果您使用的是 oc adm release mirror 命令

    1. 设置与您的环境和您要镜像的发行版镜像相对应的环境变量。

    2. 将目标发行版镜像直接镜像到镜像注册表,或镜像到可移动介质,然后镜像到镜像注册表。

    3. 根据需要重复这些步骤以更新镜像注册表。

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

  • 它可以镜像容器镜像以外的内容。

  • 首次镜像镜像后,更新注册表中的镜像更容易。

  • oc-mirror 插件提供了一种自动镜像 Quay 中发行版有效负载的方法,还为在断开连接的环境中运行的 OpenShift 更新服务构建最新的图形数据镜像。

使用 oc-mirror 插件镜像资源

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

有关更多详细信息,请参阅 使用 oc-mirror 插件镜像断开连接安装的镜像

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

您可以使用 oc adm release mirror 命令将镜像镜像到您的镜像注册表。

先决条件

  • 您必须拥有一个支持Docker v2-2的容器镜像注册表,该注册表位于将托管 OpenShift Container Platform 集群的位置,例如 Red Hat Quay。

    如果您使用 Red Hat Quay,则必须使用 3.6 或更高版本以及 oc-mirror 插件。如果您有 Red Hat Quay 的授权,请参阅有关部署 Red Hat Quay 的文档,用于概念验证目的使用 Quay Operator。如果您需要选择和安装注册表的额外帮助,请联系您的销售代表或 Red Hat 支持。

    如果您没有现有的容器镜像注册表解决方案,则Red Hat OpenShift 的镜像注册表包含在 OpenShift Container Platform 订阅中。Red Hat OpenShift 的镜像注册表是一个小型容器注册表,您可以使用它在断开连接的安装和更新中镜像 OpenShift Container Platform 容器镜像。

准备镜像主机

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

安装 OpenShift CLI

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

如果您安装了早期版本的 oc,则无法使用它来完成 OpenShift Container Platform 4.17 中的所有命令。下载并安装新版本的 oc。如果您正在更新断开连接环境中的集群,请安装您计划更新到的 oc 版本。

在 Linux 上安装 OpenShift CLI

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

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

  2. 从“产品变体”下拉列表中选择体系结构。

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

  4. 单击“OpenShift v4.17 Linux Clients”条目旁边的“立即下载”,然后保存文件。

  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 Client”条目旁边的“立即下载”,然后保存文件。

  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 Clients”条目旁边的“立即下载”,然后保存文件。

    对于 macOS arm64,请选择“OpenShift v4.17 macOS arm64 Client”条目。

  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. 可选:如果使用 oc-mirror 插件,请将文件保存为 ~/.docker/config.json$XDG_RUNTIME_DIR/containers/auth.json

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

      $ mkdir -p <directory_name>

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

    2. 通过输入以下命令将拉取密钥复制到相应的目录:

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

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

  4. 通过运行以下命令生成镜像注册表的 base64 编码用户名和密码或令牌:

    $ echo -n '<user_name>:<password>' | base64 -w0 (1)
    1 对于 <user_name><password>,请指定您为注册表配置的用户名和密码。
    示例输出
    BGVtbYk3ZHAtqXs=
  5. 编辑 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 更新服务应用程序过度使用内存,必须按照以下步骤将发行版镜像镜像到单独的存储库。

先决条件
  • 您已配置一个镜像注册表以在您的断开连接的环境中使用,并且可以访问您已配置的证书和凭据。

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

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

步骤
  1. 使用Red Hat OpenShift Container Platform 更新图可视化工具和更新规划器来规划从一个版本到另一个版本的更新。OpenShift 更新图提供通道图,并提供一种方法来确认您的当前集群版本和目标集群版本之间是否存在更新路径。

  2. 设置所需的環境變量

    1. 导出发行版版本

      $ export 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. 如果您正在使用 OpenShift 更新服务,请导出另一个本地仓库名称来包含发行版镜像

      $ LOCAL_RELEASE_IMAGES_REPOSITORY='<local_release_images_repository_name>'

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

    5. 导出要镜像的仓库名称

      $ PRODUCT_REPO='openshift-release-dev'

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

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

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'

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

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

    7. 导出镜像版本

      $ RELEASE_NAME="ocp-release"

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

    8. 导出集群的架构类型

      $ ARCHITECTURE=<cluster_architecture> (1)
      1 指定集群的架构,例如x86_64aarch64s390xppc64le
    9. 导出托管镜像的目录路径

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

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

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

      1. 将可移动介质连接到已连接到互联网的系统。

      2. 将镜像和配置清单镜像到可移动介质上的目录

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

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

      3. 将介质带到断开连接的环境,并将镜像上传到本地容器注册表。

        $ oc image mirror  -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} (1)
        1 对于REMOVABLE_MEDIA_PATH,您必须使用镜像镜像时指定的相同路径。
      4. 使用oc 命令行界面 (CLI) 登录到您正在更新的集群。

      5. 将镜像的发行版镜像签名配置映射应用到已连接的集群

        $ oc apply -f ${REMOVABLE_MEDIA_PATH}/mirror/config/<image_signature_file> (1)
        1 对于<image_signature_file>,指定文件的路径和名称,例如signature-sha256-81154f5c03294534.yaml
      6. 如果您正在使用 OpenShift 更新服务,请将发行版镜像镜像到单独的仓库

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

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

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

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

      2. 如果您正在使用 OpenShift 更新服务,请将发行版镜像镜像到单独的仓库

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