11.3. 使用 oc-mirror 插件创建自定义 Operator 目录
您可以使用广泛可用的 Operator 创建自定义目录,并使用 oc-mirror OpenShift CLI (oc)插件镜像它们。
11.3.1. 使用红帽提供的 Operator 目录和镜像 registry 复制链接链接已复制到粘贴板!
您可以过滤目录并删除镜像以获取特定的 Operator,并使用 oc-mirror OpenShift CLI (oc)插件镜像它们。您还可以在断开连接的设置中使用 Operator,或嵌入在 Red Hat Enterprise Linux (RHEL)镜像中。
- 要了解更多有关如何配置系统以进行镜像的信息,请遵循以下"添加资源"部分中的链接。
- 如果您准备好从红帽提供的 Operator 目录部署 Operator,进行镜像,或者将其嵌入到 RHEL 镜像中,请从以下部分开始,使用 oc-mirror 插件"指定目录内容"。
11.3.2. 关于用于创建镜像 registry 的 oc-mirror 插件 复制链接链接已复制到粘贴板!
您可以将 oc-mirror OpenShift CLI (oc)插件与 MicroShift 搭配使用,从 Operator 目录过滤和删除镜像。然后,您可以将过滤的目录内容镜像到镜像 registry,或者在断开连接的或离线部署中使用容器镜像。
与您选择的 registry 无关,从连接到互联网到断开连接的镜像 registry 中的内容镜像(mirror)的步骤相同。镜像目录内容后,将每个节点配置为从镜像 registry 检索此内容。
11.3.2.1. 填充镜像 registry 时的连接注意事项 复制链接链接已复制到粘贴板!
在填充 registry 时,您可以使用以下连接场景之一:
- 连接的镜像
- 如果您有一个可以同时访问互联网和您的镜像 registry (而不是您的节点)的主机,您可以直接从该机器中镜像内容。
- 断开连接的镜像
如果您没有可以同时访问互联网和您的镜像 registry 的主机,则必须将镜像镜像到文件系统,然后将该主机或可移动介质放入断开连接的环境中。
重要您置备的节点中的每一台机器都必须可以访问容器 registry。如果 registry 无法访问,安装、更新和其他操作(如重新定位工作负载)会失败。
要避免由无法访问的 registry 导致的问题,请使用以下标准实践:
- 以高可用性方式运行镜像 registry。
- 确保镜像 registry 至少与节点的生产环境可用性匹配。
11.3.3. 使用 oc-mirror 插件检查目录内容 复制链接链接已复制到粘贴板!
使用以下示例步骤选择目录并列出 OpenShift Container Platform Operator 以添加到 oc-mirror 插件镜像设置配置文件中。您必须使用 oc mirror v1 选择目录并列出 Operator。
如果使用自己的目录和 Operator,您可以直接将镜像推送到内部 registry。
先决条件
-
您已卸载了 OpenShift CLI (
oc)。 - 已安装 Operator Lifecycle Manager (OLM)。
- 已安装 oc-mirror 插件。
流程
运行以下命令,获取红帽提供的 Operator 目录列表以过滤:
oc mirror list operators --version 4.20 --catalogs
$ oc mirror list operators --version 4.20 --catalogsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取 Red Hat Operator 目录中的 Operator 列表:
oc mirror list operators <--catalog=<catalog_source>>
$ oc mirror list operators <--catalog=<catalog_source>>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定目录源,如
registry.redhat.io/redhat/redhat-operator-index:v4.20或quay.io/operatorhubio/catalog:latest。
-
选择一个 Operator。本例使用
amq-broker-rhel9Operator。 可选: 要检查您要过滤的 Operator 的频道和版本,请输入以下命令:
运行以下命令获取频道列表:
oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.20 --package=amq-broker-rhel9
$ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.20 --package=amq-broker-rhel9Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取频道中的版本列表:
oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.20 --package=amq-broker-rhel9 --channel=7.13.x
$ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.20 --package=amq-broker-rhel9 --channel=7.13.xCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 使用此流程中收集的信息创建和编辑镜像设置配置文件。
- 将镜像从转换的镜像设置配置文件镜像到镜像 registry 或磁盘。
11.3.4. 创建镜像设置配置文件 复制链接链接已复制到粘贴板!
您必须创建一个 ImageSetConfiguration YAML 文件。此镜像设置配置文件指定用于镜像的 Operator 以及 oc-mirror 插件的配置设置。编辑镜像设置配置文件的内容,以便条目与 MicroShift 和您计划使用的 Operator 兼容。
oc mirror v2 使用缓存系统而不是元数据。缓存系统可防止在单一步骤失败时需要启动整个镜像过程。相反,您可以对失败步骤进行故障排除,进程不会在失败前重新镜像存在的镜像。
先决条件
您创建了容器镜像 registry 凭证文件。如需更多信息,请参阅以下参考:
流程
使用以下示例作为指南,为 MicroShift 创建和编辑
ImageSetConfigurationYAML:编辑的 MicroShift 镜像设置配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要MicroShift 不支持
platform字段、相关字段和 Helm。-
将更新的文件保存为
ImageSetConfiguration.yaml。
后续步骤
- 使用 oc-mirror 插件将镜像直接设置为目标镜像 registry。
- 配置 CRI-O。
- 将目录源应用到您的节点。
11.3.4.1. oc-mirror 插件 v2 的 ImageSet 配置参数 复制链接链接已复制到粘贴板!
oc-mirror 插件 v2 需要一个镜像设置配置文件,该文件定义哪些镜像要镜像(mirror)。下表列出了 ImageSetConfiguration 资源的可用参数。
使用 minVersion 和 maxVersion 属性过滤特定 Operator 版本范围可能会导致多个频道头错误。错误信息将显示有多个频道头。这是因为在应用过滤器时,Operator 的更新图会被截断。
OLM 要求每个 Operator 频道都包含组成一个更新图表的版本,它只有一个端点,即 Operator 的最新版本。在应用图形的过滤器范围时,可以进入两个或多个独立图形或具有多个端点的图形。
要避免这个错误,请不要过滤 Operator 的最新版本。如果您仍然遇到错误,具体取决于 Operator,则必须增加 maxVersion 属性,或者 minVersion 属性必须减少。因为每个 Operator 图都可以不同,所以您可能需要调整这些值,直到错误解决为止。
| 参数 | 描述 | 值 |
|---|---|---|
|
|
|
字符串示例: |
|
| 镜像集的配置。 | 对象 |
|
| 镜像集的额外镜像配置。 | 对象数组 Example: additionalImages: - name: registry.redhat.io/ubi8/ubi:latest
|
|
| 要 mirror 的镜像的标签或摘要。 |
字符串示例: |
|
| 用于阻止镜像(tag)或摘要(SHA)的镜像列表。 |
字符串数组示例: |
|
| 镜像集的 Operator 配置。 | 对象数组 Example: operators:
- catalog: registry.redhat.io/redhat/redhat-operator-index:4.20
packages:
- name: elasticsearch-operator
minVersion: '2.4.0'
|
|
| 包括在镜像集中的 Operator 目录。 |
字符串示例: |
|
|
为 |
布尔值,默认值为 |
|
| Operator 软件包配置。 | 对象数组 Example: operators:
- catalog: registry.redhat.io/redhat/redhat-operator-index:4.20
packages:
- name: elasticsearch-operator
minVersion: '5.2.3-31'
|
|
| 镜像集中要包含的 Operator 软件包名称。 |
字符串示例: |
|
| Operator 软件包频道配置 | 对象 |
|
| Operator 频道名称(软件包中唯一)要包括在镜像集中。 |
字符串示例: |
|
| Operator 镜像的最高版本,在其中存在所有频道。 |
字符串示例: |
|
| Operator 的最低版本,用于镜像存在的所有频道 |
字符串示例: |
|
| Operator 最高版本,可跨所有存在的频道进行镜像。 |
字符串示例: |
|
| Operator 的最低版本,用于镜像存在的所有频道。 |
字符串示例: |
|
| 将引用的目录镜像为的替代名称和可选命名空间层次结构 |
字符串示例: |
|
| 用于完成 oc-mirror 插件 v2 生成的 catalogSource 自定义资源的模板的路径。 |
字符串示例: |
|
|
附加到 |
字符串示例: |
11.3.4.1.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 的最低版本。 |
字符串示例: |
11.3.5. 镜像(mirror)到镜像(mirror)的镜像 复制链接链接已复制到粘贴板!
您可以使用 oc-mirror 插件将镜像直接设置为在镜像设置过程中可访问的目标镜像 registry。
先决条件
- 您可以通过访问互联网来获取所需的容器镜像。
-
已安装 OpenShift CLI(
oc)。 -
已安装
oc-mirrorCLI 插件。 - 已创建镜像设置配置文件。
流程
运行以下命令,将指定镜像设置配置中的镜像镜像到指定的 registry:
oc-mirror --config imageset-config.yaml --workspace file://<emphasis><v2_workspace></emphasis> \ docker://<emphasis><remote_registry></emphasis> --v2
$ oc-mirror --config imageset-config.yaml --workspace file://<emphasis><v2_workspace></emphasis> \1 docker://<emphasis><remote_registry></emphasis> --v22 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Rendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalogRendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您必须使用
ImageDigestMirrorSetYAML 文件作为 MicroShift 中手动配置 CRI-O 的参考内容。您不能将资源直接应用到 MicroShift 节点。
验证
运行以下命令,列出
cluster-resources子目录的内容:ls <v2_workspace>/working-dir/cluster-resources/
$ ls <v2_workspace>/working-dir/cluster-resources/1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 <v2_workspace > 替换为您要为镜像进程存储自定义资源的目录。
后续步骤
-
转换
ImageDigestMirrorSetYAML 内容,用于手动配置 CRI-O。 - 如果需要,从 mirror 中将镜像同步到磁盘,以在断开连接的环境或离线环境中使用。
故障排除
11.3.6. 配置 CRI-O,为 Operator 使用 registry 镜像 复制链接链接已复制到粘贴板!
您必须将使用 oc-mirror 插件创建的 ImageDigestMirrorSet YAML 文件转换为与 MicroShift 使用的 CRI-O 容器运行时配置兼容的格式。
先决条件
-
已安装 OpenShift CLI (
oc)。 - 已安装 Operator Lifecycle Manager (OLM)。
- 已安装 oc-mirror 插件。
-
已安装
yq二进制文件。 -
ImageDigestMirrorSet和CatalogSourceYAML 文件在cluster-resources子目录中提供。
流程
运行以下命令,确认
ImageDigestMirrorSetYAML 文件的内容:cat <v2_workspace>/working-dir/cluster-resources/imagedigestmirrorset.yaml
$ cat <v2_workspace>/working-dir/cluster-resources/imagedigestmirrorset.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 <v2_workspace > 替换为您在生成镜像资源时使用的目录名称。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将
imagedigestmirrorset.yaml转换为可用于 CRI-O 配置的格式:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[[registry]] prefix = "registry.redhat.io/amq7" location = "registry.example.com/amq7" mirror-by-digest-only = true insecure = true[[registry]] prefix = "registry.redhat.io/amq7" location = "registry.example.com/amq7" mirror-by-digest-only = true insecure = trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将输出添加到
/etc/containers/registries.conf.d/目录中的 CRI-O 配置文件中:crio-config.yaml镜像配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定镜像 registry 服务器的主机名和端口,如
microshift-quay:8443。
使用以下命令重启 MicroShift 来应用 CRI-O 配置更改:
sudo systemctl restart crio
$ sudo systemctl restart crioCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3.7. 安装使用 oc-mirror 插件创建的自定义目录 复制链接链接已复制到粘贴板!
将镜像设置为镜像 registry 后,您必须将生成的 CatalogSource 自定义资源(CR)应用到节点。Operator Lifecycle Manager (OLM)使用 CatalogSource CR 来检索有关镜像 registry 中可用 Operator 的信息。然后,您必须创建并应用订阅 CR 来订阅您的自定义目录。
先决条件
- 您已将镜像设置为 registry 镜像。
- 您可以将镜像引用信息添加到 CRI-O 容器运行时配置中。
流程
运行以下命令,应用来自结果目录中的目录源配置文件来创建目录源对象:
oc apply -f ./<v2_workspace>/working-dir/cluster-resources/catalogSource-cs-redhat-catalog.yaml
$ oc apply -f ./<v2_workspace>/working-dir/cluster-resources/catalogSource-cs-redhat-catalog.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 <v2_workspace > 替换为您要为镜像进程存储自定义资源的目录。
输出示例
catalogsource.operators.coreos.com/cs-redhat-catalog created
catalogsource.operators.coreos.com/cs-redhat-catalog createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请参考以下示例文件:
目录源配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定全局命名空间。将
metadata.namespace设置为openshift-marketplace可让目录引用所有命名空间中的目录。任何命名空间中的订阅可以引用在openshift-marketplace命名空间中创建的目录。
运行以下命令验证
CatalogSource资源是否已成功安装:oc get catalogsource --all-namespaces
$ oc get catalogsource --all-namespacesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME DISPLAY TYPE PUBLISHER AGE openshift-marketplace certified-operators Certified Operators grpc Red Hat 37m openshift-marketplace community-operators Community Operators grpc Red Hat 37m openshift-marketplace redhat-marketplace Red Hat Marketplace grpc Red Hat 37m openshift-marketplace redhat-catalog Red Hat Catalog grpc Red Hat 37m
NAMESPACE NAME DISPLAY TYPE PUBLISHER AGE openshift-marketplace certified-operators Certified Operators grpc Red Hat 37m openshift-marketplace community-operators Community Operators grpc Red Hat 37m openshift-marketplace redhat-marketplace Red Hat Marketplace grpc Red Hat 37m openshift-marketplace redhat-catalog Red Hat Catalog grpc Red Hat 37mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令验证目录源是否正在运行:
oc get pods -n openshift-marketplace
$ oc get pods -n openshift-marketplaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE cs-redhat-catalog-4227b 2/2 Running 0 2m5s
NAME READY STATUS RESTARTS AGE cs-redhat-catalog-4227b 2/2 Running 0 2m5sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SubscriptionCR,类似以下示例:SubscriptionCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用 Subscription CR 配置:
oc apply -f ./<subscription_cr.yaml>
$ oc apply -f ./<subscription_cr.yaml>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在 < subscription_cr.yaml > 中指定您的订阅名称,如
amq-broker-subscription-cr.yaml。
输出示例
subscription.operators.coreos.com/amq-broker created
subscription.operators.coreos.com/amq-broker createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow