2.2. Operator Framework 打包格式


您可以使用 Operator Framework 打包格式在 OpenShift Container Platform 中捆绑和发布 Operator Lifecycle Manager (OLM)的 Operator 元数据。格式涵盖了捆绑包镜像、依赖项和基于文件的目录模式。

2.2.1. 捆绑包格式

Bundle Format 是一种 Operator Framework 打包格式,简化了将 Operator 元数据分发到目录。Operator 捆绑包是一个 Operator 版本,作为不可运行的容器镜像提供,用于存储 Kubernetes 清单和元数据。

捆绑包镜像的存储和发布使用现有容器工具(如 podman 和 docker )以及容器 registry (如 Quay)进行管理。

Operator 元数据可以包括:

  • 标识 Operator 的信息,如名称和版本。
  • 驱动 UI 的额外信息,例如其图标和一些示例自定义资源 (CR)。
  • 所需的和所提供的 API。
  • 相关镜像。

将清单加载到 Operator Registry 数据库中时,会验证以下要求:

  • 该捆绑包必须在注解中至少定义一个频道。
  • 每个捆绑包都只有一个集群服务版本(CSV)。
  • 如果 CSV 拥有自定义资源定义(CRD),则该 CRD 必须存在于捆绑包中。

2.2.1.1. 清单

捆绑包清单是 Operator 捆绑包中的 Kubernetes 对象,它为 Operator 定义部署和基于角色的访问控制(RBAC)模型。捆绑包包含一个集群服务版本(CSV),通常是其 /manifests 目录中该 CSV 拥有的 API 的自定义资源定义(CRD)。

捆绑包格式布局示例

etcd
├── manifests
│   ├── etcdcluster.crd.yaml
│   └── etcdoperator.clusterserviceversion.yaml
│   └── secret.yaml
│   └── configmap.yaml
└── metadata
    └── annotations.yaml
    └── dependencies.yaml

2.2.1.1.1. 其他支持的 Kubernetes 对象

Operator 捆绑包可以选择在 /manifests 目录中包括额外的 Kubernetes 对象类型,以便使用集群服务版本(CSV)进行部署。包含后,Operator Lifecycle Manager (OLM)与 CSV 一起创建和管理这些对象的生命周期。

支持以下可选对象类型:

  • ClusterRole
  • ClusterRoleBinding
  • ConfigMap
  • ConsoleCLIDownload
  • ConsoleLink
  • ConsoleQuickStart
  • ConsoleYamlSample
  • PodDisruptionBudget
  • PriorityClass
  • PrometheusRule
  • 角色
  • RoleBinding
  • Secret
  • 服务
  • ServiceAccount
  • ServiceMonitor
  • VerticalPodAutoscaler

OLM 管理这些可选对象的生命周期,如下所示:

  • 删除 CSV 后,OLM 会删除可选对象。
  • 当 CSV 被升级时:

    • 如果可选对象的名称相同,OLM 会更新它。
    • 如果可选对象的名称在版本间有所变化,OLM 会删除并重新创建它。

2.2.1.2. 注解

metadata/annotations.yaml 文件中的 Operator 捆绑包注解定义了聚合元数据,用于描述如何索引捆绑包。这些注解为目录注册指定介质类型、清单路径、软件包名称、频道和默认频道。

捆绑包在其 /metadata 目录中包含 annotations.yaml 文件:

annotations.yaml 示例

annotations:
  operators.operatorframework.io.bundle.mediatype.v1: "registry+v1"
  operators.operatorframework.io.bundle.manifests.v1: "manifests/"
  operators.operatorframework.io.bundle.metadata.v1: "metadata/"
  operators.operatorframework.io.bundle.package.v1: "test-operator"
  operators.operatorframework.io.bundle.channels.v1: "beta,stable"
  operators.operatorframework.io.bundle.channel.default.v1: "stable"

其中:

annotations.operators.operatorframework.io.bundle.mediatype.v1
指定 Operator 捆绑包的介质类型或格式。registry+v1 格式表示它包含 CSV 及其关联的 Kubernetes 对象。
annotations.operators.operatorframework.io.bundle.manifests.v1
指定镜像中包含 Operator 清单的目录的路径。该标签保留给以后使用,当前默认为 manifests/。manifests.v1 值表示捆绑包包含 Operator 清单。
annotations.operators.operatorframework.io.bundle.metadata.v1
指定镜像中包含捆绑包元数据文件的目录的路径。该标签保留给以后使用,当前默认为 metadata/。metadata.v1 值表示这个捆绑包包含 Operator 元数据。
annotations.operators.operatorframework.io.bundle.package.v1
指定捆绑包的软件包名称。
annotations.operators.operatorframework.io.bundle.channels.v1
指定捆绑包添加到 Operator Registry 时订阅的频道列表。
annotations.operators.operatorframework.io.bundle.channel.default.v1
指定从 registry 安装时,Operator 应该订阅到的默认频道。
注意

如果出现不匹配的情况,则以 annotations.yaml 文件为准,因为依赖这些注解的集群 Operator Registry 只能访问此文件。

2.2.1.3. 依赖项

Operator 依赖项定义 Operator Lifecycle Manager (OLM)必须在 OpenShift Container Platform 上安装过程中解析的 Operator 之间的关系。您可以在捆绑包的 metadata/ 文件夹中的 optional dependencies.yaml 文件中列出这些依赖项。

依赖项列表中,每个项目包含一个 type 字段,用于指定这一依赖项的类型。支持以下 Operator 依赖项:

olm.package
这个类型表示特定 Operator 版本的依赖项。依赖项信息必须包含软件包名称以及软件包的版本,格式为 semver。例如,您可以指定具体版本,如 0.5.2,也可指定一系列版本,如 >0.5.1。
olm.gvk
使用这个类型,作者可以使用 group/version/kind(GVK)信息指定依赖项,类似于 CSV 中现有 CRD 和基于 API 的使用量。该路径使 Operator 作者可以合并所有依赖项、API 或显式版本,使它们处于同一位置。
olm.constraint
这个类型在任意 Operator 属性上声明通用限制。

在以下示例中,为 Prometheus Operator 和 etcd CRD 指定依赖项:

dependencies.yaml 文件示例

dependencies:
  - type: olm.package
    value:
      packageName: prometheus
      version: ">0.27.0"
  - type: olm.gvk
    value:
      group: etcd.database.coreos.com
      kind: EtcdCluster
      version: v1beta2

2.2.1.4. 关于 opm CLI

opm CLI 是一个 Operator Framework 工具,用于从 OpenShift Container Platform 中的捆绑包镜像创建和维护 Operator 目录。您可以使用它来构建 Operator Lifecycle Manager (OLM)通过目录源引用的目录容器镜像。

目录包含一个指向 Operator 清单内容的指针数据库,可通过在运行容器镜像时提供的已包含 API 进行查询。在 OpenShift Container Platform 中,Operator Lifecycle Manager (OLM) 可以引用由 CatalogSource 对象定义的目录源中的镜像,它会定期轮询镜像,以对集群上安装的 Operator 进行更新。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部