7.2.2. Operator 控制器(技术预览)
Operator Controller 是 Operator Lifecycle Manager (OLM) 1.0 的核心组件,并消耗其他 OLM 1.0 组件、RukPak 和 catalogd。它使用一个 API 扩展 Kubernetes,用户可以安装 Operator 和扩展。
OLM 1.0 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
7.2.2.1. Operator API 复制链接链接已复制到粘贴板!
Operator Controller 提供了一个新的 Operator API 对象,它是一个代表已安装 Operator 实例的单个资源。此 operator.operators.operatorframework.io API 通过将面向用户的 API 整合到单个对象来简化已安装的 Operator 管理。
在 OLM 1.0 中,Operator 对象是集群范围的。这与早期的 OLM 版本不同,Operator 可以是命名空间范围的或集群范围的,具体取决于其相关 Subscription 和 OperatorGroup 对象的配置。
如需有关之前行为的更多信息,请参阅多租户和 Operator 共处。
Operator 对象示例
apiVersion: operators.operatorframework.io/v1alpha1
kind: Operator
metadata:
name: <operator_name>
spec:
packageName: <package_name>
channel: <channel_name>
version: <version_number>
当使用 OpenShift CLI (oc) 时,由在此技术预览阶段中的 OLM 1.0 所提供的 Operator 资源需要指定完整的 <resource>.<group> 格式: operator.operators.operatorframework.io。例如:
$ oc get operator.operators.operatorframework.io
如果您在没有 API 组的情况下只指定 Operator 资源,CLI 会为早期的 API (operator.operators.coreos.com) 返回的结果与 OLM 1.0 不相关。
7.2.2.1.1. 关于 OLM 1.0 中的目标版本 复制链接链接已复制到粘贴板!
在 Operator Lifecycle Manager(OLM)1.0 中,集群管理员在 Operator 的自定义资源(CR)中以声明性方式设置 Operator 的目标版本。
如果在 Operator 的 CR 中指定频道,OLM 1.0 会从指定频道安装最新版本。当向指定的频道发布更新时,OLM 1.0 会自动更新至该频道的最新发行版本。
带有指定频道的 CR 示例
apiVersion: operators.operatorframework.io/v1alpha1
kind: Operator
metadata:
name: quay-example
spec:
packageName: quay-operator
channel: stable-3.8
- 1
- 安装发布至指定频道的最新发行版本。对频道的更新会自动安装。
如果在 CR 中指定 Operator 的目标版本,OLM 1.0 将安装指定的版本。当在 Operator 的 CR 中指定目标版本时,OLM 1.0 在向目录发布更新时不会更改目标版本。
如果要更新集群中安装的 Operator 版本,您必须手动更新 Operator 的 CR。指定 Operator 的目标版本将 Operator 的版本固定到指定的发行版本。
指定了目标版本的 CR 示例
apiVersion: operators.operatorframework.io/v1alpha1
kind: Operator
metadata:
name: quay-example
spec:
packageName: quay-operator
version: 3.8.12
- 1
- 指定目标版本。如果要更新集群中安装的 Operator 版本,您必须手动将这个字段更新为所需的目标版本。
如果要更改 Operator 的安装版本,请将 Operator 的 CR 编辑为所需的目标版本。
在以前的 OLM 版本中,Operator 作者可以定义升级边缘,以防止您升级到不支持的版本。在开发的当前状态中,OLM 1.0 不强制升级边缘定义。您可以指定 Operator 的任何版本,OLM 1.0 会尝试应用更新。
您可以运行以下命令来检查 Operator 的目录内容,包括可用版本和频道:
命令语法
$ oc get package <catalog_name>-<package_name> -o yaml
创建或更新 CR 后,运行以下命令来创建或修改 Operator:
命令语法
$ oc apply -f <extension_name>.yaml
故障排除
如果指定了不存在的目标版本或频道,您可以运行以下命令来检查 Operator 的状态:
$ oc get operator.operators.operatorframework.io <operator_name> -o yaml输出示例
apiVersion: operators.operatorframework.io/v1alpha1 kind: Operator metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operators.operatorframework.io/v1alpha1","kind":"Operator","metadata":{"annotations":{},"name":"quay-example"},"spec":{"packageName":"quay-operator","version":"999.99.9"}} creationTimestamp: "2023-10-19T18:39:37Z" generation: 3 name: quay-example resourceVersion: "51505" uid: 2558623b-8689-421c-8ed5-7b14234af166 spec: packageName: quay-operator version: 999.99.9 status: conditions: - lastTransitionTime: "2023-10-19T18:50:34Z" message: package 'quay-operator' at version '999.99.9' not found observedGeneration: 3 reason: ResolutionFailed status: "False" type: Resolved - lastTransitionTime: "2023-10-19T18:50:34Z" message: installation has not been attempted as resolution failed observedGeneration: 3 reason: InstallationStatusUnknown status: Unknown type: Installed