6.3. 使用 OperatorHub 手动升级 Operator
只有在最初使用 OperatorHub 安装 Operator (即,Operator 出现在 OpenShift Container Platform Web 控制台的项目的 下)时,使用 OperatorHub 升级 Operator。如果您最初使用 OpenShift 命令行界面(CLI)安装 Operator,请使用 CLI 升级 Operator。要了解如何使用 CLI 升级 Operator,请参阅 第 6.4 节 “使用 CLI 手动升级 Operator”。
如果您要从 7.10.0 或 7.10.1 升级,请参阅描述如何完成 Operator 版本升级的特定部分。
6.3.1. 开始前
本节论述了在使用 OperatorHub 升级 AMQ Broker Operator 实例前的一些重要注意事项。
- 当您从 OperatorHub 安装最新的 Operator 版本时,Operator Lifecycle Manager 会自动更新 OpenShift 集群中的 CRD。您不得删除现有 CRD。如果您删除现有 CRD,则所有 CR 和代理实例也会被删除。
- 当使用最新 Operator 版本的 CRD 更新集群时,这个更新会影响 集群中的所有项目。从 Operator 之前的版本部署的任何代理 pod 可能无法在 OpenShift Container Platform Web 控制台中更新其状态。当您点正在运行的代理 pod 的 Logs 选项卡时,您会看到指示 'UpdatepodStatus' 失败的消息。但是,该项目中的代理 pod 和 Operator 将继续按预期工作。要为受影响的项目修复此问题,还必须升级该项目以使用最新版本的 Operator。
如果您要从 7.10.0 或 7.10.1 升级,请参阅描述如何完成 Operator 版本升级的特定部分。升级这些版本需要额外的步骤来防止 Operator 升级在部署中重启代理 pod。
6.3.2. 升级 Operator
您必须卸载当前的 Operator 并安装新的 Operator 来完成升级。
流程
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
- 从项目中卸载现有的 AMQ Broker Operator。
- 在左侧导航菜单中,点 。
- 在页面顶部的 Project 下拉菜单中选择您要卸载 Operator 的项目。
- 找到您要卸载的 Red Hat Integration - AMQ Broker 实例。
对于 Operator 实例,点右侧的 More Options 图标(三个垂直点)。点击 Uninstall Operator。
警告确保未选中 Delete all operand instance for this operator 复选框。如果选择了此复选框,则在卸载 Operator 时,由 Operator 管理的代理实例会被删除。
- 在确认对话框中,点 Uninstall。
- 使用 OperatorHub 为 AMQ Broker 7.12 安装最新版本的 Operator。更多信息请参阅 第 3.3.2 节 “从 OperatorHub 部署 Operator”。
- 在左侧导航菜单中,点 。
- 验证安装的 Red Hat Integration - AMQ Broker 实例下显示了正确的版本号。
6.3.3. 从 7.10.0 升级 Operator
您必须卸载 7.10.0 Operator 并安装新的 Operator 来完成升级。此流程包括防止新 Operator 在部署中重启代理 pod 的额外步骤,这会导致停机。
流程
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
从项目中卸载现有的 AMQ Broker Operator。
- 在左侧导航菜单中,点 。
- 在页面顶部的 Project 下拉菜单中选择您要卸载 Operator 的项目。
- 找到您要卸载的 Red Hat Integration - AMQ Broker 实例。
- 对于 Operator 实例,点右侧的 More Options 图标(三个垂直点)。点击 Uninstall Operator。
- 在确认对话框中,点 Uninstall。
当您升级 7.10.0 Operator 时,新 Operator 会删除 StatefulSet 以删除自定义和 Operator metering 标签,这些标签被 Operator 在 7.10.0 中错误地添加到 StatefulSet 选择器中。当 Operator 删除 StatefulSet 时,它还会删除现有代理 pod,这会导致临时代理中断。如果要避免中断,请完成以下步骤删除 StatefulSet 和孤立代理 pod,以便它们继续运行。
作为包含现有 Operator 部署的项目的管理员登录到 OpenShift Container Platform CLI:
$ oc login -u <user>
切换到要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
使用
--cascade=orphan
选项删除 StatefulSet,以孤立代理 pod。在 StatefulSet 被删除后,孤立的代理 pod 会继续运行。$ oc delete statefulset <statefulset-name> --cascade=orphan
检查您的主代理 CR 是否在
deploymentPlan.labels
属性中配置名为application
或ActiveMQArtemis
的标签。在 7.10.0 中,可以在 CR 中配置这些自定义标签。这些标签是为 Operator 分配标签分配给 pod 的保留,在 7.10.0 后无法添加为自定义标签。如果在 7.10.0 中的主代理 CR 中配置了这些自定义标签,则 pod 上的 Operator 分配标签会被自定义标签覆盖。如果 CR 具有这些标签,请完成以下步骤来恢复 pod 上的正确标签,并从 CR 中删除标签。
在 OpenShift 命令行界面(CLI)中,运行以下命令来恢复正确的 pod 标签。在以下示例中,'ex-aao' 是部署的 StatefulSet 的名称。
$ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
从 CR 中的
deploymentPlan.labels
属性中删除application
和ActiveMQArtemis
标签。使用 OpenShift 命令行界面:
以具有特权的用户身份登录 OpenShift,以便在代理部署的项目中部署 CR。
oc login -u <user> -p <password> --server=<host:port>
编辑部署的 CR。
oc edit ActiveMQArtemis <statefulset name> -n <namespace>
-
在 CR 中的
deploymentPlan.labels
元素中,删除名为application
或ActiveMQArtemis
的任何自定义标签。 - 保存 CR。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权的用户身份登录控制台,以便在代理部署的项目中部署 CR。
-
在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 点代理部署的实例。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
-
在 CR 中的
deploymentPlan.labels
元素中,删除名为application
或ActiveMQArtemis
的任何自定义标签。 - 点击 Save。
使用 OperatorHub 为 AMQ Broker 7.12 安装最新版本的 Operator。更多信息请参阅 第 3.3.2 节 “从 OperatorHub 部署 Operator”。
新的 Operator 可以识别和管理之前代理部署。如果您在 CR 中的
image
或version
字段中设置了值,Operator 的协调过程会在 Operator 启动时将代理 pod 升级到对应的镜像。如需更多信息,请参阅 第 6.6 节 “限制代理容器镜像的自动升级”。否则,Operator 会将每个代理 pod 升级到最新的容器镜像。注意如果协调过程没有启动,您可以通过扩展部署来启动该过程。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
- 根据需要,为升级代理中提供的新功能向 CR 添加属性。
6.3.4. 从 7.10.1 升级 Operator
您必须卸载 7.10.1 Operator,并安装新的 Operator 来完成升级。此流程包括您可能需要完成的额外步骤,具体取决于您的配置,以防止新的 Operator 重启代理 pod,从而导致停机。
流程
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
检查您的主代理 CR 是否在
deploymentPlan.labels
属性中配置名为application
或ActiveMQArtemis
的标签。这些标签为 Operator 保留,用于将标签分配给 pod,且在 7.10.1 后无法使用。如果在主代理 CR 中配置了这些自定义标签,则 pod 上的 Operator 分配标签会被自定义标签覆盖。
- 如果在主代理 CR 中没有配置这些自定义标签,请使用 OperatorHub 为 AMQ Broker 7.12 安装最新版本的 Operator。更多信息请参阅 第 3.3.2 节 “从 OperatorHub 部署 Operator”。
如果在主代理 CR 中配置了这些自定义标签,请按照以下步骤卸载现有 Operator,在安装新 Operator 前恢复正确的 pod 标签并从 CR 中删除标签。
注意通过卸载 Operator,您可以在没有 Operator 删除 StatefulSet 的情况下删除自定义标签,这也会删除现有代理 pod 并导致临时代理中断。
从项目中卸载现有的 AMQ Broker Operator。
- 在左侧导航菜单中,点 。
- 在页面顶部的 Project 下拉菜单中选择您要卸载 Operator 的项目。
- 找到您要卸载的 Red Hat Integration - AMQ Broker 实例。
- 对于 Operator 实例,点右侧的 More Options 图标(三个垂直点)。点击 Uninstall Operator。
- 在确认对话框中,点 Uninstall。
在 OpenShift 命令行界面(CLI)中,运行以下命令来恢复正确的 pod 标签。在以下示例中,'ex-aao' 是部署的 StatefulSet 的名称。
$ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
从 CR 中的
deploymentPlan.labels
属性中删除application
和ActiveMQArtemis
标签。使用 OpenShift 命令行界面:
以具有特权的用户身份登录 OpenShift,以便在代理部署的项目中部署 CR。
oc login -u <user> -p <password> --server=<host:port>
编辑部署的 CR。
oc edit ActiveMQArtemis <statefulset name> -n <namespace>
-
在 CR 中的
deploymentPlan.labels
属性中,删除名为application
或ActiveMQArtemis
的任何自定义标签。 - 保存 CR 文件。
使用 OpenShift Container Platform Web 控制台:
- 以具有特权的用户身份登录控制台,以便在代理部署的项目中部署 CR。
-
在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 点代理部署的实例。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
-
在 CR 中的
deploymentPlan.labels
属性中,删除名为application
或ActiveMQArtemis
的任何自定义标签。 - 点击 Save。
使用 OperatorHub 为 AMQ Broker 7.12 安装最新版本的 Operator。更多信息请参阅 第 3.3.2 节 “从 OperatorHub 部署 Operator”。
新的 Operator 可以识别和管理之前代理部署。如果您在 CR 中的
image
或version
字段中设置了值,Operator 的协调过程会在 Operator 启动时将代理 pod 升级到对应的镜像。如需更多信息,请参阅 第 6.6 节 “限制代理容器镜像的自动升级”。否则,Operator 会将每个代理 pod 升级到最新的容器镜像。注意如果协调过程没有启动,您可以通过扩展部署来启动该过程。更多信息请参阅 第 3.4.1 节 “部署基本代理实例”。
- 根据需要,为升级代理中提供的新功能向 CR 添加属性。