4.4. 创建目录


重要

Operator Lifecycle Manager (OLM) v1 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

目录维护人员可以使用基于文件的目录格式创建新目录,以用于 OpenShift Container Platform 上的 Operator Lifecycle Manager (OLM) v1。

重要

目前,Operator Lifecycle Manager (OLM) v1 无法验证私有 registry,如红帽提供的 Operator 目录。这是个已知问题。因此,依赖 Red Hat Operator 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)

4.4.1. 创建基于文件的目录镜像

您可以使用 opm CLI 创建一个目录镜像,它使用纯文本(基于文件的目录)格式(JSON 或 YAML),替换已弃用的 SQLite 数据库格式。

先决条件

  • 已安装 opm CLI。
  • 您有 podman 版本 1.9.3+。
  • 已构建捆绑包镜像并推送到支持 Docker v2-2 的 registry。

流程

  1. 初始化目录:

    1. 运行以下命令,为目录创建一个目录:

      $ mkdir <catalog_dir>
    2. 运行 opm generate dockerfile 命令生成可构建目录镜像的 Dockerfile:

      $ opm generate dockerfile <catalog_dir> \
          -i registry.redhat.io/openshift4/ose-operator-registry-rhel9:v4.17 1
      1
      使用 -i 标志指定官方红帽基础镜像,否则 Dockerfile 使用默认的上游镜像。

      Dockerfile 必须与您在上一步中创建的目录目录位于相同的父目录中:

      目录结构示例

      . 1
      ├── <catalog_dir> 2
      └── <catalog_dir>.Dockerfile 3

      1
      父目录
      2
      Catalog 目录
      3
      opm generate dockerfile 命令生成的 Dockerfile
    3. 运行 opm init 命令,使用 Operator 的软件包定义填充目录:

      $ opm init <operator_name> \ 1
          --default-channel=preview \ 2
          --description=./README.md \ 3
          --icon=./operator-icon.svg \ 4
          --output yaml \ 5
          > <catalog_dir>/index.yaml 6
      1
      operator 或 package, name
      2
      在未指定时该订阅默认到的频道
      3
      Operator 的 README.md 或者其它文档的路径
      4
      到 Operator 图标的路径
      5
      输出格式:JSON 或 YAML
      6
      创建目录配置文件的路径

      此命令在指定的目录配置文件中生成 olm.package 声明性配置 blob。

  2. 运行 opm render 命令向目录添加捆绑包:

    $ opm render <registry>/<namespace>/<bundle_image_name>:<tag> \ 1
        --output=yaml \
        >> <catalog_dir>/index.yaml 2
    1
    拉取捆绑包镜像的 spec
    2
    目录配置文件的路径
    注意

    频道必须至少包含一个捆绑包。

  3. 为捆绑包添加频道条目。例如,根据您的规格修改以下示例,并将其添加到 <catalog_dir>/index.yaml 文件中:

    频道条目示例

    ---
    schema: olm.channel
    package: <operator_name>
    name: preview
    entries:
      - name: <operator_name>.v0.1.0 1

    1
    确定在 <operator_name> 之后、版本 v 中包含句点 (.)。否则,条目无法传递 opm validate 命令。
  4. 验证基于文件的目录:

    1. 针对目录目录运行 opm validate 命令:

      $ opm validate <catalog_dir>
    2. 检查错误代码是否为 0:

      $ echo $?

      输出示例

      0

  5. 运行 podman build 命令构建目录镜像:

    $ podman build . \
        -f <catalog_dir>.Dockerfile \
        -t <registry>/<namespace>/<catalog_image_name>:<tag>
  6. 将目录镜像推送到 registry:

    1. 如果需要,运行 podman login 命令与目标 registry 进行身份验证:

      $ podman login <registry>
    2. 运行 podman push 命令来推送目录镜像:

      $ podman push <registry>/<namespace>/<catalog_image_name>:<tag>

其他资源

4.4.2. 更新或过滤基于文件的目录镜像

您可以使用 opm CLI 更新或过滤使用基于文件的目录格式的目录镜像。通过提取现有目录镜像的内容,您可以根据需要修改目录,例如:

  • 添加软件包
  • 删除软件包
  • 更新现有软件包条目
  • 详细说明每个软件包、频道和捆绑包的弃用信息

然后,您可以将镜像重新构建为目录的更新版本。

注意

或者,如果您已在镜像 registry 上已有目录镜像,您可以使用 oc-mirror CLI 插件在将其镜像到目标 registry 时自动从该目录镜像更新的源版本中修剪任何删除的镜像。

有关 oc-mirror 插件和此用例的更多信息,请参阅"更新您的镜像 registry 内容"部分,特别是"使用 oc-mirror 插件为断开连接的安装镜像镜像"部分。

先决条件

  • 在您的工作站上有以下内容:

    • opm CLI。
    • podman 版本 1.9.3+。
    • 基于文件的目录镜像。
    • 最近在与此目录相关的工作站上初始化的目录结构。

      如果您没有初始化的 catalog 目录,请创建目录并生成 Dockerfile。如需更多信息,请参阅"创建基于文件的目录镜像"中的"初始化目录"步骤。

流程

  1. 以 YAML 格式将目录镜像的内容提取到 catalog 目录中的 index.yaml 文件中:

    $ opm render <registry>/<namespace>/<catalog_image_name>:<tag> \
        -o yaml > <catalog_dir>/index.yaml
    注意

    或者,您可以使用 -o json 标志以 JSON 格式输出。

  2. 将生成的 index.yaml 文件的内容修改为您的规格:

    重要

    在目录中发布捆绑包后,假设您安装了其中一个用户。确保之前发布目录中的所有捆绑包都具有到当前或更新频道头的更新路径,以避免安装该版本的用户。

    • 要添加 Operator,请按照"创建基于文件的目录镜像"过程中创建软件包、捆绑包和频道条目的步骤进行操作。
    • 要删除 Operator,请删除与软件包相关的 olm.packageolm.channelolm.bundle blob 的集合。以下示例显示了一个需要删除的集合,才能从目录中删除 example-operator 软件包:

      例 4.12. 删除条目示例

      ---
      defaultChannel: release-2.7
      icon:
        base64data: <base64_string>
        mediatype: image/svg+xml
      name: example-operator
      schema: olm.package
      ---
      entries:
      - name: example-operator.v2.7.0
        skipRange: '>=2.6.0 <2.7.0'
      - name: example-operator.v2.7.1
        replaces: example-operator.v2.7.0
        skipRange: '>=2.6.0 <2.7.1'
      - name: example-operator.v2.7.2
        replaces: example-operator.v2.7.1
        skipRange: '>=2.6.0 <2.7.2'
      - name: example-operator.v2.7.3
        replaces: example-operator.v2.7.2
        skipRange: '>=2.6.0 <2.7.3'
      - name: example-operator.v2.7.4
        replaces: example-operator.v2.7.3
        skipRange: '>=2.6.0 <2.7.4'
      name: release-2.7
      package: example-operator
      schema: olm.channel
      ---
      image: example.com/example-inc/example-operator-bundle@sha256:<digest>
      name: example-operator.v2.7.0
      package: example-operator
      properties:
      - type: olm.gvk
        value:
          group: example-group.example.io
          kind: MyObject
          version: v1alpha1
      - type: olm.gvk
        value:
          group: example-group.example.io
          kind: MyOtherObject
          version: v1beta1
      - type: olm.package
        value:
          packageName: example-operator
          version: 2.7.0
      - type: olm.bundle.object
        value:
          data: <base64_string>
      - type: olm.bundle.object
        value:
          data: <base64_string>
      relatedImages:
      - image: example.com/example-inc/example-related-image@sha256:<digest>
        name: example-related-image
      schema: olm.bundle
      ---
    • 要为 Operator 添加或更新弃用信息,请确保在与软件包的 index.yaml 文件相同的目录中有一个 deprecations.yaml 文件。有关 deprecations.yaml 文件格式的详情,请参考 "olm.deprecations schema"。
  3. 保存您的更改。
  4. 验证目录:

    $ opm validate <catalog_dir>
  5. 重建目录:

    $ podman build . \
        -f <catalog_dir>.Dockerfile \
        -t <registry>/<namespace>/<catalog_image_name>:<tag>
  6. 将更新的目录镜像推送到 registry:

    $ podman push <registry>/<namespace>/<catalog_image_name>:<tag>

验证

  1. 在 Web 控制台中,进入 Administration Cluster Settings Configuration 页面中的 OperatorHub 配置资源。
  2. 添加目录源或更新现有目录源,以便将 pull spec 用于更新的目录镜像。

    如需更多信息,请参阅本节的"添加资源"中的"在集群中添加目录源"。

  3. 在目录源处于 READY 状态后,进入 Operators OperatorHub 页面,检查您所做的更改是否反映在 Operator 列表中。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.