2.2. Operator 控制器
Operator Lifecycle Manager (OLM) v1 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Operator Controller 是 Operator Lifecycle Manager (OLM) v1 的中央组件,它消耗其他 OLM v1 组件 catalogd。它使用一个 API 扩展 Kubernetes,用户可以安装 Operator 和扩展。
2.2.1. ClusterExtension API
Operator Controller 提供了一个新的 ClusterExtension
API 对象,它是一个代表安装扩展实例的单个资源,其中包括通过 registry+v1
捆绑包格式的 Operator。此 clusterextension.olm.operatorframework.io
API 通过将面向用户的 API 整合到单个对象来简化安装的扩展管理。
在 OLM v1 中,ClusterExtension
对象是集群范围的。这与现有 OLM 不同,根据相关 Subscription
和 OperatorGroup
对象的配置,Operator 可以是命名空间范围的或集群范围的。
如需有关之前行为的更多信息,请参阅多租户和 Operator 共处。
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>
2.2.1.1. 指定目标版本的自定义资源(CR)示例
在 Operator Lifecycle Manager (OLM) v1 中,集群管理员可以在自定义资源(CR)中声明性地设置 Operator 或扩展的目标版本。
您可以通过指定以下字段来定义目标版本:
- Channel
- 版本号
- 版本范围
如果您在 CR 中指定频道,OLM v1 会安装可在指定频道中解析的 Operator 或扩展的最新版本。当向指定的频道发布更新时,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 中指定 Operator 或扩展的目标版本,OLM v1 将安装指定的版本。当在 CR 中指定目标版本时,OLM v1 在向目录发布更新时不会更改目标版本。
如果要更新集群中安装的 Operator 版本,您必须手动编辑 Operator 的 CR。指定 Operator 的目标版本将 Operator 的版本固定到指定的发行版本。
指定了目标版本的 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
- 指定目标版本。如果要更新安装的 Operator 或扩展版本,您必须手动将 CR 更新至所需的目标版本。
如果要为 Operator 或扩展定义可接受的版本范围,您可以使用比较字符串指定版本范围。当您指定版本范围时,OLM v1 会安装可由 Operator Controller 解析的 Operator 或扩展的最新版本。
指定了版本范围的 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
2.2.2. 集群扩展的对象所有权
在 Operator Lifecycle Manager (OLM) v1 中,Kubernetes 对象一次只能由单个 ClusterExtension
对象所有。这样可确保 OpenShift Container Platform 集群中的对象一致管理,并防止尝试控制同一对象的多个集群扩展冲突。
2.2.2.1. 单个所有权
OLM v1 强制的核心所有权原则是每个对象只能有一个集群扩展作为其所有者。这可防止多个集群扩展重叠或冲突管理,确保每个对象仅与一个捆绑包关联。
单个所有权的影响
提供
CustomResourceDefinition
(CRD) 对象的捆绑包只能安装一次。捆绑包提供 CRD,它们是
ClusterExtension
对象的一部分。这意味着您只能在集群中安装捆绑包一次。尝试安装提供相同 CRD 的另一个捆绑包会导致失败,因为每个自定义资源只能有一个集群扩展作为其所有者。集群扩展无法共享对象。
OLM v1 的单所有者策略意味着集群扩展无法共享任何对象的所有权。如果一个集群扩展管理特定对象,如
Deployment
、CustomResourceDefinition
或Service
对象,则另一个集群扩展无法声明同一对象的所有权。尝试这样做会被 OLM v1 阻止。
2.2.2.2. 错误消息
当因为多个集群扩展试图管理同一对象而发生冲突时,Operator Controller 会返回一个错误消息,表示所有权冲突,如下所示:
错误信息示例
CustomResourceDefinition 'logfilemetricexporters.logging.kubernetes.io' already exists in namespace 'kubernetes-logging' and cannot be managed by operator-controller
错误消息表示对象已经由另一个集群扩展管理,且无法重新分配或共享。
2.2.2.3. 注意事项
作为集群或扩展管理员,请查看以下注意事项:
- 捆绑包的唯一性
- 确保提供相同 CRD 的 Operator 捆绑包不会多次安装。这可以防止因为所有权冲突造成潜在的安装失败。
- 避免对象共享
- 如果您需要不同的集群扩展才能与类似的资源交互,请确保它们管理单独的对象。由于单所有者强制,集群扩展无法共同管理同一对象。