×

OpenShift Dedicated 4.8 及更高版本中不再支持 Operator 的旧版包清单格式。如果您有一个最初使用包清单格式创建的 Operator 项目,您可以使用 Operator SDK 将该项目迁移到 bundle 格式。从 OpenShift Dedicated 4.6 开始,bundle 格式是 Operator Lifecycle Manager (OLM) 的首选打包格式。

包括与 Operator 项目相关的脚手架和测试工具在内的 Operator SDK CLI 工具的 Red Hat 支持版本已弃用,并计划在未来版本的 OpenShift Dedicated 中删除。Red Hat 将在此版本的生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Dedicated 版本中删除。

不建议使用 Red Hat 支持版本的 Operator SDK 创建新的 Operator 项目。拥有现有 Operator 项目的 Operator 作者可以使用 OpenShift Dedicated 发布的 Operator SDK CLI 工具版本来维护其项目并创建针对较新版本的 OpenShift Dedicated 的 Operator 版本。

以下与 Operator 项目相关的基础镜像被弃用。这些基础镜像的运行时功能和配置 API 仍受支持,用于修复错误和解决 CVE。

  • 基于 Ansible 的 Operator 项目的基础镜像

  • 基于 Helm 的 Operator 项目的基础镜像

有关不受支持的社区维护版本的 Operator SDK 的信息,请参阅 Operator SDK (Operator Framework)

关于打包格式迁移

Operator SDK 的 `pkgman-to-bundle` 命令有助于将 Operator Lifecycle Manager (OLM) 包清单迁移到 bundle。该命令接收输入包清单目录,并为输入目录中存在的每个版本的清单生成 bundle。然后,您还可以为每个生成的 bundle 构建 bundle 镜像。

例如,考虑以下包清单格式项目的 `packagemanifests/` 目录

包清单格式布局示例
packagemanifests/
└── etcd
    ├── 0.0.1
    │   ├── etcdcluster.crd.yaml
    │   └── etcdoperator.clusterserviceversion.yaml
    ├── 0.0.2
    │   ├── etcdbackup.crd.yaml
    │   ├── etcdcluster.crd.yaml
    │   ├── etcdoperator.v0.0.2.clusterserviceversion.yaml
    │   └── etcdrestore.crd.yaml
    └── etcd.package.yaml

迁移完成后,将在 `bundle/` 目录中生成以下 bundle

bundle 格式布局示例
bundle/
├── bundle-0.0.1
│   ├── bundle.Dockerfile
│   ├── manifests
│   │   ├── etcdcluster.crd.yaml
│   │   ├── etcdoperator.clusterserviceversion.yaml
│   ├── metadata
│   │   └── annotations.yaml
│   └── tests
│       └── scorecard
│           └── config.yaml
└── bundle-0.0.2
    ├── bundle.Dockerfile
    ├── manifests
    │   ├── etcdbackup.crd.yaml
    │   ├── etcdcluster.crd.yaml
    │   ├── etcdoperator.v0.0.2.clusterserviceversion.yaml
    │   ├── etcdrestore.crd.yaml
    ├── metadata
    │   └── annotations.yaml
    └── tests
        └── scorecard
            └── config.yaml

基于此生成的布局,还将使用以下名称构建两个 bundle 的 bundle 镜像

  • quay.io/example/etcd:0.0.1

  • quay.io/example/etcd:0.0.2

将包清单项目迁移到 bundle 格式

Operator 作者可以使用 Operator SDK 将包清单格式的 Operator 项目迁移到 bundle 格式的项目。

先决条件
  • 已安装 Operator SDK CLI

  • 最初使用 Operator SDK 以包清单格式生成的 Operator 项目

步骤
  • 使用 Operator SDK 将您的包清单项目迁移到 bundle 格式并生成 bundle 镜像

    $ operator-sdk pkgman-to-bundle <package_manifests_dir> \ (1)
        [--output-dir <directory>] \ (2)
        --image-tag-base <image_name_base> (3)
    
    1 指定项目的包清单目录的位置,例如 `packagemanifests/` 或 `manifests/`。
    2 可选:默认情况下,生成的 bundle 会写入本地磁盘的 `bundle/` 目录。您可以使用 `--output-dir` 标志指定其他位置。
    3 设置 `--image-tag-base` 标志以提供镜像名称的基础,例如 `quay.io/example/etcd`,这将用于 bundle。提供不带标签的名称,因为镜像的标签将根据 bundle 版本设置。例如,完整的 bundle 镜像名称以 `<image_name_base>:<bundle_version>` 的格式生成。
验证
  • 验证生成的 bundle 镜像是否成功运行

    $ operator-sdk run bundle <bundle_image_name>:<tag>
    示例输出
    INFO[0025] Successfully created registry pod: quay-io-my-etcd-0-9-4
    INFO[0025] Created CatalogSource: etcd-catalog
    INFO[0026] OperatorGroup "operator-sdk-og" created
    INFO[0026] Created Subscription: etcdoperator-v0-9-4-sub
    INFO[0031] Approved InstallPlan install-5t58z for the Subscription: etcdoperator-v0-9-4-sub
    INFO[0031] Waiting for ClusterServiceVersion "default/etcdoperator.v0.9.4" to reach 'Succeeded' phase
    INFO[0032]   Waiting for ClusterServiceVersion "default/etcdoperator.v0.9.4" to appear
    INFO[0048]   Found ClusterServiceVersion "default/etcdoperator.v0.9.4" phase: Pending
    INFO[0049]   Found ClusterServiceVersion "default/etcdoperator.v0.9.4" phase: Installing
    INFO[0064]   Found ClusterServiceVersion "default/etcdoperator.v0.9.4" phase: Succeeded
    INFO[0065] OLM has successfully installed "etcdoperator.v0.9.4"