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 ( 零),minAvailable 设置为 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 值设置为 0。
您需要监视需要排空的 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 的名称为 <cluster-name>-kafka-<index>,其中 <index> 从 0 开始,最高为副本数量减一。例如,my-cluster-kafka-0。