23.3. 在短短停机时间的情况下升级 OpenShift


如果要升级 OpenShift,请参阅 OpenShift 升级路径文档,以检查升级路径以及正确升级节点的步骤。在升级 OpenShift 前 ,请检查您的 AMQ Streams 版本支持的版本

在进行升级时,您要保持 Kafka 集群可用。

您可以使用以下策略之一:

  1. 配置 pod 中断预算
  2. 使用以下方法之一滚动 pod:

    1. 使用 AMQ Streams Drain Cleaner
    2. 通过将注解应用到 pod 手动

当使用任一方法滚动 pod 时,您必须使用 maxUnavailable 属性设置 pod 中断预算为零。

注意

StrimziPodSet 自定义资源使用无法使用 maxUnavailable 值的自定义控制器来管理 Kafka 和 ZooKeeper pod。相反,maxUnavailable 值转换为 minAvailable 值。如果有三个代理 pod,并且 maxUnavailable 属性设置为 0 ( 零),min Available 设置为 3,则需要所有三个代理 pod 都可用,并允许零个 pod 不可用。

要使 Kafka 保持正常运行,还必须复制主题才能进行高可用性。这要求主题配置指定至少 3 个复制因素,最小同步副本的数量为复制因素的数量减 1。

为高可用性复制 Kafka 主题

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: my-topic
  labels:
    strimzi.io/cluster: my-cluster
spec:
  partitions: 1
  replicas: 3
  config:
    # ...
    min.insync.replicas: 2
    # ...
Copy to Clipboard Toggle word wrap

在高可用性环境中,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 中断预算

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
  namespace: myproject
spec:
  kafka:
    # ...
    template:
      podDisruptionBudget:
        maxUnavailable: 0
# ...
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

将 & lt;cluster_name > 替换为集群的名称。Kafka 代理 pod 被命名为 & lt;cluster-name&gt; -kafka-&lt; index>,其中 <index> 以零开始,结束于副本总数。例如,my-cluster-kafka-0

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat