10.4. 更新 Operator 目录镜像


集群管理员将 OperatorHub 配置为使用自定义 Operator 目录镜像后,管理员可通过红帽的 App Registry 目录获得相应的更新,使其 OpenShift Container Platform 集群与最新的 Operator 保持一致。这可以通过构建和推送一个新的 Operator 目录镜像,然后将现有的 CatalogSource 的 spec.image 参数替换为新的镜像摘要。

在本例中,该流程假设已配置了自定义 redhat-operators 目录镜像,以便与 OperatorHub 搭配使用。

先决条件

  • 具有无限网络访问权限的 Linux 工作站 [1]
  • oc 版本 4.3.5+
  • podman 1.4.4+ 版
  • 访问支持 Docker v2-2 的镜像(mirror)registry
  • OperatorHub 配置为使用自定义目录镜像
  • 如果您正在使用私有 registry,请将 REG_CREDS 环境变量设置为到 registry 凭证的文件路径。例如,对于 podman CLI:

    $ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json
    Copy to Clipboard Toggle word wrap
  • 如果您正在使用 quay.io 帐户可访问的私有命名空间,您必须设置 Quay 身份验证令牌。使用您的 quay.io 凭证对登录 API 发出请求,从而设置用于 --auth-token 标志的 AUTH_TOKEN 环境变量:

    $ AUTH_TOKEN=$(curl -sH "Content-Type: application/json" \
        -XPOST https://quay.io/cnr/api/v1/users/login -d '
        {
            "user": {
                "username": "'"<quay_username>"'",
                "password": "'"<quay_password>"'"
            }
        }' | jq -r '.token')
    Copy to Clipboard Toggle word wrap

流程

  1. 在没有网络访问限制的工作站中,与目标镜像(mirror) registry 进行身份验证:

    $ podman login <registry_host_name>
    Copy to Clipboard Toggle word wrap

    还可使用 registry.redhat.io 验证,以便在构建期间拉取基础镜像:

    $ podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap
  2. 根据 quay.io 中的 redhat-operators 目录构建一个新的目录镜像,进行标记并将其推送到您的镜像(mirror) registry:

    $ oc adm catalog build \
        --appregistry-org redhat-operators \
    1
    
        --from=registry.redhat.io/openshift4/ose-operator-registry:v4.3 \
    2
    
        --filter-by-os="linux/amd64" \
    3
    
        --to=<registry_host_name>:<port>/olm/redhat-operators:v2 \
    4
    
        [-a ${REG_CREDS}] \
    5
    
        [--insecure] \
    6
    
        [--auth-token "${AUTH_TOKEN}"] 
    7
    
    
    INFO[0013] loading Bundles                               dir=/var/folders/st/9cskxqs53ll3wdn434vw4cd80000gn/T/300666084/manifests-829192605
    ...
    Pushed sha256:f73d42950021f9240389f99ddc5b0c7f1b533c054ba344654ff1edaf6bf827e3 to example_registry:5000/olm/redhat-operators:v2
    Copy to Clipboard Toggle word wrap
    1
    从 App Registry 实例中拉取的机构(命名空间)。
    2
    使用与目标 OpenShift Container Platform 集群主版本和次版本匹配的标签,将 --from 设置为 ose-operator-registry 基础镜像。
    3
    --filter-by-os 设置为用于基本镜像的操作系统和架构,该镜像必须与目标 OpenShift Container Platform 集群匹配。有效值是 linux/amd64linux/ppc64lelinux/s390x
    4
    为您的目录镜像命名并包含一个标签,例如: v2 ,因为它是更新的目录。
    5
    可选:如果需要,指定 registry 凭证文件的位置。
    6
    可选:如果您不想为目标 registry 配置信任,请添加 --insecure 标志。
    7
    可选:如果使用其他不公开的应用程序 registry 目录,则需要指定 Quay 身份验证令牌。
  3. 将目录镜像 (mirror) 到目标 registry。以下 oc adm catalog mirror 命令提取自定义 Operator catalog 镜像的内容,以生成镜像 (mirror) 和把镜像(image)镜像 (mirror)到 registry 所需的清单:

    $ oc adm catalog mirror \
        <registry_host_name>:<port>/olm/redhat-operators:v2 \
    1
    
        <registry_host_name>:<port> \
        [-a ${REG_CREDS}] \
    2
    
        [--insecure] \
    3
    
        [--filter-by-os="<os>/<arch>"] 
    4
    
    
    mirroring ...
    Copy to Clipboard Toggle word wrap
    1
    指定新 Operator 目录镜像。
    2
    可选:如果需要,指定 registry 凭证文件的位置。
    3
    可选:如果您不想为目标 registry 配置信任,请添加 --insecure 标志。
    4
    可选: 因为目录可能会引用支持多个架构和操作系统的镜像,您可以根据架构和操作系统进行过滤来只对匹配的镜像进行镜像(mirror)。有效值是 linux/amd64linux/ppc64lelinux/s390x
  4. 应用新生成的清单:

    $ oc apply -f ./redhat-operators-manifests
    Copy to Clipboard Toggle word wrap
    重要

    您可能不需要应用 imageContentSourcePolicy.yaml 清单。对文件进行一个 diff 操作来决定是否需要改变。

  5. 更新 CatalogSource 对象来引用您的目录镜像。

    1. 如果您有此 CatalogSource 的原始 catalogsource.yaml 文件:

      1. 编辑 catalogsource.yaml 文件,在 spec.image 字段中引用新目录镜像 :

        apiVersion: operators.coreos.com/v1alpha1
        kind: CatalogSource
        metadata:
          name: my-operator-catalog
          namespace: openshift-marketplace
        spec:
          sourceType: grpc
          image: <registry_host_name>:<port>/olm/redhat-operators:v2 
        1
        
          displayName: My Operator Catalog
          publisher: grpc
        Copy to Clipboard Toggle word wrap
        1
        指定新 Operator 目录镜像。
      2. 使用更新的文件替换 CatalogSource 对象:

        $ oc replace -f catalogsource.yaml
        Copy to Clipboard Toggle word wrap
    2. 或者,使用以下命令编辑 CatalogSource,在 spec.image 参数中引用您的新目录镜像 :

      $ oc edit catalogsource <catalog_source_name> -n openshift-marketplace
      Copy to Clipboard Toggle word wrap

现在,OpenShift Container Platform 集群上的 OperatorHub 页中应可以提供更新的 Operator。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat