第 11 章 Serverless 升级
在不跳过发行版本的情况下,OpenShift Serverless 应该会被升级。本节演示了如何解决升级的问题。
11.1. Serverless Operator 维护发行版本升级
11.1.1. 最新和维护发行版本
从 OpenShift Serverless 1.29 开始,提供了不同的产品版本,如下所示:
-
最新版本可通过
stable
频道获得。 Maintenance 发行版本可以通过其基于版本的频道获得,如
stable-1.29
。注意维护版本是最新版本之前的发行版本。例如,如果
stable
频道包含版本 1.30,则维护版本将在stable-1.29
频道中提供。
使用基于版本的频道可让您保留在特定的 x.y
流中。另外,它会阻止升级到最新版本的产品,该版本可能包含有问题的更改。
要切换到维护版本,请将订阅对象 YAML 文件中的 channel 参数从 stable
更新为对应的基于版本的频道,如 stable-1.29
。
11.1.2. 维护版本的补丁和修补程序
与稳定版本一样,维护版本可能会受到补丁和热修复(hotfix)的约束,这有助于保持部署与关键程序错误和安全修复保持同步。
- 补丁是作为 z-releases 发布的更新,如 OpenShift Serverless 1.29.1,提供自版本 1.29.0 起的更新。
热修补代码是需要零停机时间且直接在生产环境中使用的修复程序。它们与升级客户的部署版本(而不是最新发布的版本)的正常更新不同。
热修补代码可能不会立即提供给所有客户。但是,在将来的版本中,热修补代码所引入的变化通常可供所有客户使用。
当一个与您的部署相关的热修复功能时,您将获得热修复 CatalogSource 来更新您的订阅并获取热修补代码。
在有新的 Operator 发行版本可用后,还可以升级具有热修补代码部署的操作器。要使用最新的 GA 版本,请将订阅修改为使用 public CatalogSource 而不是 hotfix。
下图说明了补丁和热修补代码如何工作:
stable stable-1.28 +--------------+ +--------------------------------------------+ | | | | | +--------+ | corresponds to | +--------+ +--------+ +--------+ | | | 1.28.0 |----------------------> | 1.28.0 | | 1.28.1 | | 1.28.2 | | | +--------+ | | +--------+ +--------+ +--------+ | | | | | ^ | | | | +-----|-------------------|------------|-----+ | +--------+ | created| |upgrades | | | 1.28.1 | | from | hotfix_xyz |to | | +--------+ | | +------------+ | | | | +-->| |--+ | | | | | | | +--------+ | upgrades to +------------+ | | | 1.29.0 |<----------------------------------------------------------+ | +--------+ | | | | | | +--------+ | | | 1.30.0 | | | +--------+ | | | +--------------+
11.1.3. 维护发行版本的升级路径
如果使用基于版本的频道,则始终可以升级到频道中的最新版本,或头。例如,您可以在 stable-1.29
频道中从 1.29.0 升级到 1.29.2。
另外,在频道头,您可以升级到下一个 x.y
版本。例如,如果 1.29.2 是 stable-1.29
频道中的头,您可以从 1.29.2 升级到 1.30。这种跨通道更新不会自动完成,管理员需要通过更新订阅来手动切换频道。
11.1.4. 升级示例
11.1.4.1. 场景 1
在这种情况下,以下情况为 true:
-
频道是
stable-1.28
-
您切换到
stable
频道 - 当前安装的版本为 1.28.0
- 1.29.0 在 1.28.1 之前发布
-
1.30.0 是
stable
频道的头部
在这种情况下,
到 1.29.0 的升级路径是 1.28.0 到 1.28.1 到 1.29.0。
stable
-1.28
stable stable-1.28 +--------------+ +--------------+ | | | | | +--------+ | | +--------+ | | | 1.28.0 | | | | 1.28.0 | | | +--------+ | | +--------+ | | | | | | | | | | | | +--------+ | | | | | | 1.29.0 |<-------- | v | | +--------+ | | | +--------+ | | | +---------| 1.28.1 | | | | | +--------+ | | +--------+ | | | | | 1.30.0 | | | | | +--------+ | | | | | | | +--------------+ +--------------+
11.1.4.2. 场景 2
在这种情况下,以下情况为 true:
-
频道是
stable-1.29
- 当前安装的版本为 1.29.0
-
在向 stable 频道发布前,
stable
-1.29stable
频道已发布 1.29.1
在这种情况下,在
上从 1.29.0 升级到 1.30.0 的升级路径是 1.29.0 到 1.29.1 到 1.30.0。
stable
-1.29
stable stable-1.29 +--------------+ +--------------+ | | | | | +--------+ | | +--------+ | | | 1.29.0 | | | | 1.29.0 | | | +--------+ | | +--------+ | | | | | | | | | v | | +--------+ | | +--------+ | | | 1.29.1 | | | | 1.29.1 | | | +--------+ | | +--------+ | | | | | | | | | | | | +--------+ | | | | | | 1.30.0 |<---------------------+ | | +--------+ | | | | | | | +--------------+ +--------------+
11.1.4.3. 场景 3
在这种情况下,以下情况为 true:
-
频道是
stable-1.29
-
您切换到
stable-1.30
频道 - 当前安装的版本为 1.29.1
-
1.29.1 是
stable-1.29
频道的头部
在这种情况下,在 stable-1.29
上从 1.29.1 升级到 1.30.0,本例中为 1.29.1 到 1.30.0。
stable-1.29 stable-1.30 +--------------+ +--------------+ | | | | | +--------+ | | +--------+ | | | 1.29.0 | | ------> | 1.30.0 | | | +--------+ | | | +--------+ | | | | | | | | | | | | +--------+ | | | | | | 1.29.1 |-------+ | | | +--------+ | | | | | | | +--------------+ +--------------+