4.9.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,因为它不支持没有标签的推送(在镜像过程中需要这个功能)。
流程
通过
registry.redhat.io
进行身份验证:$ podman login registry.redhat.io
通过目标 registry 进行身份验证:
$ podman login <target_registry>
确定您要包括在您的修剪索引中的软件包列表。
运行您要修剪容器中的源索引镜像。例如:
$ podman run -p50051:50051 \ -it registry.redhat.io/redhat/redhat-operator-index:v4.7
输出示例
Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.7... Getting image source signatures Copying blob ae8a0c23f5b1 done ... INFO[0000] serving registry database=/database/index.db port=50051
在一个单独的终端会话中,使用
grpcurl
命令获取由索引提供的软件包列表:$ grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.out
检查
package.out
文件,确定要保留在此列表中的哪个软件包名称。例如:软件包列表片断示例
... { "name": "advanced-cluster-management" } ... { "name": "jaeger-product" } ... { { "name": "quay-operator" } ...
-
在您执行
podman run
命令的终端会话中,按 Ctrl 和 C 停止容器进程。
运行以下命令来修剪指定软件包以外的所有源索引:
$ opm index prune \ -f registry.redhat.io/redhat/redhat-operator-index:v4.7 \1 -p advanced-cluster-management,jaeger-product,quay-operator \2 [-i registry.redhat.io/openshift4/ose-operator-registry:v4.7] \3 -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.7 4
运行以下命令将新索引镜像推送到目标 registry:
$ podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.7
其中
<namespace>
是 registry 上的任何现有命名空间。例如,您可以创建一个olm-mirror
命名空间来将所有镜像的内容推送到。