11.3. 使用 oc-mirror 插件创建自定义 Operator 目录


您可以使用广泛可用的 Operator 创建自定义目录,并使用 oc-mirror OpenShift CLI (oc)插件镜像它们。

您可以过滤目录并删除镜像以获取特定的 Operator,并使用 oc-mirror OpenShift CLI (oc)插件镜像它们。您还可以在断开连接的设置中使用 Operator,或嵌入在 Red Hat Enterprise Linux (RHEL)镜像中。

  • 要了解更多有关如何配置系统以进行镜像的信息,请遵循以下"添加资源"部分中的链接。
  • 如果您准备好从红帽提供的 Operator 目录部署 Operator,进行镜像,或者将其嵌入到 RHEL 镜像中,请从以下部分开始,使用 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 插件。

流程

  1. 运行以下命令,获取红帽提供的 Operator 目录列表以过滤:

    $ oc mirror list operators --version 4.20 --catalogs
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,获取 Red Hat Operator 目录中的 Operator 列表:

    $ oc mirror list operators <--catalog=<catalog_source>> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定目录源,如 registry.redhat.io/redhat/redhat-operator-index:v4.20quay.io/operatorhubio/catalog:latest
  3. 选择一个 Operator。本例使用 amq-broker-rhel9 Operator。
  4. 可选: 要检查您要过滤的 Operator 的频道和版本,请输入以下命令:

    1. 运行以下命令获取频道列表:

      $ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.20 --package=amq-broker-rhel9
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,获取频道中的版本列表:

      $ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.20 --package=amq-broker-rhel9 --channel=7.13.x
      Copy to Clipboard Toggle word wrap

后续步骤

  • 使用此流程中收集的信息创建和编辑镜像设置配置文件。
  • 将镜像从转换的镜像设置配置文件镜像到镜像 registry 或磁盘。

11.3.4. 创建镜像设置配置文件

您必须创建一个 ImageSetConfiguration YAML 文件。此镜像设置配置文件指定用于镜像的 Operator 以及 oc-mirror 插件的配置设置。编辑镜像设置配置文件的内容,以便条目与 MicroShift 和您计划使用的 Operator 兼容。

注意

oc mirror v2 使用缓存系统而不是元数据。缓存系统可防止在单一步骤失败时需要启动整个镜像过程。相反,您可以对失败步骤进行故障排除,进程不会在失败前重新镜像存在的镜像。

先决条件

流程

  1. 使用以下示例作为指南,为 MicroShift 创建和编辑 ImageSetConfiguration YAML:

    编辑的 MicroShift 镜像设置配置文件示例

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v2alpha1
    mirror:
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.20 
    1
    
        packages:
        - name: amq-broker-rhel9 
    2
    
          channels:
          - name: 7.13.x 
    3
    
      additionalImages: 
    4
    
       - name: quay.io/rh_ee_aguidi/multi-platform-container:latest
       - name: quay.io/rh_ee_aguidi/empty-image:latest
    Copy to Clipboard Toggle word wrap

    1
    将 Operator 目录设置为从中检索镜像。
    2
    指定要包含在镜像集中的 Operator 软件包。删除此字段以检索目录中的所有软件包。
    3
    仅指定要包含在镜像集中的 Operator 软件包的某些频道。即使您没有使用该频道中的捆绑包,还必须始终包含 Operator 软件包的默认频道。您可以运行以下命令来找到默认频道:oc mirror list operators --catalog=<catalog_name> --package=<package_name>
    4
    指定要在镜像集中包含的任何其他镜像。如果您不需要指定其他镜像,请删除此字段。
    重要

    MicroShift 不支持 platform 字段、相关字段和 Helm。

  2. 将更新的文件保存为 ImageSetConfiguration.yaml

后续步骤

  • 使用 oc-mirror 插件将镜像直接设置为目标镜像 registry。
  • 配置 CRI-O。
  • 将目录源应用到您的节点。

11.3.4.1. oc-mirror 插件 v2 的 ImageSet 配置参数

oc-mirror 插件 v2 需要一个镜像设置配置文件,该文件定义哪些镜像要镜像(mirror)。下表列出了 ImageSetConfiguration 资源的可用参数。

注意

使用 minVersionmaxVersion 属性过滤特定 Operator 版本范围可能会导致多个频道头错误。错误信息将显示有多个频道头。这是因为在应用过滤器时,Operator 的更新图会被截断。

OLM 要求每个 Operator 频道都包含组成一个更新图表的版本,它只有一个端点,即 Operator 的最新版本。在应用图形的过滤器范围时,可以进入两个或多个独立图形或具有多个端点的图形。

要避免这个错误,请不要过滤 Operator 的最新版本。如果您仍然遇到错误,具体取决于 Operator,则必须增加 maxVersion 属性,或者 minVersion 属性必须减少。因为每个 Operator 图都可以不同,所以您可能需要调整这些值,直到错误解决为止。

Expand
表 11.2. ImageSetConfiguration 参数
参数描述

apiVersion

ImageSetConfiguration 内容的 API 版本。

字符串示例: mirror.openshift.io/v2alpha1

mirror

镜像集的配置。

对象

mirror.additionalImages

镜像集的额外镜像配置。

对象数组

Example:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

mirror.additionalImages.name

要 mirror 的镜像的标签或摘要。

字符串示例:registry.redhat.io/ubi8/ubi:latest

mirror.blockedImages

用于阻止镜像(tag)或摘要(SHA)的镜像列表。

字符串数组示例:docker.io/library/alpine

mirror.operators

镜像集的 Operator 配置。

对象数组

Example:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.20
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

mirror.operators.catalog

包括在镜像集中的 Operator 目录。

字符串示例: registry.redhat.io/redhat/redhat-operator-index:v4.15

mirror.operators.full

true 时,下载完整的目录、Operator 软件包或 Operator 频道。

布尔值,默认值为 false

mirror.operators.packages

Operator 软件包配置。

对象数组

Example:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.20
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

mirror.operators.packages.name

镜像集中要包含的 Operator 软件包名称。

字符串示例:elasticsearch-operator

mirror.operators.packages.channels

Operator 软件包频道配置

对象

mirror.operators.packages.channels.name

Operator 频道名称(软件包中唯一)要包括在镜像集中。

字符串示例:faststable-v4.15

mirror.operators.packages.channels.maxVersion

Operator 镜像的最高版本,在其中存在所有频道。

字符串示例:5.2.3-31

mirror.operators.packages.channels.minVersion

Operator 的最低版本,用于镜像存在的所有频道

字符串示例:5.2.3-31

mirror.operators.packages.maxVersion

Operator 最高版本,可跨所有存在的频道进行镜像。

字符串示例:5.2.3-31

mirror.operators.packages.minVersion

Operator 的最低版本,用于镜像存在的所有频道。

字符串示例:5.2.3-31

mirror.operators.targetCatalog

将引用的目录镜像为的替代名称和可选命名空间层次结构

字符串示例:my-namespace/my-operator-catalog

mirror.operators.targetCatalogSourceTemplate

用于完成 oc-mirror 插件 v2 生成的 catalogSource 自定义资源的模板的路径。

字符串示例:/tmp/catalog-source_template.yaml 模板文件示例:

apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: discarded
  namespace: openshift-marketplace
spec:
  image: discarded
  sourceType: grpc
  updateStrategy:
    registryPoll:
      interval: 30m0s
Copy to Clipboard Toggle word wrap

mirror.operators.targetTag

附加到 targetNametargetCatalog 的替代标签。

字符串示例:v1

11.3.4.1.1. DeleteImageSetConfiguration 参数

要将删除镜像与 oc-mirror 插件 v2 搭配使用,您必须使用 DeleteImageSetConfiguration.yaml 配置文件来定义要从镜像 registry 中删除哪些镜像。下表列出了 DeleteImageSetConfiguration 资源的可用参数。

Expand
表 11.3. DeleteImageSetConfiguration 参数
参数描述

apiVersion

DeleteImageSetConfiguration 内容的 API 版本。

字符串示例: mirror.openshift.io/v2alpha1

delete

镜像集要删除的配置。

对象

delete.additionalImages

删除镜像集的额外镜像配置。

对象数组示例:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

delete.additionalImages.name

要删除的镜像的标签或摘要。

字符串示例:registry.redhat.io/ubi8/ubi:latest

delete.operators

删除镜像集的 Operator 配置。

对象数组示例:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

delete.operators.catalog

要在 delete 镜像集中包含的 Operator 目录。

字符串示例: registry.redhat.io/redhat/redhat-operator-index:v4.15

delete.operators.full

如果为 true,则删除完整目录、Operator 软件包或 Operator 频道。

布尔值,默认为 false

delete.operators.packages

Operator 软件包配置

对象数组示例:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

delete.operators.packages.name

要在 delete 镜像集中包含的 Operator 软件包名称。

字符串示例:elasticsearch-operator

delete.operators.packages.channels

Operator 软件包频道配置

对象

delete.operators.packages.channels.name

Operator 频道名称(在软件包中是唯一的)包括在 delete 镜像集中。

字符串示例: faststable-v4.15

delete.operators.packages.channels.maxVersion

在所选频道中删除的 Operator 的最高版本。

字符串示例:5.2.3-31

delete.operators.packages.channels.minVersion

在存在的选择中删除 Operator 的最低版本。

字符串示例:5.2.3-31

delete.operators.packages.maxVersion

在存在的所有频道中删除 Operator 的最高版本。

字符串示例:5.2.3-31

delete.operators.packages.minVersion

在存在的所有频道中删除 Operator 的最低版本。

字符串示例:5.2.3-31

11.3.5. 镜像(mirror)到镜像(mirror)的镜像

您可以使用 oc-mirror 插件将镜像直接设置为在镜像设置过程中可访问的目标镜像 registry。

先决条件

  • 您可以通过访问互联网来获取所需的容器镜像。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 oc-mirror CLI 插件。
  • 已创建镜像设置配置文件。

流程

  • 运行以下命令,将指定镜像设置配置中的镜像镜像到指定的 registry:

    $ oc-mirror --config imageset-config.yaml --workspace file://<emphasis><v2_workspace></emphasis> \
    1
    
      docker://<emphasis><remote_registry></emphasis> --v2 
    2
    Copy to Clipboard Toggle word wrap
    1
    您必须将-- workspace 标志用于 mirror-to-mirror 进程。将 < v2_workspace > 替换为您要为镜像进程存储自定义资源的目录。
    2
    <remote_registry > 替换为要镜像设置文件的 registry 名称。registry 必须以 docker:// 开头。如果为镜像 registry 指定顶层命名空间,则必须在后续执行时使用此命名空间。

    输出示例

    Rendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalog
    Copy to Clipboard Toggle word wrap

    重要

    您必须使用 ImageDigestMirrorSet YAML 文件作为 MicroShift 中手动配置 CRI-O 的参考内容。您不能将资源直接应用到 MicroShift 节点。

验证

  1. 运行以下命令,列出 cluster-resources 子目录的内容:

    $ ls <v2_workspace>/working-dir/cluster-resources/ 
    1
    Copy to Clipboard Toggle word wrap
    1
    <v2_workspace > 替换为您要为镜像进程存储自定义资源的目录。

后续步骤

  • 转换 ImageDigestMirrorSet YAML 内容,用于手动配置 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 二进制文件。
  • ImageDigestMirrorSetCatalogSource YAML 文件在 cluster-resources 子目录中提供。

流程

  1. 运行以下命令,确认 ImageDigestMirrorSet YAML 文件的内容:

    $ cat <v2_workspace>/working-dir/cluster-resources/imagedigestmirrorset.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <v2_workspace > 替换为您在生成镜像资源时使用的目录名称。

    输出示例

    apiVersion: config.openshift.io/v1
    kind: ImageDigestMirrorSet
    metadata:
      labels:
        operators.openshift.org/catalog: "true"
      name: operator-0
    spec:
      imageDigestMirrors:
      - mirrors:
        - registry.example.com/amq7
        source: registry.redhat.io/amq7
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,将 imagedigestmirrorset.yaml 转换为可用于 CRI-O 配置的格式:

    yq '.spec.imageDigestMirrors[] as $item ireduce([]; . + [{"mirror": $item.mirrors[], "source": ($item | .source)}]) | .[] |
      "[[registry]]
          prefix = \"" + .source + "\"
          location = \"" + .mirror + "\"
          mirror-by-digest-only = true
          insecure = true
          "' ./mirror1/working-dir/cluster-resources/imagedigestmirrorset.yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    [[registry]]
          prefix = "registry.redhat.io/amq7"
          location = "registry.example.com/amq7"
          mirror-by-digest-only = true
          insecure = true
    Copy to Clipboard Toggle word wrap

  3. 将输出添加到 /etc/containers/registries.conf.d/ 目录中的 CRI-O 配置文件中:

    crio-config.yaml 镜像配置文件示例

    [[registry]]
          prefix = "registry.redhat.io/amq7"
          location = "registry.example.com/amq7"
          mirror-by-digest-only = true
          insecure = true
    
    [[registry]]
        prefix = ""
        location = "quay.io"
        mirror-by-digest-only = true
    [[registry.mirror]]
        location = "<registry_host>:<port>" 
    1
    
        insecure = false
    Copy to Clipboard Toggle word wrap

    1
    指定镜像 registry 服务器的主机名和端口,如 microshift-quay:8443
  4. 使用以下命令重启 MicroShift 来应用 CRI-O 配置更改:

    $ sudo systemctl restart crio
    Copy to Clipboard Toggle word wrap

将镜像设置为镜像 registry 后,您必须将生成的 CatalogSource 自定义资源(CR)应用到节点。Operator Lifecycle Manager (OLM)使用 CatalogSource CR 来检索有关镜像 registry 中可用 Operator 的信息。然后,您必须创建并应用订阅 CR 来订阅您的自定义目录。

先决条件

  • 您已将镜像设置为 registry 镜像。
  • 您可以将镜像引用信息添加到 CRI-O 容器运行时配置中。

流程

  1. 运行以下命令,应用来自结果目录中的目录源配置文件来创建目录源对象:

    $ oc apply -f ./<v2_workspace>/working-dir/cluster-resources/catalogSource-cs-redhat-catalog.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <v2_workspace > 替换为您要为镜像进程存储自定义资源的目录。

    输出示例

    catalogsource.operators.coreos.com/cs-redhat-catalog created
    Copy to Clipboard Toggle word wrap

  2. 请参考以下示例文件:

    目录源配置文件示例

    apiVersion: operators.coreos.com/v2alpha1
    kind: CatalogSource
    metadata:
      name: redhat-catalog
      namespace: openshift-marketplace 
    1
    
    spec:
      sourceType: grpc
      image: registry.example.com/redhat/redhat-catalog:v4.20
      updateStrategy:
        registryPoll:
          interval: 60m
    Copy to Clipboard Toggle word wrap

    1
    指定全局命名空间。将 metadata.namespace 设置为 openshift-marketplace 可让目录引用所有命名空间中的目录。任何命名空间中的订阅可以引用在 openshift-marketplace 命名空间中创建的目录。
  3. 运行以下命令验证 CatalogSource 资源是否已成功安装:

    $ oc get catalogsource --all-namespaces
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    Copy to Clipboard Toggle word wrap

  4. 使用以下命令验证目录源是否正在运行:

    $ oc get pods -n openshift-marketplace
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                             READY   STATUS    RESTARTS   AGE
    cs-redhat-catalog-4227b   2/2     Running   0          2m5s
    Copy to Clipboard Toggle word wrap

  5. 创建一个 Subscription CR,类似以下示例:

    Subscription CR 示例

    apiVersion: operators.coreos.com/v2alpha1
    kind: Subscription
    metadata:
      name: amq-broker
      namespace: openshift-operators
    spec:
      channel: 7.13.x
      name: amq-broker-rhel9
      source: cs-redhat-catalog
      sourceNamespace: openshift-marketplace
    Copy to Clipboard Toggle word wrap

  6. 运行以下命令来应用 Subscription CR 配置:

    $ oc apply -f ./<subscription_cr.yaml> 
    1
    Copy to Clipboard Toggle word wrap
    1
    在 < subscription_cr.yaml > 中指定您的订阅名称,如 amq-​broker-subscription-cr.yaml

    输出示例

    subscription.operators.coreos.com/amq-broker created
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat