×

OpenShift Container Platform 4.8 及更高版本中已删除对操作符的旧版包清单格式的支持。如果您有一个最初使用包清单格式创建的操作符项目,则可以使用 Operator SDK 将该项目迁移到捆绑包格式。从 OpenShift Container Platform 4.6 开始,捆绑包格式是 Operator Lifecycle Manager (OLM) 的首选打包格式。

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

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

以下与操作符项目相关的基本镜像弃用。这些基本镜像的运行时功能和配置 API 仍支持错误修复和解决 CVE。

  • 基于 Ansible 的操作符项目的基镜像

  • 基于 Helm 的操作符项目的基镜像

有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的已弃用和已删除的功能部分。

有关不受支持的社区维护的 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"