4.8.3. 修剪索引镜像

基于 Operator Bundle Format 的索引镜像是 Operator 目录的容器化快照。您可以修剪除指定的软件包列表以外的所有索引,创建只包含您想要的 Operator 的源索引副本。

当将 Operator Lifecycle Manager(OLM)配置为在受限网络 OpenShift Container Platform 集群上使用镜像内容时,如果您只想从默认目录中镜像一部分 Operator,请使用此修剪方法。

对于此过程中的步骤,目标 registry 是一个存在的镜像 registry,您的具有无限网络访问权限的工作站可以访问该 registry。本例还显示修剪默认 redhat-operators 目录的索引镜像,但所有索引镜像的过程都是一样的。

先决条件

  • 没有网络访问限制的工作站
  • podman 版本 1.9.3+
  • grpcurl (第三方命令行工具)
  • opm 版本 1.18.0+
  • 访问支持 Docker v2-2 的 registry

    重要

    OpenShift Container Platform 集群的内部 registry 不能用作目标 registry,因为它不支持没有标签的推送(在镜像过程中需要这个功能)。

流程

  1. 通过 registry.redhat.io 进行身份验证:

    $ podman login registry.redhat.io
  2. 通过目标 registry 进行身份验证:

    $ podman login <target_registry>
  3. 确定您要包括在您的修剪索引中的软件包列表。

    1. 运行您要修剪容器中的源索引镜像。例如:

      $ podman run -p50051:50051 \
          -it registry.redhat.io/redhat/redhat-operator-index:v4.6

      输出示例

      Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.6...
      Getting image source signatures
      Copying blob ae8a0c23f5b1 done
      ...
      INFO[0000] serving registry                              database=/database/index.db port=50051

    2. 在一个单独的终端会话中,使用 grpcurl 命令获取由索引提供的软件包列表:

      $ grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.out
    3. 检查 package.out 文件,确定要保留在此列表中的哪个软件包名称。例如:

      软件包列表片断示例

      ...
      {
        "name": "advanced-cluster-management"
      }
      ...
      {
        "name": "jaeger-product"
      }
      ...
      {
      {
        "name": "quay-operator"
      }
      ...

    4. 在您执行 podman run 命令的终端会话中,按 CtrlC 停止容器进程。
  4. 运行以下命令来修剪指定软件包以外的所有源索引:

    $ opm index prune \
        -f registry.redhat.io/redhat/redhat-operator-index:v4.6 \1
        -p advanced-cluster-management,jaeger-product,quay-operator \2
        [-i registry.redhat.io/openshift4/ose-operator-registry:v4.6] \3
        -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.6 4
    1
    到修剪的索引。
    2
    要保留的软件包用逗号隔开。
    3
    只适用于 IBM Power Systems 和 IBM Z 镜像: Operator Registry 基础镜像和与目标 OpenShift Container Platform 集群主版本和次版本匹配的标签。
    4
    用于正在构建新索引镜像的自定义标签。
  5. 运行以下命令将新索引镜像推送到目标 registry:

    $ podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.6

    其中 <namespace> 是 registry 上的任何现有命名空间。例如,您可以创建一个 olm-mirror 命名空间来将所有镜像的内容推送到。