$ tar xvzf oc-mirror.tar.gz
如果您从私有注册表中镜像的 OpenShift Container Platform 容器镜像集安装集群,则可以在断开连接的环境中运行集群。只要集群运行,此注册表就必须运行。
就像您可以使用oc-mirror
OpenShift CLI (oc
) 插件一样,您也可以使用 oc-mirror 插件 v2 将镜像镜像到完全或部分断开连接的环境中的镜像注册表。要从官方 Red Hat 注册表下载所需的镜像,您必须从具有互联网连接的系统运行 oc-mirror 插件 v2。
oc-mirror 插件 v2 仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可以提前访问即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围。 |
oc-mirror OpenShift CLI (oc
) 插件是一个单一工具,可将所有必需的 OpenShift Container Platform 内容和其他镜像镜像到您的镜像注册表。
要使用 oc-mirror 的新技术预览版本,请将--v2
标志添加到 oc-mirror 插件 v2 命令行。
oc-mirror 插件 v2 具有以下功能
验证镜像集配置文件中指定的完整镜像集是否已镜像到镜像注册表,无论镜像是否已镜像。
使用缓存系统而不是元数据,这避免了在单个步骤失败的情况下需要重新启动镜像过程。
通过仅将新图像合并到存档中,保持最小的存档大小。
生成镜像存档,内容由镜像日期选择。
可以生成ImageDigestMirrorSet
(IDMS) 和 ImageTagMirrorSet
(ITMS) 资源,它们涵盖完整的图像集,而不是ImageContentSourcePolicy
(ICSP) 资源,后者仅涵盖 v1 中每次镜像操作的图像集增量更改。
保存按捆绑包名称过滤的 Operator 版本。
不执行自动修剪。v2 现在使用Delete
功能,使用户能够更好地控制图像删除。
引入对registries.conf
文件的支持。此更改有助于在使用相同缓存的同时镜像到多个隔离区。
您必须拥有一个支持Docker V2-2的容器镜像注册表,该注册表位于托管 OpenShift Container Platform 集群的位置,例如 Red Hat Quay。
|
已配置集群中的每台机器都必须能够访问镜像注册表。如果注册表无法访问,则安装、更新或诸如工作负载重新定位之类的例行操作可能会失败。镜像注册表必须以高可用性方式运行,确保其可用性与 OpenShift Container Platform 集群的生产可用性保持一致。
要使用 oc-mirror 插件 v2 进行镜像镜像,您必须安装该插件并创建一个包含容器镜像凭据的文件,从而使您可以从 Red Hat 镜像到您的镜像。
安装 oc-mirror OpenShift CLI 插件以管理脱机环境中的镜像集。
您已安装 OpenShift CLI (oc
)。如果您在完全脱机的环境中镜像镜像集,请确保:
您已在具有互联网访问权限的主机上安装了 oc-mirror 插件。
脱机环境中的主机可以访问目标镜像注册表。
您已将使用 oc-mirror 的操作系统的umask
参数设置为0022
。
您已安装适合您正在使用的 RHEL 版本的正确二进制文件。
下载 oc-mirror CLI 插件
导航到 Red Hat Hybrid Cloud Console 的下载页面。
在“OpenShift 脱机安装工具”部分,从下拉菜单中选择OpenShift 客户端 (oc) 镜像插件的操作系统类型和架构类型。
单击下载以保存文件。
通过运行以下命令解压缩存档:
$ tar xvzf oc-mirror.tar.gz
如有必要,通过运行以下命令更新插件文件使其可执行:
$ chmod +x oc-mirror
不要重命名 |
通过将文件放在您的PATH
中(例如/usr/local/bin
)来安装 oc-mirror CLI 插件,运行以下命令:
$ sudo mv oc-mirror /usr/local/bin/.
通过运行以下命令验证 oc-mirror 插件 v2 是否已成功安装:
$ oc mirror --v2 --help
创建一个容器镜像注册表凭据文件,使您可以将镜像从 Red Hat 镜像到您的镜像。
安装集群时,请勿将此镜像注册表凭据文件用作拉取密钥。如果您在安装集群时提供此文件,则集群中的所有机器都将对您的镜像注册表具有写入权限。 |
您已配置要在脱机环境中使用的镜像注册表。
您已在镜像注册表上确定了要将镜像镜像到的镜像存储库位置。
您已配置允许将镜像上传到该镜像存储库的镜像注册表帐户。
您可以写入镜像注册表。
在安装主机上完成以下步骤:
从 Red Hat OpenShift 集群管理器下载您的registry.redhat.io
拉取密钥。
通过运行以下命令创建拉取密钥的 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]"
}
}
}
如果$XDG_RUNTIME_DIR/containers
目录不存在,请通过输入以下命令创建一个:
$ mkdir -p $XDG_RUNTIME_DIR/containers
将拉取密钥文件保存为$XDG_RUNTIME_DIR/containers/auth.json
。
通过运行以下命令生成镜像注册表的 base64 编码用户名和密码或令牌:
$ echo -n '<user_name>:<password>' | base64 -w0 (1)
1 | 对于<user_name> 和<password> ,请指定您为注册表配置的用户名和密码。 |
BGVtbYk3ZHAtqXs=
编辑 JSON 文件,并添加一个描述您的注册表的节:
"auths": {
"<mirror_registry>": { (1)
"auth": "<credentials>", (2)
"email": "[email protected]"
}
},
1 | 指定镜像注册表用于提供内容的注册表域名,以及可选的端口,例如registry.example.com 或registry.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]"
}
}
}
将镜像集镜像到镜像注册表可确保所需的镜像在安全受控的环境中可用,从而促进更顺利的部署、更新和维护任务。
在使用 oc-mirror 插件 v2 镜像镜像之前,必须创建一个镜像集配置文件。此镜像集配置文件定义了要镜像的 OpenShift Container Platform 版本、Operators 和其他镜像,以及 oc-mirror 插件 v2 的其他配置设置。
您已创建容器镜像注册表凭据文件。有关说明,请参阅配置允许镜像镜像的凭据。
创建一个ImageSetConfiguration
YAML 文件并修改它以包含您所需的镜像。
ImageSetConfiguration
YAML 文件示例kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v2alpha1
mirror:
platform:
channels:
- name: stable-4.17 (1)
minVersion: 4.17.2
maxVersion: 4.17.2
graph: true (2)
operators:
- catalog: registry.redhat.io/redhat/redhat-operator-index:v4.17 (3)
packages: (4)
- name: aws-load-balancer-operator
- name: 3scale-operator
- name: node-observability-operator
additionalImages: (5)
- name: registry.redhat.io/ubi8/ubi:latest
- name: registry.redhat.io/ubi9/ubi@sha256:20f695d2a91352d4eaa25107535126727b5945bff38ed36a3e59590f495046f0
1 | 设置通道以从中检索 OpenShift Container Platform 镜像。 |
2 | 添加graph: true 以构建和推送 graph-data 镜像到镜像注册表。graph-data 镜像是创建 OpenShift 更新服务 (OSUS) 所必需的。graph: true 字段还会生成UpdateService 自定义资源清单。oc 命令行界面 (CLI) 可以使用UpdateService 自定义资源清单来创建 OSUS。有关更多信息,请参阅关于 OpenShift 更新服务。 |
3 | 设置 Operator 目录以从中检索 OpenShift Container Platform 镜像。 |
4 | 仅指定要包含在镜像集中的某些 Operator 包。删除此字段以检索目录中的所有包。 |
5 | 指定要包含在镜像集中的任何其他镜像。 |
您可以在具有受限互联网访问权限的环境中,使用 oc-mirror 插件 v2 将镜像集镜像到注册表。
您可以在运行 oc-mirror 插件 v2 的环境中访问互联网和镜像注册表。
通过运行以下命令,将镜像从指定的镜像集配置镜像到指定的注册表
$ oc mirror -c <image_set_configuration> --workspace file://<file_path> docker://<mirror_registry_url> --v2 (1)
其中
指定镜像集配置文件的名称。
指定将在其中生成集群资源的目录。
指定存储镜像并需要从中删除镜像的镜像注册表的 URL 或地址。
导航到在<file_path>
目录中生成的working-dir/cluster-resources
目录。
验证ImageDigestMirrorSet
、ImageTagMirrorSet
和CatalogSource
资源的 YAML 文件是否存在。
配置您的集群以使用 oc-mirror 插件 v2 生成的资源。
您可以在 OpenShift Container Platform 集群无法访问公共互联网的完全断开连接的环境中镜像镜像集。以下高级工作流程描述了镜像过程
镜像到磁盘:将镜像集镜像到存档。
磁盘传输:手动将存档传输到断开连接的镜像注册表的网络。
磁盘到镜像:将镜像集从存档镜像到目标断开连接的注册表。
您可以使用 oc-mirror 插件 v2 生成镜像集并将内容保存到磁盘。之后,您可以将生成的镜像集传输到断开连接的环境并将其镜像到目标注册表。
oc-mirror 插件 v2 从镜像集配置文件中指定的源检索容器镜像,并将它们打包到本地目录中的 tar 存档中。
通过运行以下命令将镜像从指定的镜像集配置镜像到磁盘
$ oc mirror -c <image_set_configuration> file://<file_path> --v2
其中
指定镜像集配置文件的名称。
指定将在其中生成包含镜像集的存档的目录。
导航到生成的<file_path>
目录。
验证存档文件是否已生成。
从磁盘镜像到镜像
您可以使用 oc-mirror 插件 v2 将镜像集从磁盘镜像到目标镜像注册表。
oc-mirror 插件 v2 从本地磁盘检索容器镜像,并将它们传输到指定的镜像注册表。
将包含镜像镜像集的磁盘传输到包含目标镜像注册表的环境。
处理磁盘上的镜像集文件,并通过运行以下命令将内容镜像到目标镜像注册表
$ oc mirror -c <image_set_configuration> --from file://<file_path> docker://<mirror_registry_url> --v2
其中
指定镜像集配置文件的名称。
指定磁盘上包含存档的目录。此文件夹还将包含为您生成的集群资源,以便应用于集群,例如 ImageDigestMirrorSet (IDMS) 或 ImageTagMirrorSet (ITMS) 资源。
指定存储镜像的镜像注册表的 URL 或地址。
导航到在<file_path>
目录中生成的working-dir
目录内的cluster-resources
目录。
验证ImageDigestMirrorSet
、ImageTagMirrorSet
和CatalogSource
资源的 YAML 文件是否存在。
配置您的集群以使用 oc-mirror 插件 v2 生成的资源。
使用 oc-mirror 插件 v2,如果镜像集的至少一个镜像通过摘要进行镜像,则默认情况下会生成ImageDigestMirrorSet
(IDMS) 资源。如果镜像集中的至少一个镜像通过标签进行镜像,则会生成ImageTagMirrorSet
(ITMS) 资源。
Operator Lifecycle Manager (OLM) 使用CatalogSource
资源来检索有关镜像注册表中可用 Operator 的信息。
OpenShift 更新服务使用UpdateService
资源向断开连接的环境提供更新图数据。
将镜像集镜像到镜像注册表后,必须将生成的ImageDigestMirrorSet
(IDMS)、ImageTagMirrorSet
(ITMS)、CatalogSource
和UpdateService
资源应用到集群。
在 oc-mirror 插件 v2 中,IDMS 和 ITMS 文件涵盖整个镜像集,这与 oc-mirror 插件 v1 中的 |
您可以作为具有cluster-admin
角色的用户访问集群。
以具有cluster-admin
角色的用户身份登录到 OpenShift CLI。
通过运行以下命令将结果目录中的 YAML 文件应用到集群
$ oc apply -f <path_to_oc_mirror_workspace>/working-dir/cluster-resources
通过运行以下命令验证ImageDigestMirrorSet
资源是否已成功安装
$ oc get imagedigestmirrorset
通过运行以下命令验证ImageTagMirrorSet
资源是否已成功安装
$ oc get imagetagmirrorset
通过运行以下命令验证CatalogSource
资源是否已成功安装
$ oc get catalogsource -n openshift-marketplace
一旦您的集群配置为使用 oc-mirror 插件 v2 生成的资源,请参阅后续步骤,了解您可以使用镜像映像执行的任务。
如果您之前已使用 oc-mirror 插件 v2 部署了映像,您可以删除这些映像以释放镜像注册表中的空间。oc-mirror 插件 v2 不会自动修剪 `ImageSetConfiguration` 文件中未包含的映像。这可以防止在更改 `ImageSetConfig.yaml` 文件时意外删除必要的或已部署的映像。
您必须创建一个 `DeleteImageSetConfiguration` 文件来指定要删除的映像。
在以下示例中,`DeleteImageSetConfiguration` 文件将删除以下映像:
OpenShift Container Platform 4.13.3 的所有发行版映像。
`redhat-operator-index` `v4.12` 目录映像。
`aws-load-balancer-operator` v0.0.1 软件包及其所有相关映像。
通过其对应的摘要引用的 `ubi` 和 `ubi-minimal` 的附加映像。
apiVersion: mirror.openshift.io/v2alpha1
kind: DeleteImageSetConfiguration
delete:
platform:
channels:
- name: stable-4.13
minVersion: 4.13.3
maxVersion: 4.13.3
operators:
- catalog: registry.redhat.io/redhat/redhat-operator-index:v4.12
packages:
- name: aws-load-balancer-operator
minVersion: 0.0.1
maxVersion: 0.0.1
additionalImages:
- name: registry.redhat.io/ubi8/ubi@sha256:bce7e9f69fb7d4533447232478fd825811c760288f87a35699f9c8f030f2c1a6
- name: registry.redhat.io/ubi8/ubi-minimal@sha256:8bedbe742f140108897fb3532068e8316900d9814f399d676ac78b46e740e34e
考虑使用镜像到磁盘和磁盘到镜像的工作流程来减少镜像问题。 |
oc-mirror 插件 v2 仅删除映像的清单,不会减少注册表中占用的存储空间。
要释放不需要的映像(例如已删除清单的映像)的存储空间,必须在容器注册表上启用垃圾收集器。启用垃圾收集器后,注册表将删除不再引用任何清单的映像块,从而减少先前被删除块占用的存储空间。启用垃圾收集器的过程取决于您的容器注册表。
要在删除 Operator 映像时跳过删除 Operator 目录映像,必须在 `DeleteImageSetConfiguration` 文件中列出 Operator 目录映像下的特定 Operator。这确保仅删除指定的 Operator,而不是目录映像。 如果仅指定 Operator 目录映像,则将删除该目录中的所有 Operator 以及目录映像本身。 |
要使用 oc-mirror 插件 v2 从断开连接的环境中删除映像,请按照以下步骤操作。
您已在环境中启用垃圾回收以删除不再引用清单的映像。
创建一个 `delete-image-set-config.yaml` 文件并包含以下内容:
apiVersion: mirror.openshift.io/v2alpha1
kind: DeleteImageSetConfiguration
delete:
platform:
channels:
- name: <channel_name> (1)
minVersion: <channel_min_version> (2)
maxVersion: <channel_max_version> (2)
operators:
- catalog: <operator_catalog_name> (3)
packages:
- name: <operator_name> (4)
minVersion: <operator_max_version> (5)
maxVersion: <operator_min_version> (5)
additionalImages:
- name: <additional_images> (6)
1 | 指定要删除的 OpenShift Container Platform 通道的名称,例如 `stable-4.15`。 |
2 | 指定要在通道内删除的映像的版本范围,例如 `4.15.0` 为最小版本,`4.15.1` 为最大版本。要仅删除一个版本的映像,请对 `minVersion` 和 `maxVersion` 字段使用该版本号。 |
3 | 指定要删除的 Operator 目录映像,例如 `registry.redhat.io/redhat/redhat-operator-index:v4.14`。要删除目录映像,您必须不要使用 `delete.operators.packages` 参数指定单个 Operator。 |
4 | 指定要删除的特定 Operator 软件包,例如 `aws-load-balancer-operator`。如果您指定单个 Operator,则不会删除 Operator 目录映像。 |
5 | 指定要为 Operator 删除的映像的版本范围,例如 `0.0.1` 为最小版本,`0.0.2` 为最大版本。要仅删除一个版本的映像,请对 `minVersion` 和 `maxVersion` 字段使用该版本号。 |
6 | 指定要删除的其他映像,例如 `registry.redhat.io/ubi9/ubi-init:latest`。 |
通过运行以下命令创建 `delete-images.yaml` 文件:
$ oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>
其中
指定映像之前镜像到或在镜像过程中存储到的目录。
指定将从中删除映像的远程容器注册表的 URL 或地址。
转到已创建的 `<之前镜像的工作文件夹>/delete` 目录。
验证是否已生成 `delete-images.yaml` 文件。
手动确保文件中列出的每个映像不再被集群需要,并且可以安全地从注册表中删除。
生成 `delete-images` YAML 文件后,通过运行以下命令从远程注册表中删除映像:
$ oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/working-dir/delete/delete-images.yaml docker://<remote_registry>
其中
指定映像之前镜像到或在镜像过程中存储到的目录。
指定将从中删除映像的远程容器注册表的 URL 或地址。
使用镜像到镜像方法镜像映像时,映像不会缓存在本地,因此您无法从本地缓存中删除映像。 |
您可以使用 oc-mirror 插件 v2 执行测试运行(预运行),该运行不会实际镜像任何映像。这使您可以查看将要镜像的映像列表。您还可以使用预运行尽早发现映像集配置中的任何错误。在镜像到磁盘工作流程上运行预运行时,oc-mirror 插件 v2 会检查映像集中所有映像在其缓存中是否可用。任何缺失的映像都列在 `missing.txt` 文件中。在镜像之前执行预运行时,`missing.txt` 和 `mapping.txt` 文件都包含相同的映像列表。
通过执行不镜像任何映像的预运行来验证您的映像集配置。这确保您的设置正确,并防止意外更改。
要执行测试运行,请运行 `oc mirror` 命令并将 `--dry-run` 参数附加到命令中:
$ oc mirror -c <image_set_config_yaml> --from file://<oc_mirror_workspace_path> docker://<mirror_registry_url> --dry-run --v2
其中:
`<image_set_config_yaml>`:使用您刚刚创建的映像集配置文件。
`<oc_mirror_workspace_path>`:插入工作区路径的地址。
`<mirror_registry_url>`:插入将从中删除映像的远程容器注册表的 URL 或地址。
$ oc mirror --config /tmp/isc_dryrun.yaml file://<oc_mirror_workspace_path> --dry-run --v2
[INFO] : :warning: --v2 flag identified, flow redirected to the oc-mirror v2 version. This is Tech Preview, it is still under development and it is not production ready.
[INFO] : :wave: Hello, welcome to oc-mirror
[INFO] : :gear: setting up the environment for you...
[INFO] : :twisted_rightwards_arrows: workflow mode: mirrorToDisk
[INFO] : :sleuth_or_spy: going to discover the necessary images...
[INFO] : :mag: collecting release images...
[INFO] : :mag: collecting operator images...
[INFO] : :mag: collecting additional images...
[WARN] : :warning: 54/54 images necessary for mirroring are not available in the cache.
[WARN] : List of missing images in : CLID-19/working-dir/dry-run/missing.txt.
please re-run the mirror to disk process
[INFO] : :page_facing_up: list of all images for mirroring in : CLID-19/working-dir/dry-run/mapping.txt
[INFO] : mirror time : 9.641091076s
[INFO] : :wave: Goodbye, thank you for using oc-mirror
导航到已生成的工作区目录。
$ cd <oc_mirror_workspace_path>
查看已生成的 `mapping.txt` 和 `missing.txt` 文件。这些文件包含将要镜像的所有映像的列表。
oc-mirror 插件 v2 现在将所有映像镜像错误记录在单独的文件中,从而更容易跟踪和诊断故障。
当镜像发行版或发行版组件映像时发生错误时,这些错误是严重的。这会立即停止镜像过程。 镜像 Operator、与 Operator 相关的映像或附加映像的错误不会停止镜像过程。镜像将继续进行,oc-mirror 插件 v2 每 8 个映像更新一次日志。 |
当映像镜像失败,并且该映像作为一个或多个 Operator 软件包的一部分镜像时,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://127.0.0.1:5000/v2/": http: server gave HTTP response to HTTPS client
打开位于 oc-mirror 插件 v2 输出目录中的 `working-dir/logs` 文件夹中的 `mirroring_error_date_time.log` 文件。
查找通常指示服务器端问题的错误消息,例如 `HTTP 500` 错误、令牌过期或超时。
如果问题仍然存在,请重试镜像过程或联系支持人员。
检查 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://127.0.0.1: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://127.0.0.1:55000/3scale-amp2/system-rhel7:fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e: reading manifest fe77272021867cc6b6d5d0c9bd06c99d4024ad53f1ab94ec0ab69d0fda74588e in localhost:55000/3scale-amp2/system-rhel7: manifest unknown
检查控制台或日志文件中指示哪些 Operator 不完整的警告。
如果 Operator 被标记为不完整,则与该 Operator 相关的映像可能镜像失败。
手动镜像缺失的映像或重试镜像过程。
检查与生成的集群资源相关的错误。即使某些镜像镜像失败,oc-mirror v2 仍将为成功镜像的镜像生成集群资源,例如IDMS.yaml
和 ITMS.yaml
文件。
检查输出目录中的生成文件。
如果特定镜像缺少这些文件,请确保镜像过程中这些镜像没有出现严重错误。
按照这些步骤,您可以更好地诊断问题并确保镜像过程更顺畅。
飞地支持将内部访问权限限制在网络的特定部分。与允许通过防火墙边界进行入站和出站流量访问的非军事区 (DMZ) 网络不同,飞地不会跨越防火墙边界。
飞地支持仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围。 |
新的飞地支持功能适用于需要为位于至少一个中间断开连接的网络后面的多个飞地镜像内容的场景。
飞地支持具有以下优势:
您可以为多个飞地镜像内容,并将其集中在一个内部注册表中。由于某些客户希望对镜像的内容运行安全检查,因此通过此设置,他们可以一次性运行所有这些检查。然后在将内容镜像到下游飞地之前对其进行验证。
您可以直接从集中的内部注册表将内容镜像到飞地,而无需为每个飞地从互联网重新启动镜像过程。
您可以最大限度地减少网络阶段之间的数据传输,以确保仅将 Blob 或镜像从一个阶段传输到另一个阶段一次。
之前的图像概述了在不同环境中使用 oc-mirror 插件的流程,包括具有和不具有互联网连接的环境。
具有互联网连接的环境:
用户执行 oc-mirror 插件 v2 以将内容从在线注册表镜像到本地磁盘目录。
镜像的内容被保存到磁盘中,以便传输到离线环境。
断开连接的企业环境(无互联网):
流程 1
用户运行 oc-mirror 插件 v2 将从在线环境传输的磁盘目录中的镜像内容加载到enterprise-registry.in
注册表中。
流程 2
更新registries.conf
文件后,用户执行 oc-mirror 插件 v2 将内容从enterprise-registry.in
注册表镜像到飞地环境。
内容被保存到磁盘目录中,以便传输到飞地。
飞地环境(无互联网):
用户运行 oc-mirror 插件 v2 将内容从磁盘目录加载到enclave-registry.in
注册表中。
该图像直观地表示了跨这些环境的数据流,并强调了使用 oc-mirror 处理没有互联网连接的断开连接和飞地环境。
将镜像到飞地时,必须首先将必要的镜像从一个或多个飞地传输到企业中央注册表。
中央注册表位于安全网络(特别是断开连接的环境)中,并且没有直接链接到公共互联网。但用户必须在可以访问公共互联网的环境中执行oc mirror
。
在断开连接的环境中运行 oc-mirror 插件 v2 之前,请创建registries.conf
文件。该文件的 TOML 格式在此规范中进行了描述。
建议将文件存储在 |
registries.conf
示例[[registry]]
location="registry.redhat.io"
[[registry.mirror]]
location="<enterprise-registry.in>"
[[registry]]
location="quay.io"
[[registry.mirror]]
location="<enterprise-registry.in>"
生成镜像存档。
要将所有 OpenShift Container Platform 内容收集到<file_path>/enterprise-content
下的磁盘上的存档中,请运行以下命令:
$ oc mirror --v2 -c isc.yaml file://<file_path>/enterprise-content
apiVersion: mirror.openshift.io/v2alpha1
kind: ImageSetConfiguration
mirror:
platform:
architectures:
- "amd64"
channels:
- name: stable-4.15
minVersion: 4.15.0
maxVersion: 4.15.3
生成存档后,将其传输到断开连接的环境。传输机制不是 oc-mirror 插件 v2 的一部分。企业网络管理员确定传输策略。
在某些情况下,传输是手动完成的,即将磁盘从一个位置物理断开连接,然后连接到断开连接的环境中的另一台计算机。在其他情况下,使用安全文件传输协议 (SFTP) 或其他协议。
传输存档完成后,您可以再次执行 oc-mirror 插件 v2 以将相关的存档内容镜像到注册表(示例中的entrerpise_registry.in
),如下例所示:
$ oc mirror --v2 -c isc.yaml --from file://<disconnected_environment_file_path>/enterprise-content docker://<enterprise_registry.in>/
其中:
--from
指向包含存档的文件夹。它以file://
开头。
docker://
是镜像的目标,它是最终参数。因为它是一个 Docker 注册表。
-c
(--config
)是必需参数。它使 oc-mirror 插件 v2 最终只能将存档的子部分镜像到注册表。一个存档可能包含多个 OpenShift Container Platform 版本,但断开连接的环境或飞地可能只镜像几个版本。
准备imageSetConfig
YAML 文件,该文件描述要镜像到飞地的内容。
apiVersion: mirror.openshift.io/v2alpha1
kind: ImageSetConfiguration
mirror:
platform:
architectures:
- "amd64"
channels:
- name: stable-4.15
minVersion: 4.15.2
maxVersion: 4.15.2
必须在可以访问断开连接的注册表的机器上运行 oc-mirror 插件 v2。在前面的示例中,断开连接的环境enterprise-registry.in
是可访问的。
更新图 URL
如果您使用的是graph:true
,oc-mirror 插件 v2 将尝试访问cincinnati
API 端点。由于此环境已断开连接,因此请确保导出环境变量UPDATE_URL_OVERRIDE
以引用 OpenShift 更新服务 (OSUS) 的 URL。
$ export UPDATE_URL_OVERRIDE=https://<osus.enterprise.in>/graph
有关在 OpenShift 集群上设置 OSUS 的更多信息,请参见“使用 OpenShift 更新服务更新断开连接的环境中的集群”。
在 OpenShift Container Platform 扩展更新支持 (EUS) 版本之间更新时,还必须包含当前版本和目标版本之间中间次要版本的镜像。oc-mirror 插件 v2 可能并不总是自动检测到此要求,因此请检查Red Hat OpenShift Container Platform 更新图页面 以确认任何所需的中间版本。 使用“更新图表”页面查找应用程序建议的中间次要版本,并在使用 oc-mirror 插件 v2 时将这些版本中的任何一个包含在 |
从企业注册表为飞地生成镜像存档。
要为enclave1
准备存档,用户可以使用该飞地特有的imageSetConfiguration
在企业断开连接的环境中执行 oc-mirror 插件 v2。这确保了只有该飞地需要的镜像才会被镜像。
$ oc mirror --v2 -c isc-enclave.yaml
file:///disk-enc1/
此操作会将所有 OpenShift Container Platform 内容收集到一个存档中,并在磁盘上生成一个存档。
存档生成后,它将被传输到enclave1
网络。传输机制不是 oc-mirror 插件 v2 的责任。
将镜像内容镜像到飞地注册表
存档传输完成后,用户可以再次执行 oc-mirror 插件 v2,以便将相关的存档内容镜像到注册表。
$ oc mirror --v2 -c isc-enclave.yaml --from file://local-disk docker://registry.enc1.in
enclave1
中 OpenShift Container Platform 集群的管理员现在可以安装或升级该集群了。
oc-mirror 插件 v2 通过处理imageSetConfig
中的信息来选择要镜像的捆绑包列表。
当 oc-mirror 插件 v2 选择要镜像的捆绑包时,它不会推断组版本种类 (GVK) 或捆绑包依赖关系,而是将它们从镜像集中省略。相反,它严格遵守用户指令。您必须明确指定任何所需的依赖包及其版本。
捆绑包版本通常使用语义版本控制标准 (SemVer),您可以按版本对通道内的捆绑包进行排序。您可以在ImageSetConfig
中选择落在特定范围内的捆绑包。
此选择算法确保与 oc-mirror 插件 v1 相比结果一致。但是,它不包括升级图表详细信息,例如replaces
、skip
和skipRange
。这种方法与 OLM 算法不同。由于minVersion
和maxVersion
之间的升级路径可能较短,因此它可能镜像比升级集群所需更多捆绑包。
ImageSetConfig 操作符过滤 | 预期的捆绑包版本 |
---|---|
场景 1
|
对于目录中的每个包,1 个捆绑包,对应于该包的默认通道的头部版本。 |
场景 2
|
指定目录的所有通道的所有捆绑包 |
场景 3
|
一个捆绑包,对应于该包的默认通道的头部版本 |
场景 4
|
指定包的所有通道的所有捆绑包 |
场景 5
|
默认通道中的所有捆绑包,从 |
场景 6
|
默认通道中低于该包的 |
场景 7
|
默认通道中该包的 |
场景 8
|
该包所选通道的头部捆绑包。 |
场景 9
|
指定包和通道的所有捆绑包。 |
场景 10
|
该包每个所选通道的头部捆绑包。 |
场景 11
|
在该包的所选通道内,从 |
场景 12
|
在该包的所选通道内,直到 |
场景 13
|
在该包的所选通道内, |
场景 14
|
只有为每个包指定的捆绑包包含在过滤中。 |
场景 15
|
不要使用此场景。不允许使用 |
场景 16
|
不要使用此场景。您不能使用 |
场景 17
|
不要使用此场景。您不能使用 |
ImageSet
配置参数oc-mirror 插件 v2 需要一个镜像集配置文件来定义要镜像的镜像。下表列出了ImageSetConfiguration
资源的可用参数。
使用 OLM 要求每个 Operator 通道包含形成更新图表的版本,该图表只有一个端点,即 Operator 的最新版本。应用过滤器范围后,该图表可能会变成两个或多个单独的图表,或者一个具有多个端点的图表。 为避免此错误,请勿过滤掉 Operator 的最新版本。如果您仍然遇到此错误,则根据 Operator 的不同,需要增加 |
参数 | 描述 | 值 |
---|---|---|
|
|
字符串示例: |
|
镜像集内每个存档文件的最大大小(以 GiB 为单位)。 |
整数示例: |
|
设置为 |
布尔值示例
|
|
镜像集的配置。 |
对象 |
|
镜像集的附加镜像配置。 |
对象数组 示例
|
|
要镜像的镜像的标签或摘要。 |
字符串示例: |
|
要阻止镜像的镜像的完整标签、摘要或模式。 |
字符串数组示例: |
|
镜像集的操作符配置。 |
对象数组 示例
|
|
要包含在镜像集中的 Operator 目录。 |
字符串示例: |
|
当 |
布尔值 默认值为 |
|
Operator 包配置。 |
对象数组 示例
|
|
要包含在镜像集中的 Operator 包名称。 |
字符串示例: |
|
操作符包通道配置 |
对象 |
|
操作符通道名称,在包内唯一,包含在镜像集中。 |
字符串示例: |
|
操作符镜像在所有包含它的通道中的最高版本。 |
字符串示例: |
|
操作符镜像在所有包含它的通道中的最低版本 |
字符串示例: |
|
操作符镜像在所有包含它的通道中的最高版本。 |
字符串示例: |
|
操作符镜像在所有包含它的通道中的最低版本。 |
字符串示例: |
|
选择的bundle配置 |
对象数组 示例
|
|
选择用于镜像的bundle名称(在目录中显示的名称)。 |
字符串示例: |
|
镜像引用的目录的替代名称和可选的命名空间层次结构 |
字符串示例: |
|
磁盘上用于模板的路径,用于完成oc-mirror插件v2生成的catalogSource自定义资源。 |
字符串示例:
|
|
附加到 |
字符串示例: |
|
镜像集的平台配置。 |
对象 |
|
要镜像的平台发行版负载的架构。 |
字符串数组示例
默认值为 |
|
镜像集的平台通道配置。 |
对象数组示例
|
|
当 |
布尔值 默认值为 |
|
发行版通道的名称 |
字符串示例: |
|
要镜像的引用的平台的最低版本。 |
字符串示例: |
|
要镜像的引用的平台的最高版本。 |
字符串示例: |
|
切换最短路径镜像或全范围镜像。 |
布尔值 默认值为 |
|
要镜像的平台的类型 |
字符串示例: |
|
指示是否将OSUS图添加到镜像集并随后发布到镜像。 |
布尔值 默认值为 |
ImageSet
配置参数要使用oc-mirror插件v2,必须具有删除镜像集配置文件,该文件定义要从镜像注册表中删除哪些镜像。下表列出了DeleteImageSetConfiguration
资源的可用参数。
参数 | 描述 | 值 |
---|---|---|
|
|
字符串示例: |
|
要删除的镜像集的配置。 |
对象 |
|
要删除的镜像集的其他镜像配置。 |
对象数组示例
|
|
要删除的镜像的标签或摘要。 |
字符串示例: |
|
要删除的镜像集的操作符配置。 |
对象数组示例
|
|
要包含在要删除的镜像集中的操作符目录。 |
字符串示例: |
|
如果为true,则删除完整的目录、操作符包或操作符通道。 |
布尔值 默认值为 |
|
操作符包配置 |
对象数组示例
|
|
要包含在要删除的镜像集中的操作符包名称。 |
字符串示例: |
|
操作符包通道配置 |
对象 |
|
操作符通道名称,在包内唯一,包含在要删除的镜像集中。 |
字符串示例: |
|
要在选定通道中删除的操作符的最高版本。 |
字符串示例: |
|
要在选择中删除的操作符的最低版本。 |
字符串示例: |
|
在所有包含它的通道中要删除的操作符的最高版本。 |
字符串示例: |
|
在所有包含它的通道中要删除的操作符的最低版本。 |
字符串示例: |
|
选择的bundle配置 |
对象数组 不能为同一个操作符同时选择通道和bundle。 示例
|
|
选择要删除的bundle的名称(在目录中显示的名称) |
字符串示例: |
|
镜像集的平台配置 |
对象 |
|
要删除的平台发行版负载的架构。 |
字符串数组示例
默认值为 |
|
镜像集的平台通道配置。 |
对象数组 示例
|
|
当 |
布尔值 默认值为 |
|
发行版通道的名称 |
字符串示例: |
|
要删除的引用的平台的最低版本。 |
字符串示例: |
|
要删除的引用的平台的最高版本。 |
字符串示例: |
|
在删除最短路径和删除全范围之间切换。 |
布尔值 默认值为 |
|
要删除的平台的类型 |
字符串示例: |
|
确定是否也从镜像注册表中删除OSUS图。 |
布尔值 默认值为 |
下表描述了oc-mirror插件v2的oc mirror
子命令和标志
子命令 | 描述 |
---|---|
|
显示关于任何子命令的帮助 |
|
输出oc-mirror版本 |
|
删除远程注册表和本地缓存中的镜像。 |
标志 | 描述 |
---|---|
|
显示身份验证文件的字符串路径。默认为 |
|
指定镜像集配置文件的路径。 |
|
访问容器注册表或守护程序时,需要 HTTPS 并验证证书。 |
|
打印操作,但不镜像镜像。 |
|
指定由执行 oc-mirror 插件 v2 生成的镜像集存档的路径,用于加载目标注册表。 |
|
显示帮助信息。 |
|
显示字符串日志级别。支持的值包括 info、debug、trace、error。默认值为 |
|
确定 oc-mirror 插件 v2 本地存储实例使用的 HTTP 端口。默认值为 |
|
指定限制嵌套路径的目标注册表的最大嵌套路径数。默认值为 |
|
默认值为 |
|
包含自指定日期(格式: |
|
访问容器注册表或守护程序时,需要 HTTPS 并验证证书。 |
|
默认值为 |
|
显示 oc-mirror 插件 v2 的版本。 |
|
确定 oc-mirror 插件 v2 工作区(字符串),资源和内部工件在此生成。 |