3.3. 使用 oc-mirror 插件 v2 为断开连接的安装 mirror 镜像
如果从私有 registry 中的镜像 OpenShift Container Platform 容器镜像安装集群,则在断开连接的环境中运行集群。每当集群运行时,此 registry 必须正在运行。
您可以使用 oc-mirror 插件 v2 在完全或部分断开连接的环境中将镜像 mirror 到mirror registry。要从官方红帽 registry 下载所需的镜像,您必须从具有互联网连接的系统运行 oc-mirror 插件 v2。
3.3.1. 关于 oc-mirror 插件 v2 复制链接链接已复制到粘贴板!
oc-mirror OpenShift CLI (oc
) 插件是一个单一工具,可将所有所需的 OpenShift Container Platform 内容和其他镜像 (mirror)镜像到您的镜像 registry。
要使用 oc-mirror 的新版本,请在 oc-mirror 插件 v2 命令行中添加 --v2
标志。
oc-mirror 插件 v2 具有以下功能:
- 提供镜像 OpenShift Container Platform 发行版本、Operator、helm chart 和其他镜像的集中方法。
- 验证镜像设置配置中指定的完整镜像集是否已镜像到已镜像的 registry,无论镜像之前是否被镜像(mirror)。
- 使用缓存系统而不是元数据,这可以防止在过程中的一步中出现故障时启动镜像过程。
- 通过将新镜像合并到存档中来维护最小归档大小。
- 使用通过镜像日期选择的内容生成镜像存档。
-
可以生成
ImageDigestMirrorSet
(IDMS)和ImageTagMirrorSet
(ITMS)资源,这些资源覆盖了使用 v1 的每个镜像集合的镜像集,而不是ImageContentSourcePolicy
(ICSP)资源,它包括了对每个镜像操作设置的增量更改。 -
不执行自动修剪。v2 现在使用
Delete
功能,这可让用户更好地控制对镜像进行删除。 -
引入了对
registry.conf
文件的支持。此更改有助于在使用相同的缓存时镜像到多个 enclaves。
3.3.1.1. 高级别工作流 复制链接链接已复制到粘贴板!
以下步骤概述了如何使用 oc-mirror 插件 v2 将镜像 mirror 到 mirror registry 的高级别工作流:
- 创建镜像设置配置文件。
使用以下工作流之一将镜像设置为目标镜像 registry:
- 将镜像直接设置为目标镜像 registry (mirror 到 mirror)。
-
将镜像设置为 disk (mirror to disk),将
tar
文件传送到目标环境,然后将镜像设置为目标镜像 registry (disk to mirror)。
- 配置集群以使用 oc-mirror 插件 v2 生成的资源。
- 根据需要重复这些步骤以更新目标镜像 registry。
3.3.1.2. oc-mirror 插件 v2 兼容性和支持 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持 oc-mirror 插件 v2。
在 aarch64
,ppc64le
, 和 s390x
架构中,oc-mirror 插件 v2 只支持 OpenShift Container Platform 4.14 及更新的版本。
使用 oc-mirror 插件 v2 的最新可用版本,无论您需要镜像的 OpenShift Container Platform 版本是什么。
3.3.2. 先决条件 复制链接链接已复制到粘贴板!
您必须在托管 OpenShift Container Platform 集群的位置(如 Red Hat Quay)中有一个支持 Docker V2-2 的容器镜像 registry。
注意- 如果使用 Red Hat Quay,请在 oc-mirror 插件中使用 3.6 或更高版本。请参阅在 OpenShift Container Platform 上部署 Red Hat Quay Operator (Red Hat Quay 文档)。如果您需要额外的帮助来选择并安装 registry,请联络您的销售代表或红帽支持。
- 如果您没有容器镜像 registry 的现有解决方案,OpenShift Container Platform 订阅者会收到一个 mirror registry for Red Hat OpenShift。此镜像 registry 包含在您的订阅中,并充当小型容器 registry。您可以使用此 registry 为断开连接的安装镜像 OpenShift Container Platform 所需的容器镜像。
- 置备的集群中的每个机器都必须有权访问镜像 registry。如果 registry 无法访问,安装、更新或常规操作等任务(如工作负载重新定位)可能会失败。镜像 registry 必须以高可用性的方式运行,确保其可用性与 OpenShift Container Platform 集群的生产环境可用性一致。
3.3.3. 准备您的镜像主机 复制链接链接已复制到粘贴板!
要将 oc-mirror 插件 v2 用于镜像镜像,您需要安装插件并使用容器镜像凭证创建文件,使您能够从红帽镜像到您的镜像。
3.3.3.1. 安装 oc-mirror OpenShift CLI 插件 复制链接链接已复制到粘贴板!
安装 oc-mirror OpenShift CLI 插件以在断开连接的环境中管理镜像集。
先决条件
已安装 OpenShift CLI(
oc
)。如果您在完全断开连接的环境中镜像镜像集,请确保以下内容:- 您已在可访问互联网的主机上安装了 oc-mirror 插件。
- 在断开连接的环境中的主机可以访问目标镜像 registry。
-
您已在使用 oc-mirror 的操作系统中,将
umask
参数设置为0022
。 - 您已为您要使用的 RHEL 版本安装了正确的二进制文件。
流程
下载 oc-mirror CLI 插件:
- 进入到 Red Hat Hybrid Cloud Console 的 Downloads 页。
- 在 OpenShift disconnected installation tools 部分中,从下拉菜单中选择 OpenShift Client (oc) mirror plugin 的OS type 和 Architecture type。
- 点 Download 保存文件。
运行以下命令来提取存档:
tar xvzf oc-mirror.tar.gz
$ tar xvzf oc-mirror.tar.gz
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如有必要,运行以下命令来将插件文件更新为可执行:
chmod +x oc-mirror
$ chmod +x oc-mirror
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不要重命名
oc-mirror
文件。运行以下命令,将文件放在
PATH
中(如/usr/local/bin
)来安装 oc-mirror CLI 插件:sudo mv oc-mirror /usr/local/bin/.
$ sudo mv oc-mirror /usr/local/bin/.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证 oc-mirror 插件 v2 是否已成功安装:
oc mirror --v2 --help
$ oc mirror --v2 --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.3.2. 配置允许对容器镜像进行镜像的凭证 复制链接链接已复制到粘贴板!
创建容器镜像 registry 凭证文件,可让您将镜像从红帽 mirror 到您的镜像。
安装集群时不要使用此镜像 registry 凭据文件作为 pull secret。如果在安装集群时提供此文件,集群中的所有机器都将具有镜像 registry 的写入权限。
先决条件
- 您已将镜像 registry 配置为在断开连接的环境中使用。
- 您在镜像 registry 中标识了镜像仓库的位置,以将容器镜像镜像(mirror)到这个位置。
- 您置备了一个镜像 registry 帐户,允许将镜像上传到该镜像仓库。
- 对镜像 registry 有写权限。
流程
在安装主机上完成以下步骤:
-
从 Red Hat OpenShift Cluster Manager 下载
registry.redhat.io
pull secret。 运行以下命令,以 JSON 格式生成 pull secret 副本:
cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json>
$ cat ./pull-secret | jq . > <path>/<pull_secret_file_in_json>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定到存储 pull secret 的文件夹的路径,以及您创建的 JSON 文件的名称。
pull secret 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
$XDG_RUNTIME_DIR/containers
目录不存在,请输入以下命令来创建:mkdir -p $XDG_RUNTIME_DIR/containers
$ mkdir -p $XDG_RUNTIME_DIR/containers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 pull secret 文件保存为
$XDG_RUNTIME_DIR/containers/auth.json
。 运行以下命令,为您的镜像 registry 生成 base64 编码的用户名和密码或令牌:
echo -n '<user_name>:<password>' | base64 -w0
$ echo -n '<user_name>:<password>' | base64 -w0
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 通过
<user_name>
和<password>
指定 registry 的用户名和密码。
输出示例
BGVtbYk3ZHAtqXs=
BGVtbYk3ZHAtqXs=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 JSON 文件并添加描述 registry 的部分:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改的 pull secret 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.4. 将镜像集镜像(mirror)到镜像 registry 复制链接链接已复制到粘贴板!
将镜像集镜像到镜像 registry 可确保所需的镜像在安全且受控的环境中可用,从而促进平稳部署、更新和维护任务。
3.3.4.1. 创建镜像设置配置 复制链接链接已复制到粘贴板!
在使用 oc-mirror 插件 v2 mirror 镜像之前,必须先创建镜像设置配置文件。此镜像设置配置文件定义哪些 OpenShift Container Platform 发行版本、Operator 和其他要 mirror 的镜像,以及 oc-mirror 插件 v2 的其他配置设置。
先决条件
- 您已创建了容器镜像 registry 凭证文件。具体步骤,请参阅配置允许镜像镜像的凭证。
流程
创建
ImageSetConfiguration
YAML 文件,并进行修改使其包含所需的镜像。ImageSetConfiguration
YAML 文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将频道设置为从中检索 OpenShift Container Platform 镜像。
- 2
- 添加
graph: true
以构建并推送 graph-data 镜像推送到镜像 registry。创建 OpenShift Update Service (OSUS) 需要 graph-data 镜像。graph: true
字段还会生成UpdateService
自定义资源清单。oc
命令行界面 (CLI) 可以使用UpdateService
自定义资源清单来创建 OSUS。如需更多信息,请参阅关于 OpenShift Update Service。 - 3
- 将 Operator 目录设置为从中检索 OpenShift Container Platform 镜像。
- 4
- 仅指定要包含在镜像集中的某些 Operator 软件包。删除此字段以检索目录中的所有软件包。
- 5
- 指定要在镜像集中包含的任何其他镜像。
3.3.4.2. 在部分断开连接的环境中镜像设置的镜像 复制链接链接已复制到粘贴板!
您可以在带有受限互联网访问的环境中使用 oc-mirror 插件 v2 将镜像集镜像到 registry。
先决条件
- 在运行 oc-mirror 插件 v2 的环境中,您可以访问互联网和镜像 registry。
流程
运行以下命令,将指定镜像设置配置中的镜像镜像到指定的 registry:
oc mirror -c <image_set_configuration> --workspace file://<file_path> docker://<mirror_registry_url> --v2
$ oc mirror -c <image_set_configuration> --workspace file://<file_path> docker://<mirror_registry_url> --v2
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <image_set_configuration>
- 指定镜像设置配置文件的名称。
- <file_path>
- 指定生成集群资源的目录。
- <mirror_registry_url>
- 指定镜像存储并从中删除镜像 registry 的 URL 或地址。
验证
-
进入
<file_path>
目录中生成的working-dir/cluster-resources
目录。 -
验证
ImageDigestMirrorSet
、ImageTagMirrorSet
和CatalogSource
资源是否存在 YAML 文件。
后续步骤
- 配置集群以使用 oc-mirror 插件 v2 生成的资源。
3.3.4.3. 镜像在完全断开连接的环境中设置的镜像 复制链接链接已复制到粘贴板!
您可以在 OpenShift Container Platform 集群无法访问互联网的完全断开连接的环境中镜像镜像集。以下高级别工作流描述了镜像过程:
- Mirror to disk :将镜像集 mirror 到一个存档。
- Disk transfer :手动将存档传输到断开连接的镜像 registry 的网络。
- Disk to mirror: 将存档中的镜像集 mirror 到目标断开连接的 registry。
3.3.4.3.1. 从镜像镜像到磁盘 复制链接链接已复制到粘贴板!
您可以使用 oc-mirror 插件 v2 生成镜像集,并将内容保存到磁盘。之后,您可以将生成的镜像设置为断开连接的环境,并将其镜像到目标 registry。
oc-mirror 插件 v2 从镜像设置配置中指定的源中检索容器镜像,并将它们打包到本地目录中的 tar 存档中。
流程
运行以下命令,将指定镜像集配置中的镜像镜像到磁盘:
oc mirror -c <image_set_configuration> file://<file_path> --v2
$ oc mirror -c <image_set_configuration> file://<file_path> --v2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <image_set_configuration>
- 指定镜像设置配置文件的名称。
- <file_path>
- 指定在其中生成包含镜像集的存档的目录。
验证
-
进入生成的
<file_path>
目录。 - 验证存档文件是否已生成。
后续步骤
- 从磁盘镜像到镜像
3.3.4.3.2. 从磁盘镜像到镜像 复制链接链接已复制到粘贴板!
您可以使用 oc-mirror 插件 v2 将磁盘中的镜像集镜像到目标镜像 registry。
oc-mirror 插件 v2 从本地磁盘检索容器镜像并将其传送到指定的镜像 registry。
流程
- 将包含 mirror 镜像集的磁盘传输到包含目标镜像 registry 的环境。
运行以下命令,处理磁盘上的镜像集文件,并将内容镜像到目标镜像 registry:
oc mirror -c <image_set_configuration> --from file://<file_path> docker://<mirror_registry_url> --v2
$ oc mirror -c <image_set_configuration> --from file://<file_path> docker://<mirror_registry_url> --v2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <image_set_configuration>
- 指定镜像设置配置文件的名称。
- <file_path>
- 指定包含存档的磁盘上的目录。此文件夹还包含您为集群生成的集群资源,如 ImageDigestMirrorSet (IDMS) 或 ImageTagMirrorSet (ITMS) 资源。
- <mirror_registry_url>
- 指定用于存储镜像的 mirror registry 的 URL 或地址。
验证
-
进入到
working-dir
中的cluster-resources
目录,它在<file_path>
目录中生成。 -
验证
ImageDigestMirrorSet
、ImageTagMirrorSet
和CatalogSource
资源是否存在 YAML 文件。
后续步骤
- 配置集群以使用 oc-mirror 插件 v2 生成的资源。
3.3.5. 关于 oc-mirror 插件 v2 生成的自定义资源 复制链接链接已复制到粘贴板!
oc-mirror 插件 v2 会自动生成以下自定义资源:
ImageDigestMirrorSet
(IDMS)- 在使用镜像摘要拉取规格时处理 registry 镜像规则。如果至少一个镜像集的镜像由摘要镜像,则会生成。
ImageTagMirrorSet
(ITMS)- 在使用镜像标签 pull 规格时处理 registry 镜像规则。如果至少通过标签对镜像集中的一个镜像进行镜像生成。
CatalogSource
- 检索有关镜像 registry 中可用 Operator 的信息。由 Operator Lifecycle Manager (OLM) Classic 使用。
ClusterCatalog
- 检索有关镜像 registry 中可用集群扩展(包括 Operator)的信息。由 OLM v1 使用。
UpdateService
- 为断开连接的环境提供更新图形数据。由 OpenShift Update Service 使用。
3.3.5.1. 修改由 oc-mirror 插件生成的资源的限制 复制链接链接已复制到粘贴板!
当使用 oc-mirror 插件 v2 生成的资源来配置集群时,某些字段不能更改。修改这些字段可能会导致错误且不被支持。
下表列出了必须保持不变的资源及其字段:
资源 | 不能更改的字段 |
---|---|
|
|
|
|
|
|
|
|
签名 |
|
|
|
有关这些资源的更多信息,请参阅 CatalogSource
、ImageDigestMirrorSet
和 ImageTagMirrorSet
的 OpenShift API 文档。
3.3.5.2. 配置集群以使用 oc-mirror 插件 v2 生成的资源 复制链接链接已复制到粘贴板!
在将您的镜像集 mirror 到镜像 registry 后,您必须将生成的 ImageDigestMirrorSet
(IDMS)、ImageTagMirrorSet
(ITMS)、CatalogSource
和 UpdateService
资源应用到集群。
在 oc-mirror 插件 v2 中,IDMS 和 ITMS 文件涵盖了整个镜像集,这与 oc-mirror 插件 v1 中的 ImageContentSourcePolicy
(ICSP)文件不同。因此,即使您仅在增量镜像过程中添加新镜像,IDMS 和 ITMS 文件还包含集合的所有镜像。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
-
以具有
cluster-admin
角色的用户身份登录 OpenShift CLI。 运行以下命令,将结果目录中的 YAML 文件应用到集群:
oc apply -f <path_to_oc_mirror_workspace>/working-dir/cluster-resources
$ oc apply -f <path_to_oc_mirror_workspace>/working-dir/cluster-resources
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果镜像(mirror)镜像,请运行以下命令将发行版本镜像签名应用到集群:
oc apply -f working-dir/cluster-resources/signature-configmap.json
$ oc apply -f working-dir/cluster-resources/signature-configmap.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您要镜像 Operator 而不是集群,请不要运行前面的命令。运行命令会导致错误,因为没有要应用的发行镜像签名。
另外,在相同的目录
working-dir/cluster-resources/
中提供了 YAML 文件。您可以使用 JSON 或 YAML 格式。
验证
运行以下命令验证
ImageDigestMirrorSet
资源是否已成功安装:oc get imagedigestmirrorset
$ oc get imagedigestmirrorset
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要只查看
oc-mirror
创建的资源,请运行以下命令:oc get imagedigestmirrorset -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
$ oc get imagedigestmirrorset -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
ImageTagMirrorSet
资源是否已成功安装:oc get imagetagmirrorset
$ oc get imagetagmirrorset
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要只查看
oc-mirror
创建的资源,请运行以下命令:oc get imagetagmirrorset -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
$ oc get imagetagmirrorset -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
CatalogSource
资源是否已成功安装:oc get catalogsource -n openshift-marketplace
$ oc get catalogsource -n openshift-marketplace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要只查看
oc-mirror
创建的资源,请运行以下命令:oc get catalogsource -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
$ oc get catalogsource -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
ClusterCatalog
资源是否已成功安装:oc get clustercatalog
$ oc get clustercatalog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要只查看
oc-mirror
创建的资源,请运行以下命令:oc get clustercatalog -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
$ oc get clustercatalog -o jsonpath='{.items[?(@.metadata.annotations.createdBy=="oc-mirror v2")].metadata.name}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在将集群配置为使用 oc-mirror 插件 v2 生成的资源后,请参阅下一步以了解有关您可以使用 mirror 镜像执行的任务的信息。
3.3.6. 在断开连接的环境中删除镜像 复制链接链接已复制到粘贴板!
如果您之前使用 oc-mirror 插件 v2 部署镜像,您可以删除这些镜像来释放镜像 registry 中的空间。oc-mirror 插件 v2 不会自动修剪没有包括在 ImageSetConfiguration
文件中的镜像。这可防止在对 ImageSetConfig.yaml
文件进行更改时意外删除必要的或部署的镜像。
您必须创建一个 DeleteImageSetConfiguration
文件,以指定要删除的镜像。
在以下示例中,DeleteImageSetConfiguration
文件会删除以下镜像:
- OpenShift Container Platform 4.13.3 的所有发行镜像。
-
aws-load-balancer-operator
v0.0.1 捆绑包及其所有相关镜像。 -
ubi
和ubi-minimal
的额外镜像,通过它们对应的摘要引用。
DeleteImageSetConfiguration
文件示例
考虑使用 mirror-to-disk 和 disk-to-mirror 工作流来减少删除问题。
oc-mirror 插件 v2 只删除镜像的清单,这不会减少 registry 中占用的存储。
要从不必要的镜像(如带有删除的清单)中释放存储空间,您必须在容器 registry 上启用垃圾收集器。启用垃圾收集器后,registry 将删除不再引用任何清单的镜像 Blob,从而减少之前由已删除 Blob 占用的存储。启用垃圾收集器的过程因容器 registry 而异。
如需更多信息,请参阅"在分发 registry 中解决存储清理问题"。
要在删除 Operator 镜像时跳过删除 Operator 目录镜像,您必须在
DeleteImageSetConfiguration
文件中列出 Operator 目录镜像下的特定 Operator。这样可确保只有指定的 Operator 被删除,而不是目录镜像。如果只指定 Operator 目录镜像,则该目录中的所有 Operator 以及目录镜像本身都将被删除。
oc-mirror 插件 v2 不会自动删除 Operator 目录镜像,因为其他 Operator 可能仍然被部署并依赖于这些镜像。
如果您不确定目录中的 Operator 没有保留在 registry 或集群中,您可以在
DeleteImageSetConfiguration
中明确将目录镜像添加到additionalImages
中以移除它。- 垃圾回收行为取决于 registry。有些 registry 不会自动删除已删除的镜像,需要系统管理员手动触发垃圾回收来释放空间。
3.3.6.1. 解决分发 registry 中的存储清理问题 复制链接链接已复制到粘贴板!
分发 registry 中的一个已知问题会阻止垃圾收集器按预期释放存储。使用 Red Hat Quay 时不会出现这个问题。
流程
选择发行 registry 中已知问题的适当方法:
要重启容器 registry,请运行以下命令:
podman restart <registry_container>
$ podman restart <registry_container>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在 registry 配置中禁用缓存,请执行以下步骤:
要禁用
blobdescriptor
缓存,请修改/etc/docker/registry/config.yml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要应用这些更改,请运行以下命令重启容器 registry:
podman restart <registry_container>
$ podman restart <registry_container>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.6.2. 从断开连接的环境中删除镜像 复制链接链接已复制到粘贴板!
要使用 oc-mirror 插件 v2 从断开连接的环境中删除镜像,请按照以下步骤操作。
先决条件
- 您已在环境中启用了垃圾回收,以删除不再引用清单的镜像。
流程
创建一个
delete-image-set-config.yaml
文件,并包含以下内容:DeleteImageSetConfiguration
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 1
- 指定要删除的 OpenShift Container Platform 频道的名称,如
stable-4.15
。 - 2 3
- 指定要在频道中删除的镜像版本范围,例如,
4.15.0
为最小版本,4.15.1
为最大版本。要只删除一个版本的镜像,在minVersion
和maxVersion
字段中都使用要删除的版本号。 - 4
- 指定包含要删除的 Operator 的 Operator 目录镜像,如
registry.redhat.io/redhat/redhat-operator-index:v4.14
。Operator 目录镜像不会被删除。对于集群中剩余的其他 Operator,可能需要在 registry 中存在。 - 5
- 指定要删除的特定 Operator,如
aws-load-balancer-operator
。 - 6 7
- 指定为 Operator 删除的镜像版本范围,如最小版本为
0.0.1
,最大版本为0.0.2
。
运行以下命令,创建一个
delete-images.yaml
文件:oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>
$ oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <previously_mirrored_work_folder>
- 指定镜像以前被 mirror 到的或在 mirror 过程中存储镜像的目录。
- <remote_registry>
指定将从中删除镜像的远程容器 registry 的 URL 或地址。
重要在删除镜像时,指定正确的工作区目录。仅在从头开始镜像时修改或删除缓存目录,如设置一个新集群。如果对缓存目录的更改不正确,可能会破坏进一步的镜像操作。
-
进入创建的
<previously_mirrored_work_folder>/delete
目录。 -
验证
delete-images.yaml
文件是否已生成。 - 手工确保文件中列出的每个镜像不再被集群需要,可以安全地从 registry 中删除。
生成
delete-images
YAML 文件后,运行以下命令来从远程 registry 中删除镜像:oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/working-dir/delete/delete-images.yaml docker://<remote_registry>
$ oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/working-dir/delete/delete-images.yaml docker://<remote_registry>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <previously_mirrored_work_folder>
- 指定镜像以前被 mirror 到的或在 mirror 过程中存储镜像的目录。
- <remote_registry>
指定将从中删除镜像的远程容器 registry 的 URL 或地址。
重要当使用 mirror-to-mirror 方法 mirror 镜像时,镜像不会在本地缓存,因此您无法从本地缓存中删除镜像。
3.3.7. 验证您选择的镜像以进行镜像 复制链接链接已复制到粘贴板!
您可以使用 oc-mirror 插件 v2 执行不实际镜像任何镜像的测试运行(dry run)。这可让您查看要镜像的镜像列表。您也可以在早期使用空运行来捕获与镜像设置配置的任何错误。在镜像到磁盘工作流上运行空运行时,oc-mirror 插件 v2 会检查镜像集中的所有镜像是否在其缓存中可用。missing.txt
文件中列出了任何缺少的镜像。在镜像前执行空运行时,missing.txt
和 mapping.txt
文件都包含相同的镜像列表。
3.3.7.1. 为 oc-mirror 插件 v2 执行空运行 复制链接链接已复制到粘贴板!
通过在不镜像的情况下执行空运行来验证您的镜像设置。这样可确保您的设置正确,并防止意外更改。
流程
要执行测试运行,请运行
oc mirror
命令,并在命令中使用--dry-run
参数:oc mirror -c <image_set_config_yaml> file://<oc_mirror_workspace_path> --dry-run --v2
$ oc mirror -c <image_set_config_yaml> file://<oc_mirror_workspace_path> --dry-run --v2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<image_set_config_yaml>
- 指定您创建的镜像设置配置文件。
<oc_mirror_workspace_path>
- 插入工作区路径的地址。
<mirror_registry_url>
插入要从中镜像或删除的远程容器 registry 的 URL 或地址。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
进入生成的工作区目录:
cd <oc_mirror_workspace_path>
$ cd <oc_mirror_workspace_path>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查生成的
mapping.txt
和missing.txt
文件。这些文件包含将要镜像的所有镜像的列表。
3.3.7.2. oc-mirror 插件 v2 错误故障排除 复制链接链接已复制到粘贴板!
oc-mirror 插件 v2 现在会在单独的文件中记录所有镜像同步错误,从而更轻松地跟踪和诊断失败。
如果镜像(mirror)发行版本或发行组件镜像时出现错误,它们至关重要。这会立即停止镜像(mirror)过程。
镜像 (mirror) Operator、与 Operator 相关的镜像或其他镜像的错误不会停止镜像(mirror)过程。镜像过程会继续,oc-mirror 插件 v2 会在 working-dir/logs
目录下保存一个文件,描述哪些 Operator 无法镜像(mirror)。
当一个镜像无法被镜像(mirror)时,该镜像会作为一个或多个 Operator 捆绑包的一部分被镜像(mirror),oc-mirror 插件 v2 会通知用户 Operator 不完整,从而明确提供受错误影响的 Operator 捆绑包的信息。
流程
检查与服务器相关的问题:
错误示例
[ERROR] : [Worker] error mirroring image localhost:55000/openshift/graph-image:latest error: copying image 1/4 from manifest list: trying to reuse blob sha256:edab65b863aead24e3ed77cea194b6562143049a9307cd48f86b542db9eecb6e at destination: pinging container registry localhost:5000: Get "https://localhost:5000/v2/": http: server gave HTTP response to HTTPS client
[ERROR] : [Worker] error mirroring image localhost:55000/openshift/graph-image:latest error: copying image 1/4 from manifest list: trying to reuse blob sha256:edab65b863aead24e3ed77cea194b6562143049a9307cd48f86b542db9eecb6e at destination: pinging container registry localhost:5000: Get "https://localhost:5000/v2/": http: server gave HTTP response to HTTPS client
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 oc-mirror 插件 v2 输出目录中,打开
working-dir/logs
文件夹中的mirroring_error_date_time.log
文件。 -
查找表示服务器端问题的错误消息,如
HTTP 500
错误、令牌过期或超时。 - 如果问题仍然存在,请重试镜像过程或联系技术支持。
-
在 oc-mirror 插件 v2 输出目录中,打开
检查对 Operator 进行镜像的过程不完整:
错误示例
error mirroring image docker://registry.redhat.io/3scale-amp2/zync-rhel9@sha256:8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d (Operator bundles: [3scale-operator.v0.11.12] - Operators: [3scale-operator]) error: initializing source docker://localhost:55000/3scale-amp2/zync-rhel9:8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d: reading manifest 8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d in localhost:55000/3scale-amp2/zync-rhel9: manifest unknown error mirroring image docker://registry.redhat.io/3scale-amp2/3scale-rhel7-operator-metadata@sha256:de0a70d1263a6a596d28bf376158056631afd0b6159865008a7263a8e9bf0c7d error: skipping operator bundle docker://registry.redhat.io/3scale-amp2/3scale-rhel7-operator-metadata@sha256:de0a70d1263a6a596d28bf376158056631afd0b6159865008a7263a8e9bf0c7d because one of its related images failed to mirror error mirroring image docker://registry.redhat.io/3scale-amp2/system-rhel7@sha256:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e (Operator bundles: [3scale-operator.v0.11.12] - Operators: [3scale-operator]) error: initializing source docker://localhost:55000/3scale-amp2/system-rhel7:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e: reading manifest fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e in localhost:55000/3scale-amp2/system-rhel7: manifest unknown
error mirroring image docker://registry.redhat.io/3scale-amp2/zync-rhel9@sha256:8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d (Operator bundles: [3scale-operator.v0.11.12] - Operators: [3scale-operator]) error: initializing source docker://localhost:55000/3scale-amp2/zync-rhel9:8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d: reading manifest 8bb6b31e108d67476cc62622f20ff8db34efae5d58014de9502336fcc479d86d in localhost:55000/3scale-amp2/zync-rhel9: manifest unknown error mirroring image docker://registry.redhat.io/3scale-amp2/3scale-rhel7-operator-metadata@sha256:de0a70d1263a6a596d28bf376158056631afd0b6159865008a7263a8e9bf0c7d error: skipping operator bundle docker://registry.redhat.io/3scale-amp2/3scale-rhel7-operator-metadata@sha256:de0a70d1263a6a596d28bf376158056631afd0b6159865008a7263a8e9bf0c7d because one of its related images failed to mirror error mirroring image docker://registry.redhat.io/3scale-amp2/system-rhel7@sha256:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e (Operator bundles: [3scale-operator.v0.11.12] - Operators: [3scale-operator]) error: initializing source docker://localhost:55000/3scale-amp2/system-rhel7:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e: reading manifest fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e in localhost:55000/3scale-amp2/system-rhel7: manifest unknown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在控制台或日志文件中检查相关的警告,以了解哪些 Operator 不完整。
如果一个 Operator 被标记为不完整,与该 Operator 相关的镜像可能会无法镜像 (mirror)。
- 手动镜像(mirror)缺少的镜像或重试镜像 (mirror) 的过程。
检查与生成的集群资源相关的错误。即使无法镜像(mirror)某些镜像,oc-mirror v2 仍会为已成功镜像(mirror)的镜像生成集群资源,如
IDMS.yaml
和ITMS.yaml
文件。- 在输出目录中检查生成的文件。
- 如果特定镜像缺少了这些文件,请确保在镜像(mirror)过程中没有发生关键错误。
按照以下步骤,您可以更好地诊断问题并确保更顺畅地进行镜像。
3.3.8. enclave 支持的好处 复制链接链接已复制到粘贴板!
enclave 支持限制内部访问网络的特定部分。与一个 demilitarized zone (DMZ)网络不同,它允许通过防火墙界限和出站流量访问,enclaves 不跨防火墙界限。
新的 enclave 支持功能适用于在至少一个中间断开连接的网络中保护的多个 enclave 时需要镜像(mirror)。
enclave 支持有以下优点:
- 您可以镜像多个 enclaves 的内容,并将其集中到一个内部 registry 中。因为有些客户希望在镜像的内容上运行安全检查,所以此设置他们可以一次性运行这些检查。然后,在镜像到下游 enclaves 之前,内容会被检查。
- 您可以直接从集中式内部 registry 中镜像内容,而无需为每个 enclave 重启镜像过程。
- 您可以最小化网络阶段的数据传输,以确保 Blob 或镜像仅从一个阶段传输到另一个阶段。
3.3.8.1. enclave 镜像工作流 复制链接链接已复制到粘贴板!
上一个镜像概述了在不同环境中使用 oc-mirror 插件的流程,包括在有互联网连接和没有互联网连接的环境中进行。
带有互联网连接的环境 :
- 用户执行 oc-mirror 插件 v2,将在线 registry 的内容镜像到本地磁盘目录。
- 镜像内容保存到磁盘中,用于在离线环境中使用。
断开连接的企业环境(没有互联网 ):
流 1:
-
用户运行 oc-mirror 插件 v2,从磁盘目录中加载镜像的内容(来自在线的环境)加载到
enterprise-registry.in
registry。
-
用户运行 oc-mirror 插件 v2,从磁盘目录中加载镜像的内容(来自在线的环境)加载到
流 2:
-
更新
registry.conf
文件后,用户执行 oc-mirror 插件 v2 以将来自enterprise-registry.in
registry 的内容镜像到 enclave 环境中。 - 内容被保存到一个磁盘目录,用于转移到 enclave。
-
更新
Enclave 环境 (没有互联网):
-
用户运行 oc-mirror 插件 v2,将目录从磁盘目录加载到
enclave-registry.in
registry 中。
图显示了跨这些环境的数据流,侧重于使用 oc-mirror 来处理断开连接的环境和没有互联网连接的环境。
3.3.8.2. 镜像到 enclave 复制链接链接已复制到粘贴板!
当镜像到 enclave 时,您必须首先将必要的镜像从一个或多个 enclaves 传送到企业中央 registry 中。
中央 registry 位于安全网络中,特别是断开连接的环境,且不会直接链接到公共互联网。但是,用户必须在一个可访问公共互联网的环境中执行 oc mirror
。
流程
在断开连接的环境中运行 oc-mirror 插件 v2 之前,请创建一个
registry.conf
文件。该文件的 TOML 格式如下所述:注意建议将文件存储在
$HOME/.config/containers/registries.conf
或/etc/containers/registries.conf
下。registry.conf
示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成镜像存档。
要将所有 OpenShift Container Platform 内容收集到磁盘的一个归档中(
<file_path>/enterprise-content
),请运行以下命令:oc mirror --v2 -c isc.yaml file://<file_path>/enterprise-content
$ oc mirror --v2 -c isc.yaml file://<file_path>/enterprise-content
Copy to Clipboard Copied! Toggle word wrap Toggle overflow isc.yaml 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成存档后,它将传送到断开连接的环境中。传输机制不是 oc-mirror 插件 v2 的一部分。企业网络管理员需要负责制定传输策略。
在某些情况下,传输是手动完成的,例如在一个没有网络连接的环境中,将磁盘从一个物理机器中拔出,并插入到另外一个系统。在其他情况下,使用安全文件传输协议 (SFTP) 或其他协议。
完成存档传输后,您可以再次执行 oc-mirror 插件 v2,以便将相关存档内容镜像到 registry (在示例中是
entrerpise_registry.in
),如下例所示:oc mirror --v2 -c isc.yaml --from file://<disconnected_environment_file_path>/enterprise-content docker://<enterprise_registry.in>/
$ oc mirror --v2 -c isc.yaml --from file://<disconnected_environment_file_path>/enterprise-content docker://<enterprise_registry.in>/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
--from
指向包含存档的文件夹。它以file://
开头。 -
docker://
是镜像 (mirror) 的目的地,这是最后的参数。因为它是一个 docker registry。 -
-c
(--config
)是一个强制参数。它可让 oc-mirror 插件 v2 最终仅将存档的子部分镜像到 registry。一个存档可能包含几个 OpenShift Container Platform 版本,但断开连接的环境或 enclave 可能只镜像几个。
-
准备
imageSetConfig
YAML 文件,该文件描述了要镜像到 enclave 的内容:示例 isc-enclave.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须在可访问断开连接的 registry 的机器上运行 oc-mirror 插件 v2。在上例中,可以访问断开连接的环境
enterprise-registry.in
。更新图形 URL
如果您使用
graph:true
,oc-mirror 插件 v2 会尝试访问cincinnati
API 端点。由于此环境断开连接,因此请务必导出环境变量UPDATE_URL_OVERRIDE
,以引用 OpenShift Update Service (OSUS)的 URL:export UPDATE_URL_OVERRIDE=https://<osus.enterprise.in>/graph
$ export UPDATE_URL_OVERRIDE=https://<osus.enterprise.in>/graph
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关在 OpenShift 集群上设置 OSUS 的更多信息,请参阅"使用 OpenShift Update Service 在断开连接的环境中更新集群"。
注意当在 OpenShift Container Platform 延长更新支持 (EUS) 版本间进行更新时,还需要包括在当前版本和目标版本间的中间次版本的镜像。oc-mirror 插件 v2 可能并不总是自动检测此要求,因此请检查 Red Hat OpenShift Container Platform Update Graph 页以确认包括了所需的中间版本。
使用 Update Graph 页查找应用程序推荐的中间次版本,在使用 oc-mirror 插件 v2 时,在
ImageSetConfiguration
文件中包括这些版本。为 enclave 从企业 registry 中生成镜像存档。
要为
enclave1
准备存档,用户使用针对那个 enclave 专用的imageSetConfiguration
在企业断开连接的环境中执行 oc-mirror 插件 v2。这样可确保仅镜像 enclave 需要的镜像:oc mirror --v2 -c isc-enclave.yaml
$ oc mirror --v2 -c isc-enclave.yaml file:///disk-enc1/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此操作将所有 OpenShift Container Platform 内容收集到存档中,并在磁盘上生成存档。
-
生成存档后,它将传送到
enclave1
网络。传输机制不是 oc-mirror 插件 v2 的责任。 将内容镜像到 enclave registry
完成存档传输后,用户可以再次执行 oc-mirror 插件 v2,以便将相关存档内容镜像到 registry。
oc mirror --v2 -c isc-enclave.yaml --from file://local-disk docker://registry.enc1.in
$ oc mirror --v2 -c isc-enclave.yaml --from file://local-disk docker://registry.enc1.in
Copy to Clipboard Copied! Toggle word wrap Toggle overflow enclave1
中的 OpenShift Container Platform 集群的管理员现在可以安装或升级该集群。
3.3.9. oc-mirror 插件 v2 支持代理设置 复制链接链接已复制到粘贴板!
oc-mirror 插件 v2 可以在代理配置的环境中运行。该插件可以使用系统代理设置来检索 OpenShift Container Platform、Operator 目录和 additionalImages
registry 的镜像。
3.3.10. 在 oc-mirror 插件 v2 中镜像和验证镜像签名 复制链接链接已复制到粘贴板!
从 OpenShift Container Platform 4.19 开始,oc-mirror 插件 v2 支持镜像和验证容器镜像的基于 cosign 标签的签名。
3.3.10.1. 为 oc-mirror 插件 v2 启用签名镜像 复制链接链接已复制到粘贴板!
默认情况下禁用签名镜像。您可以通过为 oc mirror
命令设置 --remove-signatures=false
标志来为所有镜像启用签名镜像。
启用后,oc-mirror 插件 v2 为以下镜像镜像基于 Sigstore
标签的签名:
- OpenShift Container Platform 发行镜像
- Operator 镜像
- 其他镜像
- Helm chart
如果没有提供配置文件,oc-mirror 插件 v2 会在使用 --remove-signatures=false
标志时默认启用所有镜像的签名镜像。
要指定自定义配置目录,请使用 --registries.d
标志。
如需了解更多详细信息,请参阅 containers-registries.d (5)
manual。
流程
如果要为所有镜像启用签名镜像,请运行以下命令:
oc mirror --remove-signatures=false
$ oc mirror --remove-signatures=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要为特定元素(如传输协议、registry、命名空间或镜像)启用或禁用签名镜像,请使用以下步骤:
-
在
$HOME/.config/containers/registries.d/
或/etc/containers/registries.d/
目录中创建 YAML 文件。 指定
use-sigstore-attachments
参数,并在您要控制的特定元素下将其设置为true
或false
,如下例所示:示例:禁用
quay.io
registry 的签名镜像# ... docker: quay.io: use-sigstore-attachments: false # ...
# ... docker: quay.io: use-sigstore-attachments: false # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例:为所有 registry 启用签名镜像
# ... default-docker: use-sigstore-attachments: true # ...
# ... default-docker: use-sigstore-attachments: true # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在
3.3.10.2. 为 oc-mirror 插件 v2 启用签名验证 复制链接链接已复制到粘贴板!
从 OpenShift Container Platform 4.19 开始,oc-mirror 插件 v2 支持签名验证,这默认禁用。启用后,插件会验证容器镜像是否与其签名匹配,确保它们没有被更改,并来自可信源。如果检测到签名不匹配,镜像工作流将失败。
流程
如果要为所有镜像启用签名验证,请运行以下命令:
oc mirror --secure-policy=true
$ oc mirror --secure-policy=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要为特定元素(如传输协议、registry、命名空间或镜像)启用或禁用签名验证,请按照以下步骤操作:
在
$HOME/.config/containers/
或/etc/containers/ 目录中创建
policy.json
文件。注意如果您的策略配置文件位于默认目录之外,您可以在
oc mirror
命令中使用--policy
标志来指定其路径。如需更多信息,请参阅
containers-policy.json (5)
。使用适当的策略配置,为所需的范围(如 registry 或镜像)定义验证规则。您可以通过在每个元素中指定所需规则来设置验证要求。
示例:仅为特定镜像启用验证,并拒绝所有其他镜像
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.11. 过滤在 Operator 目录中如何工作 复制链接链接已复制到粘贴板!
oc-mirror 插件 v2 通过处理 imageSetConfig
中的信息来选择用于镜像的捆绑包列表。
当 oc-mirror 插件 v2 选择用于镜像的捆绑包时,它不会推断 Group Version Kind (GVK) 或捆绑包依赖项,从镜像集中省略它们。相反,它严格遵循用户指令。您必须明确指定任何所需的依赖软件包及其版本。
ImageSetConfig operator 过滤 | 预期的捆绑包版本 |
---|---|
场景 1 mirror: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10
| 对于目录中每个软件包,一个捆绑包,对应于该软件包的每个频道的头版本。 |
场景 2 mirror: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10 full: true
| 指定目录的所有频道的所有捆绑包。 |
场景 3 mirror: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.10 packages: - name: compliance-operator
| 一个捆绑包,对应于该软件包的每个频道的头(head)版本。 |
场景 4 | 指定软件包的所有频道捆绑包。 |
场景 5 |
所有频道中的所有捆绑包(从 |
场景 6 |
所有频道中的所有捆绑包都低于该软件包的 |
场景 7 |
所有频道中的所有捆绑包,在那个软件包的 |
场景 8 |
该软件包所选频道的头捆绑包。如果过滤的频道不是默认频道,则必须使用 |
场景 9 |
指定的软件包和频道的所有捆绑包。如果过滤的频道不是默认频道,则应使用 |
场景 10 | 该软件包每个所选频道的头捆绑包。 |
场景 11 |
在该软件包所选频道中,所有版本都以 |
场景 12 |
在该软件包所选频道中,所有版本都最高为 |
场景 13 |
在该软件包的所选频道中, |
场景 14 |
不要使用这个场景。通过频道过滤,以及不允许带有 |
场景 15 |
请勿使用此场景。您不能使用 |
场景 16 |
请勿使用此场景。您不能使用 |
3.3.12. oc-mirror 插件 v2 的 imageset 配置参数 复制链接链接已复制到粘贴板!
oc-mirror 插件 v2 需要一个镜像设置配置文件,该文件定义哪些镜像要镜像(mirror)。下表列出了 ImageSetConfiguration
资源的可用参数。
使用 minVersion
和 maxVersion
属性过滤特定 Operator 版本范围可能会导致多个频道头错误。错误信息将显示有多个频道头
。这是因为在应用过滤器时,Operator 的更新图会被截断。
OLM 要求每个 Operator 频道都包含组成一个更新图表的版本,它只有一个端点,即 Operator 的最新版本。在应用图形的过滤器范围时,可以进入两个或多个独立图形或具有多个端点的图形。
要避免这个错误,请不要过滤 Operator 的最新版本。如果您仍然遇到错误,具体取决于 Operator,则必须增加 maxVersion
属性,或者 minVersion
属性必须减少。因为每个 Operator 图都可以不同,所以您可能需要调整这些值,直到错误解决为止。
参数 | 描述 | 值 |
---|---|---|
|
|
字符串示例: |
| 镜像集中的每个存档文件的最大大小(以 GiB 为单位)。 |
整数示例: |
|
当设置为 |
|
| 镜像集的配置。 | 对象 |
| 镜像集的额外镜像配置。 | 对象数组 Example: additionalImages: - name: registry.redhat.io/ubi8/ubi:latest
|
| 要 mirror 的镜像的标签或摘要。 |
字符串示例: |
| 用于阻止镜像(tag)或摘要(SHA)的镜像列表。 |
字符串数组示例: |
|
镜像集的 helm 配置。oc-mirror 插件不支持使用手动修改的 | 对象 |
| 要镜像的本地 helm chart。 | 对象数组。例如: local: - name: podinfo path: /test/podinfo-5.0.0.tar.gz
|
| 要镜像的本地 helm chart 的名称。 |
字符串.例如: |
| 到镜像的本地 helm chart 的路径。 |
字符串.例如: |
| 从其中镜像的的远程 helm 软件仓库。 | 对象数组。例如: |
| 从其中镜像(mirror)的 helm 存储库的名称。 |
字符串.例如: |
| 从其中镜像(mirror)的 helm 存储库的 URL。 |
字符串.例如: |
| 要镜像的远程 helm chart。 | 对象数组。 |
| 要镜像的 helm chart 的名称。 |
字符串.例如: |
| helm chart 中容器镜像的自定义路径。 + 注意
|
字符串数组。例如: |
| 镜像集的 Operator 配置。 | 对象数组 Example: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:4.19 packages: - name: elasticsearch-operator minVersion: '2.4.0'
|
| 包括在镜像集中的 Operator 目录。 |
字符串示例: |
|
为 |
布尔值,默认值为 |
| Operator 软件包配置。 | 对象数组 Example: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:4.19 packages: - name: elasticsearch-operator minVersion: '5.2.3-31'
|
| 镜像集中要包含的 Operator 软件包名称。 |
字符串示例: |
| Operator 软件包频道配置 | 对象 |
| Operator 频道名称(软件包中唯一)要包括在镜像集中。 |
字符串示例: |
| Operator 镜像的最高版本,在其中存在所有频道。 |
字符串示例: |
| Operator 的最低版本,用于镜像存在的所有频道 |
字符串示例: |
| Operator 最高版本,可跨所有存在的频道进行镜像。 |
字符串示例: |
| Operator 的最低版本,用于镜像存在的所有频道。 |
字符串示例: |
| 将引用的目录镜像为的替代名称和可选命名空间层次结构 |
字符串示例: |
| 用于完成 oc-mirror 插件 v2 生成的 catalogSource 自定义资源的模板的路径。 |
字符串示例: |
|
附加到 |
字符串示例: |
| 镜像集的平台配置。 | 对象 |
| 要镜像的平台发行版本有效负载的架构。 | 字符串数组示例:
默认值为 |
| 镜像集的平台频道配置。 | 对象数组示例: channels: - name: stable-4.12 - name: stable-4.19
|
|
为 |
布尔值,默认为 |
| 版本频道的名称 |
字符串示例: |
| 要镜像引用的平台的最低版本。 |
字符串示例: |
| 要镜像引用的平台的最高版本。 |
字符串示例: |
| 切换最短的路径镜像或完整范围镜像。 |
布尔值,默认为 |
| 要镜像的平台的类型 |
字符串示例: |
| 指明是否将 OSUS 图表添加到镜像集中,然后发布到镜像。 |
布尔值,默认为 |
| 在从过滤中排除默认频道时,必须定义。 | 对象数组。例如: |
3.3.12.1. DeleteImageSetConfiguration 参数 复制链接链接已复制到粘贴板!
要将删除镜像与 oc-mirror 插件 v2 搭配使用,您必须使用 DeleteImageSetConfiguration.yaml
配置文件来定义要从镜像 registry 中删除哪些镜像。下表列出了 DeleteImageSetConfiguration
资源的可用参数。
参数 | 描述 | 值 |
---|---|---|
|
|
字符串示例: |
| 镜像集要删除的配置。 | 对象 |
| 删除镜像集的额外镜像配置。 | 对象数组示例: additionalImages: - name: registry.redhat.io/ubi8/ubi:latest
|
| 要删除的镜像的标签或摘要。 |
字符串示例: |
| 删除镜像集的 Operator 配置。 | 对象数组示例: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version} packages: - name: elasticsearch-operator minVersion: '2.4.0'
|
| 要在 delete 镜像集中包含的 Operator 目录。 |
字符串示例: |
| 如果为 true,则删除完整目录、Operator 软件包或 Operator 频道。 |
布尔值,默认为 |
| Operator 软件包配置 | 对象数组示例: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version} packages: - name: elasticsearch-operator minVersion: '5.2.3-31'
|
| 要在 delete 镜像集中包含的 Operator 软件包名称。 |
字符串示例: |
| Operator 软件包频道配置 | 对象 |
| Operator 频道名称(在软件包中是唯一的)包括在 delete 镜像集中。 |
字符串示例: |
| 在所选频道中删除的 Operator 的最高版本。 |
字符串示例: |
| 在存在的选择中删除 Operator 的最低版本。 |
字符串示例: |
| 在存在的所有频道中删除 Operator 的最高版本。 |
字符串示例: |
| 在存在的所有频道中删除 Operator 的最低版本。 |
字符串示例: |
| 镜像集的平台配置 | 对象 |
| 要删除的平台发行版本有效负载的架构。 | 字符串数组示例:
默认值为 |
| 镜像集的平台频道配置。 | 对象数组 Example: channels: - name: stable-4.12 - name: stable-4.19
|
|
为 |
布尔值,默认为 |
| 版本频道的名称 |
字符串示例: |
| 要删除的引用平台的最低版本。 |
字符串示例: |
| 要删除的引用平台的最高版本。 |
字符串示例: |
| 在删除最短路径并删除完整范围之间切换。 |
布尔值,默认为 |
| 要删除的平台的类型 |
字符串示例: |
| 确定是否在镜像 registry 上也删除 OSUS 图形。 |
布尔值,默认为 |
3.3.13. oc-mirror 插件 v2 的命令参考 复制链接链接已复制到粘贴板!
下表描述了 oc mirror
子命令和 oc-mirror 插件 v2 的标志:
子命令 | 描述 |
---|---|
| 显示有关任何子命令的帮助 |
| 输出 oc-mirror 版本 |
| 删除远程 registry 和本地缓存中的镜像。 |
标记 | 描述 |
---|---|
|
显示身份验证文件的字符串路径。默认为 |
| 指定镜像设置配置文件的路径。 |
|
使用此标志指定 oc-mirror 插件存储镜像 Blob 和清单在镜像操作过程中使用的持久缓存的目录。oc-mirror 插件使用 |
|
在访问容器 registry 或守护进程时,需要 HTTPS 并验证证书。默认值为 |
| 在不 mirror 镜像的情况下打印操作。 |
| 指定通过执行 oc-mirror 插件 v2 来加载目标 registry 生成的镜像设置存档的路径。 |
| 显示帮助 |
|
mirror 镜像超时。默认值为 10m0s。有效的时间单位是 |
|
显示字符串日志级别。支持的值包括 info、debug、trace、error。默认值为 |
|
确定 oc-mirror 插件 v2 本地存储实例使用的 HTTP 端口。默认值为 |
|
指定并行镜像的镜像数量。默认值为 |
|
指定并行镜像的镜像层数量。默认值为 |
|
指定限制嵌套路径的目标 registry 的最大嵌套路径数。默认值为 |
|
默认值为 |
|
包含自指定日期以来的所有新内容(格式: |
| 在访问容器 registry 或守护进程时,需要 HTTPS 并验证证书。 |
|
默认值为 |
| 显示 oc-mirror 插件 v2 的版本。 |
|
您可以使用 |
|
2 次重试之间延迟。默认值为 |
|
要重试的次数。默认值为 |
|
覆盖默认容器无根存储路径(通常为 |
| 不从源镜像复制签名。 |
| 指定包含 registry 配置文件的目录。 |
| 为所有镜像启用签名验证。 |
| 指定签名验证策略文件的路径。 |
3.3.13.1. 删除镜像的命令参考 复制链接链接已复制到粘贴板!
下表描述了 oc mirror
子命令和用于删除镜像的标志:
子命令 | 描述 |
---|---|
|
身份验证文件的路径。默认值为 |
|
使用此标志指定 oc-mirror 插件存储镜像 Blob 和清单在镜像操作过程中使用的持久缓存的目录。oc-mirror 插件使用 |
| 删除 imageset 配置文件的路径。 |
| 用于区分由删除功能创建的文件的版本。 |
|
在迁移过程中(与 |
| 如果设置,使用生成的或更新的 yaml 文件来删除内容。 |
|
与容器 registry 或守护进程对话时,需要 HTTPS 并验证证书。默认值为 |
| 用于强制删除本地缓存清单和 blob。 |
| 用于为从本地缓存和远程 registry 中删除时使用的清单和 blob 列表生成 delete yaml。 |
| 显示帮助。 |
|
日志级别,是 |
|
指明并行删除的镜像数量。默认值为 |
|
指明并行镜像的镜像层数量。默认值为 |
|
oc-mirror 的本地存储实例使用的 HTTP 端口。默认值为 |
|
2 次重试之间的持续时间延迟。默认值为 |
|
要重试的次数。默认值为 |
|
与容器 registry 或守护进程对话时,需要 HTTPS 并验证证书。默认值为 |
|
您可以使用 |
3.3.13.2. 关于 --cache-dir 和 --workspace 标记 复制链接链接已复制到粘贴板!
您可以使用 --cache-dir
标志指定一个目录,其中 oc-mirror 插件存储了镜像 Blob 和清单在镜像操作期间使用的持久缓存。
oc-mirror 插件使用 mirror-to-disk
和 disk-to-mirror
工作流中的缓存,但不会在 mirror-to-mirror
工作流中使用缓存。该插件使用缓存来执行增量镜像,并避免重新镜像未更改的镜像,这会节省时间并减少网络带宽使用量。
缓存目录仅包含最近一次成功的镜像操作的数据。如果您删除或损坏缓存目录,oc-mirror 插件会再次拉取镜像 Blob 和清单,这可以强制完全重新镜像并增加网络使用量。
您可以使用 --workspace
标志指定一个目录,其中 oc-mirror 插件存储它在镜像操作过程中创建的工作文件,如 ImageDigestMirrorSet
和 ImageTagMirrorSet
清单。您还可以使用工作区目录执行以下操作:
- 为发行版本和 Operator 镜像存储解压缩的元数据。
-
生成 tar 存档,以便在
disk-to-mirror
工作流中使用。 - 将生成的配置应用到集群。
- 重复或恢复以前的镜像操作。
如果您删除或修改 workspace 目录,则将来的镜像操作可能会失败,或者集群可能会使用不一致的镜像源。
删除或修改缓存或工作区目录的内容可能会导致以下问题:
- 镜像操作失败或不完整。
- 增量镜像数据丢失。
- 完全重新镜像的要求以及增加的网络开销。
除非您完全了解相关的影响,否则不要修改、重新定位或删除这些目录。在成功的镜像操作后,您必须定期备份缓存目录。不需要备份工作区目录,因为每个镜像周期都会重新生成其内容。
请考虑以下最佳实践,以便可以更好地管理缓存和工作区目录:
- 使用持久性存储 :在可靠和备份存储上放置缓存和工作区目录。
- 在成功操作后备份:常规备份缓存目录,特别是在完成镜像周期后。
- 恢复 :如果出现数据丢失,请从备份中恢复缓存和工作区目录,以便在不执行完整重新镜像的情况下恢复镜像操作。
- 独立的环境:为不同的环境使用专用目录以防止冲突。
在运行 oc-mirror 命令时,使用以下示例指定 cache 和 workspace 目录:
oc mirror --config=imageset-config.yaml \ file://local_mirror \ --workspace /mnt/mirror-data/workspace \ --cache-dir /mnt/mirror-data/cache
$ oc mirror --config=imageset-config.yaml \
file://local_mirror \
--workspace /mnt/mirror-data/workspace \
--cache-dir /mnt/mirror-data/cache
--v2
镜像操作完成后,您的目录结构如下:
每次成功镜像操作后,您必须备份 /mnt/mirror-data/cache
目录。
3.3.14. 后续步骤 复制链接链接已复制到粘贴板!
使用 oc-mirror 插件 v2 将镜像 mirror 到断开连接的环境中后,您可以执行以下操作: