5.3. 更新路径
在决定更新路径(也称为升级路径或升级限制)时,对于已安装的集群扩展,Operator Lifecycle Manager (OLM) v1 支持从 OpenShift Container Platform 4.16 开始的 OLM (Classic) 语义。这个支持遵循 OLM (Classic) 的行为(包括 replaces
, skips
, 和 skipRange
指令),但有以下一些区别。
通过支持 OLM (Classic) 语义,OLM v1 会准确反映目录中的更新图表。
与原始 OLM (Classic) 实现的不同
如果有多个可能的后续者,OLM v1 行为有所不同:
- 在 OLM (Classic) 中,选择与频道头最接近的后续者。
- 在 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
# ... - name: example.v3.0.0 skips: ["example.v2.0.0"] - name: example.v2.0.0 skipRange: >=1.0.0 <2.0.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果安装了
1.0.0
,OLM v1 行为如下:-
OLM (Classic) 不会检测到
v2.0.0
的更新路径,因为v2.0.0
被跳过,而不是在replaces
的链中。 -
OLM v1 将检测更新路径,因为 OLM v1 没有
replaces
链的概念。OLM v1 找到所有带有replace
、skip
或skipRange
值的条目,它们涵盖当前安装的版本。
-
OLM (Classic) 不会检测到
5.3.1. 支持版本范围 复制链接链接已复制到粘贴板!
在 Operator Lifecycle Manager (OLM) v1 中,您可以使用 Operator 或扩展的自定义资源(CR)中的比较字符串来指定版本范围。如果您在 CR 中指定版本范围,OLM v1 会安装或升级到可以在版本范围内解析的 Operator 的最新版本。
解析的版本工作流
- 解析的版本是满足 Operator 和环境限制的 Operator 的最新版本。
- 如果成功解决,则会自动安装指定范围内的 Operator 更新。
- 当更新在指定的范围之外,或者无法成功解决,则不会安装更新。
5.3.2. 版本比较字符串 复制链接链接已复制到粘贴板!
您可以通过在 Operator 或扩展的自定义资源(CR)的 spec.version
字段中添加比较字符串来定义版本范围。比较字符串是一个空格或以逗号分隔的值列表,以及以双引号括起的一个或多个比较运算符("
)。您可以通过包括 OR
、或双垂直栏(||
)来添加另一个比较字符串,比较字符串之间的运算符。
比较运算符 | 定义 |
---|---|
| 等于 |
| 不等于 |
| 大于 |
| 小于 |
| 大于或等于 |
| 小于或等于 |
您可以使用类似以下示例的范围比较在 Operator 或扩展 CR 中指定版本范围:
版本范围比较示例
您可以在所有类型的比较字符串中使用通配符字符。OLM v1 接受 x
、X
和星号 (*
) 作为通配符字符。您可以在等号 (=
) 比较运算符中使用通配符,代表在补丁或次版本级别上定义比较。
通配符比较 | 匹配字符串 |
---|---|
|
|
|
|
|
|
|
|
您可以使用波形符 (~
) 比较运算符进行补丁版本比较。补丁版本比较指定最高为下一个主版本的次版本。
补丁版本比较 | 匹配字符串 |
---|---|
|
|
|
|
|
|
|
|
|
|
您可以使用 caret (^
) 比较运算符来比较主版本。如果您在第一个稳定版本发布前进行主发行版本比较,次版本定义了 API 的稳定性级别。在语义版本 (semver) 规格中,第一个稳定版本被发布为 1.0.0
版本。
主发行版本比较 | 匹配字符串 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.3.3. 指定目标版本的自定义资源(CR)示例 复制链接链接已复制到粘贴板!
在 Operator Lifecycle Manager (OLM) v1 中,集群管理员可以在自定义资源(CR)中声明性地设置 Operator 或扩展的目标版本。
您可以通过指定以下字段来定义目标版本:
- Channel
- 版本号
- 版本范围
如果您在 CR 中指定频道,OLM v1 会安装可在指定频道中解析的 Operator 或扩展的最新版本。当向指定的频道发布更新时,OLM v1 会自动更新至可以从频道解析的最新发行版本。
带有指定频道的 CR 示例
- 1
- 可选:安装可从指定频道解析的最新版本。对频道的更新会自动安装。指定
channels
参数的值(数组)。
如果在 CR 中指定 Operator 或扩展的目标版本,OLM v1 将安装指定的版本。当在 CR 中指定目标版本时,OLM v1 在向目录发布更新时不会更改目标版本。
如果要更新集群中安装的 Operator 版本,您必须手动编辑 Operator 的 CR。指定 Operator 的目标版本将 Operator 的版本固定到指定的发行版本。
指定了目标版本的 CR 示例
- 1
- 可选:指定目标版本。如果要更新安装的 Operator 或扩展版本,您必须手动将 CR 更新至所需的目标版本。
如果要为 Operator 或扩展定义可接受的版本范围,您可以使用比较字符串指定版本范围。当您指定版本范围时,OLM v1 会安装可由 Operator Controller 解析的 Operator 或扩展的最新版本。
指定了版本范围的 CR 示例
- 1
- 可选:指定所需版本范围是否大于
1.11.1
。如需更多信息,请参阅"支持版本范围"。
创建或更新 CR 后,运行以下命令来应用配置文件:
命令语法
oc apply -f <extension_name>.yaml
$ oc apply -f <extension_name>.yaml
5.3.4. 强制更新或回滚 复制链接链接已复制到粘贴板!
OLM v1 不支持对下一个主版本的自动更新,或回滚到较早的版本。如果要执行主版本更新或回滚,您必须验证并强制更新。
您必须验证强制进行手动更新或回滚的结果。验证强制更新或回滚失败可能会产生灾难性后果,如数据丢失。
先决条件
- 已安装目录。
- 已安装 Operator 或扩展。
- 您已创建了服务帐户,并分配了足够的基于角色的访问控制 (RBAC) 来安装、更新和管理您要安装的扩展。如需更多信息,请参阅创建服务帐户。
流程
编辑 Operator 或扩展的自定义资源 (CR),如下例所示:
CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定您要安装捆绑包的命名空间,如
pipelines
或my-extension
。扩展仍然是集群范围的,可能包含在不同命名空间中安装的资源。 - 2
- 指定您为安装、更新和管理扩展创建的服务帐户的名称。
- 3
- 可选:将频道名称指定为数组,如
pipelines-1.14
或latest
。 - 4
- 可选:指定您要安装的软件包的版本或版本范围,如
1.14.0
、1.14.x
或>=1.16
。如需更多信息,请参阅"示例自定义资源(CR)指定目标版本"和"支持版本范围"。 - 5
- 可选:指定升级约束策略。要强制更新或回滚,请将字段设置为
SelfCertified
。如果未指定,则默认设置为CatalogProvided
。只有在新版本满足软件包作者设置的升级限制时,CatalogProvided
设置才会更新。
运行以下命令,对 Operator 或 extensions CR 应用更改:
oc apply -f <extension_name>.yaml
$ oc apply -f <extension_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.5. 与 OpenShift Container Platform 版本的兼容性 复制链接链接已复制到粘贴板!
在集群管理员将其 OpenShift Container Platform 集群更新至其下一个次版本前,它们必须确保所有安装的 Operator 更新至与集群下一个次版本(4.y+1)兼容的捆绑包版本。
例如,Kubernetes 定期弃用后续版本中删除的某些 API。如果使用已弃用的 API,则在 OpenShift Container Platform 集群更新至删除 API 的 Kubernetes 版本后,它可能无法正常工作。
如果 Operator 作者知道不支持特定的捆绑包版本,且出于某种原因,在 OpenShift Container Platform 上比特定集群次版本稍后无法正常工作,他们可以配置其 Operator 兼容的最大 OpenShift Container Platform 版本。
在 Operator 项目的集群服务版本(CSV)中,作者可以设置 olm.maxOpenShiftVersion
注解,以防止管理员在将已安装的 Operator 更新至兼容版本前更新集群。
带有 olm.maxOpenShiftVersion
注解的 CSV 示例
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: "olm.properties": '[{"type": "olm.maxOpenShiftVersion", "value": "<cluster_version>"}]'
apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
annotations:
"olm.properties": '[{"type": "olm.maxOpenShiftVersion", "value": "<cluster_version>"}]'
- 1
- 指定 Operator 兼容的最新 OpenShift Container Platform (4.y)次要版本。例如,在集群中安装此捆绑包时,将
value
设为4.19
可防止集群升级到 4.19 之后的次版本。如果省略
olm.maxOpenShiftVersion
字段,则此 Operator 不会阻断集群更新。
在决定集群的下一个次版本(4.y+1)时,OLM v1 只考虑主版本和次版本(x 和 y)进行比较。它会忽略任何 z-stream 版本(4.y.z),也称为补丁版本或预发布版本。
例如,如果集群的当前版本是 4.19.0
,则下一个次版本为 4.20
。如果当前版本为 4.19.0-rc1
,则下一个次版本仍为 4.20
。
5.3.5.1. olm cluster Operator 阻止的集群更新 复制链接链接已复制到粘贴板!
如果设置了已安装的 Operator olm.maxOpenShiftVersion
字段,并且集群管理员尝试将其集群更新至 Operator 没有提供有效更新路径的版本,则集群更新会失败,并且 olm
cluster Operator 的 Upgradeable
设置为 False
。
要解决这个问题,集群管理员必须将已安装的 Operator 更新至具有有效更新路径的版本(如果可用),或者必须卸载 Operator。然后,他们可以尝试集群更新。