×

操作符生命周期管理器 (OLM) v1 仅为技术预览功能。技术预览功能不受 Red Hat 生产服务等级协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

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

操作符控制器是操作符生命周期管理器 (OLM) v1 的核心组件,它使用另一个 OLM v1 组件 catalogd。它通过用户可以安装操作符和扩展的 API 扩展 Kubernetes。

ClusterExtension API

操作符控制器提供了一个新的 ClusterExtension API 对象,它是一个表示已安装扩展实例的单个资源,其中包括通过 registry+v1 bundle 格式的操作符。此 clusterextension.olm.operatorframework.io API 通过将面向用户的 API 整合到单个对象中,简化了已安装扩展的管理。

在 OLM v1 中,ClusterExtension 对象是集群范围的。这与现有的 OLM 不同,在现有的 OLM 中,操作符可以是命名空间范围的,也可以是集群范围的,具体取决于其相关的 SubscriptionOperatorGroup 对象的配置。

有关早期行为的更多信息,请参阅多租户和操作符共存

ClusterExtension 对象示例
apiVersion: olm.operatorframework.io/v1alpha1
kind: ClusterExtension
metadata:
  name: <operator_name>
spec:
  packageName: <package_name>
  installNamespace: <namespace_name>
  channel: <channel_name>
  version: <version_number>

指定目标版本的自定义资源 (CR) 示例

在操作符生命周期管理器 (OLM) v1 中,集群管理员可以在自定义资源 (CR) 中声明性地设置操作符或扩展的目标版本。

您可以通过指定以下任何字段来定义目标版本

  • 通道

  • 版本号

  • 版本范围

如果在 CR 中指定通道,OLM v1 将安装可在指定通道内解析的操作符或扩展的最新版本。当更新发布到指定通道时,OLM v1 会自动更新到可从通道解析的最新版本。

带有指定通道的 CR 示例
apiVersion: olm.operatorframework.io/v1alpha1
kind: ClusterExtension
metadata:
  name: pipelines-operator
spec:
  packageName: openshift-pipelines-operator-rh
  installNamespace: <namespace_name>
  serviceAccount:
    name: <service_account>
  channel: latest (1)
1 安装可从指定通道解析的最新版本。通道的更新会自动安装。

如果在 CR 中指定操作符或扩展的目标版本,OLM v1 将安装指定的版本。当在 CR 中指定目标版本时,OLM v1 不会在将更新发布到目录时更改目标版本。

如果要更新安装在集群上的操作符的版本,则必须手动编辑操作符的 CR。指定操作符的目标版本会将操作符的版本固定到指定的版本。

带有指定目标版本的 CR 示例
apiVersion: olm.operatorframework.io/v1alpha1
kind: ClusterExtension
metadata:
  name: pipelines-operator
spec:
  packageName: openshift-pipelines-operator-rh
  installNamespace: <namespace_name>
  serviceAccount:
    name: <service_account>
  version: "1.11.1" (1)
1 指定目标版本。如果要更新已安装的操作符或扩展的版本,则必须手动将 CR 中此字段更新为所需的 target 版本。

如果要为操作符或扩展定义一系列可接受的版本,则可以使用比较字符串指定版本范围。当您指定版本范围时,OLM v1 将安装操作符控制器可以解析的操作符或扩展的最新版本。

带有指定版本范围的 CR 示例
apiVersion: olm.operatorframework.io/v1alpha1
kind: ClusterExtension
metadata:
  name: pipelines-operator
spec:
  packageName: openshift-pipelines-operator-rh
  installNamespace: <namespace_name>
  serviceAccount:
    name: <service_account>
  version: ">1.11.1" (1)
1 指定所需版本范围大于版本1.11.1。有关更多信息,请参见“版本范围的支持”。

创建或更新 CR 后,请运行以下命令应用配置文件

命令语法
$ oc apply -f <extension_name>.yaml

集群扩展的对象所有权

在操作符生命周期管理器 (OLM) v1 中,Kubernetes 对象一次只能由单个 ClusterExtension 对象拥有。这确保了 OpenShift Container Platform 集群中的对象得到一致的管理,并防止多个集群扩展尝试控制同一对象时发生冲突。

单一所有权

OLM v1 强制执行的核心所有权原则是每个对象只能有一个集群扩展作为其所有者。这防止了多个集群扩展的重叠或冲突管理,确保每个对象都唯一地与单个 bundle 关联。

单一所有权的影响
  • 提供CustomResourceDefinition (CRD) 对象的 bundle 只能安装一次。

    bundle 提供 CRD,它们是ClusterExtension 对象的一部分。这意味着您只能在一个集群中安装一次 bundle。尝试安装提供相同 CRD 的另一个 bundle 将导致失败,因为每个自定义资源只能有一个集群扩展作为其所有者。

  • 集群扩展不能共享对象。

    OLM v1 的单一所有者策略意味着集群扩展不能共享任何对象的所有权。如果一个集群扩展管理特定对象(例如DeploymentCustomResourceDefinitionService 对象),则另一个集群扩展不能声明对同一对象的所有权。OLM v1 会阻止任何此类尝试。

错误消息

当由于多个集群扩展尝试管理同一对象而发生冲突时,操作符控制器将返回一条指示所有权冲突的错误消息,例如以下内容

错误消息示例
CustomResourceDefinition 'logfilemetricexporters.logging.kubernetes.io' already exists in namespace 'kubernetes-logging' and cannot be managed by operator-controller

此错误消息表明该对象已被另一个集群扩展管理,并且不能重新分配或共享。

注意事项

作为集群或扩展管理员,请查看以下注意事项

bundle 的唯一性

确保提供相同 CRD 的操作符 bundle 不止安装一次。这可以防止由于所有权冲突而导致的潜在安装失败。

避免对象共享

如果您需要不同的集群扩展与类似的资源交互,请确保它们管理的是单独的对象。由于单一所有者强制执行,集群扩展不能联合管理同一对象。