23.3. 在短短停机时间的情况下升级 OpenShift
如果要升级 OpenShift,请参阅 OpenShift 升级路径文档,以检查升级路径以及正确升级节点的步骤。在升级 OpenShift 前 ,请检查您的 AMQ Streams 版本支持的版本。
在进行升级时,您要保持 Kafka 集群可用。
您可以使用以下策略之一:
- 配置 pod 中断预算
使用以下方法之一滚动 pod:
- 使用 AMQ Streams Drain Cleaner
- 通过将注解应用到 pod 手动
当使用任一方法滚动 pod 时,您必须使用 maxUnavailable 属性设置 pod 中断预算为零。
StrimziPodSet 自定义资源使用无法使用 maxUnavailable 值的自定义控制器来管理 Kafka 和 ZooKeeper pod。相反,maxUnavailable 值转换为 minAvailable 值。如果有三个代理 pod,并且 maxUnavailable 属性设置为 0 ( 零),min Available 设置为 3,则需要所有三个代理 pod 都可用,并允许零个 pod 不可用。
要使 Kafka 保持正常运行,还必须复制主题才能进行高可用性。这要求主题配置指定至少 3 个复制因素,最小同步副本的数量为复制因素的数量减 1。
为高可用性复制 Kafka 主题
在高可用性环境中,Cluster Operator 在升级过程中为主题维护最少的同步副本,从而无需停机。
23.3.1. 使用 AMQ Streams Drain Cleaner 的滚动 pod 复制链接链接已复制到粘贴板!
您可以使用 AMQ Streams Drain Cleaner 来在升级过程中驱除节点。AMQ Streams Drain Cleaner 使用滚动更新 pod 注解来注解 pod。这会通知 Cluster Operator 执行被驱除的 pod 的滚动更新。
pod 中断预算只允许指定数量的 pod 在给定时间不可用。在计划维护 Kafka 代理 pod 期间,pod 中断预算可确保 Kafka 继续在高可用性环境中运行。
您可以使用 Kafka 组件 的模板 自定义来指定 pod 中断预算。默认情况下,pod 中断预算只允许一个 pod 在给定时间不可用。
要使用 Drain Cleaner 来滚动 pod,您需要将 maxUnavailable 设置为 0 ( 零)。将 pod 中断预算减少为零可防止意外中断,因此必须手动驱除 pod。
指定 pod 中断预算
23.3.2. 手动滚动 pod,同时保持可用的主题 复制链接链接已复制到粘贴板!
在升级过程中,您可以通过 Cluster Operator 触发 pod 的手动更新。使用 Pod 资源,滚动更新会使用新 pod 重启资源的 pod。与使用 AMQ Streams Drain Cleaner 一样,您需要为 pod 中断预算将 maxUnavailable 值设置为零。
您需要观察需要排空的 pod。然后,您添加一个 pod 注解来进行更新。
在这里,注解会更新 Kafka 代理。
在 Kafka 代理 pod 上执行手动滚动更新
oc annotate pod <cluster_name>-kafka-<index> strimzi.io/manual-rolling-update=true
oc annotate pod <cluster_name>-kafka-<index> strimzi.io/manual-rolling-update=true
将 & lt;cluster_name > 替换为集群的名称。Kafka 代理 pod 被命名为 & lt;cluster-name> -kafka-< index>,其中 <index> 以零开始,结束于副本总数。例如,my-cluster-kafka-0。