5.2. 升级边缘
Operator Lifecycle Manager (OLM) v1 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
在决定升级边缘(也称为升级路径或升级限制)时,对于已安装的集群扩展,Operator Lifecycle Manager (OLM) v1 支持从 OpenShift Container Platform 4.16 开始的现有 OLM 语义。这个支持遵循现有 OLM 的行为,包括 replaces
、skips
、和 skipRange
指令,但有以下一些区别。
通过支持现有的 OLM 语义,OLM v1 现在从目录中准确遵循升级图表。
目前,Operator Lifecycle Manager (OLM) v1 无法验证私有 registry,如红帽提供的 Operator 目录。这是个已知问题。因此,依赖 Red Hat Operator 目录的 OLM v1 流程无法正常工作。(OCPBUGS-36364)
与原始现有 OLM 实现的不同
如果有多个可能的后续者,OLM v1 行为有所不同:
- 在现有的 OLM 中,选择与频道头最接近的后续者。
- 在 OLM v1 中,选择具有最高语义版本的后续版本(semver)。
考虑以下基于文件的目录 (FBC) 频道条目:
# ... - name: example.v3.0.0 skips: ["example.v2.0.0"] - name: example.v2.0.0 skipRange: >=1.0.0 <2.0.0
如果安装了
1.0.0
,OLM v1 行为如下:-
现有 OLM 不会检测
v2.0.0
的升级边缘,因为v2.0.0
被跳过,而不是在replaces
链中。 -
OLM v1 将检测升级边缘,因为 OLM v1 没有
replaces
链的概念。OLM v1 找到所有带有replace
、skip
或skipRange
值的条目,它们涵盖当前安装的版本。
-
现有 OLM 不会检测
其他资源
5.2.1. 支持版本范围
在 Operator Lifecycle Manager (OLM) v1 中,您可以使用 Operator 或扩展的自定义资源(CR)中的比较字符串来指定版本范围。如果您在 CR 中指定版本范围,OLM v1 会安装或升级到可以在版本范围内解析的 Operator 的最新版本。
解析的版本工作流
- 解析的版本是满足 Operator 和环境限制的 Operator 的最新版本。
- 如果成功解决,则会自动安装指定范围内的 Operator 更新。
- 当更新在指定的范围之外,或者无法成功解决,则不会安装更新。
5.2.2. 版本比较字符串
您可以通过在 Operator 或扩展的自定义资源(CR)的 spec.version
字段中添加比较字符串来定义版本范围。比较字符串是一个空格或以逗号分隔的值列表,以及以双引号括起的一个或多个比较运算符("
)。您可以通过包括 OR
、或双垂直栏(||
)来添加另一个比较字符串,比较字符串之间的运算符。
比较运算符 | 定义 |
---|---|
| 等于 |
| 不等于 |
| 大于 |
| 小于 |
| 大于或等于 |
| 小于或等于 |
您可以使用类似以下示例的范围比较在 Operator 或扩展 CR 中指定版本范围:
版本范围比较示例
apiVersion: olm.operatorframework.io/v1alpha1 kind: ClusterExtension metadata: name: pipelines-operator spec: packageName: openshift-pipelines-operator-rh installNamespace: <namespace_name> version: ">=1.11, <1.13"
您可以在所有类型的比较字符串中使用通配符字符。OLM v1 接受 x
、X
和星号 (*
) 作为通配符字符。您可以在等号 (=
) 比较运算符中使用通配符,代表在补丁或次版本级别上定义比较。
通配符比较 | 匹配字符串 |
---|---|
|
|
|
|
|
|
|
|
您可以使用波形符 (~
) 比较运算符进行补丁版本比较。补丁版本比较指定最高为下一个主版本的次版本。
补丁版本比较 | 匹配字符串 |
---|---|
|
|
|
|
|
|
|
|
|
|
您可以使用 caret (^
) 比较运算符来比较主版本。如果您在第一个稳定版本发布前进行主发行版本比较,次版本定义了 API 的稳定性级别。在语义版本 (semver) 规格中,第一个稳定版本被发布为 1.0.0
版本。
主发行版本比较 | 匹配字符串 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.2.3. 指定目标版本的自定义资源(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
5.2.4. 强制更新或回滚
OLM v1 不支持对下一个主版本的自动更新,或回滚到较早的版本。如果要执行主版本更新或回滚,您必须验证并强制更新。
您必须验证强制进行手动更新或回滚的结果。验证强制更新或回滚失败可能会产生灾难性后果,如数据丢失。
先决条件
- 已安装目录。
- 已安装 Operator 或扩展。
- 您已创建了服务帐户,并分配了足够的基于角色的访问控制 (RBAC) 来安装、更新和管理您要安装的扩展。如需更多信息,请参阅创建服务帐户。
流程
编辑 Operator 或扩展的自定义资源 (CR),如下例所示:
CR 示例
apiVersion: olm.operatorframework.io/v1alpha1 kind: Operator metadata: name: <operator_name> 1 spec: packageName: <package_name> 2 installNamespace: <namespace_name> serviceAccount: name: <service_account> version: <version> 3 upgradeConstraintPolicy: Ignore 4
运行以下命令,对 Operator 或 extensions CR 应用更改:
$ oc apply -f <extension_name>.yaml
其他资源