27.9. 使用注解启动 Kafka 和其他操作对象的滚动更新
AMQ Streams 支持使用注解通过 Cluster Operator 手动触发 Kafka 和其他操作对象的滚动更新。使用注解来启动 Kafka、Kafka Connect、MirrorMaker 2 和 ZooKeeper 集群的滚动更新。
在特殊情况下,通常只需要手动对特定 pod 或一组 pod 执行滚动更新。但是,如果您通过 Cluster Operator 执行滚动更新,您可以确保以下内容,而不是直接删除 pod:
- 手动删除 pod 不会与 Cluster Operator 操作冲突,如同时删除其他 pod。
- Cluster Operator 逻辑处理 Kafka 配置规格,如 in-sync 副本的数量。
27.9.1. 使用 pod 管理注解执行滚动更新
此流程描述了如何触发 Kafka、Kafka Connect、MirrorMaker 2 或 ZooKeeper 集群的滚动更新。要触发更新,您可以在管理集群中运行的 pod 的 StrimziPodSet
中添加注解。
先决条件
要执行手动滚动更新,您需要一个正在运行的 Cluster Operator。您更新的组件的集群(无论是 Kafka、Kafka Connect、MirrorMaker 2 或 ZooKeeper)也必须正在运行。
流程
查找控制您要手动更新的 pod 的资源名称。
例如,如果您的 Kafka 集群名为 my-cluster,则对应的名称为 my-cluster-kafka 和 my-cluster-zookeeper。对于名为 my-connect-cluster 的 Kafka Connect 集群,对应的名称为 my-connect-cluster-connect。对于名为 my-mm2-cluster 的 MirrorMaker 2 集群,对应的名称为 my-mm2-cluster-mirrormaker2。
使用
oc annotate
注解 OpenShift 中的相应资源。Annotating a StrimziPodSet
oc annotate strimzipodset <cluster_name>-kafka strimzi.io/manual-rolling-update=true oc annotate strimzipodset <cluster_name>-zookeeper strimzi.io/manual-rolling-update=true oc annotate strimzipodset <cluster_name>-connect strimzi.io/manual-rolling-update=true oc annotate strimzipodset <cluster_name>-mirrormaker2 strimzi.io/manual-rolling-update=true
- 等待下一个协调发生(默认为两分钟)。只要协调过程检测到注解,就会触发被注解资源中的所有 pod 的滚动更新。当所有 pod 的滚动更新完成后,注解会自动从资源中删除。
27.9.2. 使用 pod 注解执行滚动更新
此流程描述了如何使用 OpenShift Pod
注解手动触发现有 Kafka、Kafka Connect、MirrorMaker 2 或 ZooKeeper 集群的滚动更新。注解多个 pod 时,会在同一协调运行中执行连续的滚动更新。
先决条件
要执行手动滚动更新,您需要一个正在运行的 Cluster Operator。您更新的组件的集群(无论是 Kafka、Kafka Connect、MirrorMaker 2 或 ZooKeeper)也必须正在运行。
您可以在 Kafka 集群上执行滚动更新,无论所使用的主题复制因素是什么。但是,要让 Kafka 在更新过程中正常工作,您需要以下内容:
- 使用您要更新的节点运行高可用性 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 # ...
流程
查找您要手动更新的
Pod
的名称。Pod 命名惯例如下:
-
<cluster_name>-kafka-<index_number>
用于 Kafka 集群 -
<cluster_name>-zookeeper-<index_number>
用于 ZooKeeper 集群 -
<cluster_name>-connect-<index_number>
用于 Kafka Connect 集群 -
<cluster_name>-mirrormaker2-<index_number>
用于 MirrorMaker 2 集群
分配给 pod 的
<index_number>
从零开始,并以副本总数减一 结束。-
使用
oc annotate
注解 OpenShift 中的Pod
资源:oc annotate pod <cluster_name>-kafka-<index_number> strimzi.io/manual-rolling-update=true oc annotate pod <cluster_name>-zookeeper-<index_number> strimzi.io/manual-rolling-update=true oc annotate pod <cluster_name>-connect-<index_number> strimzi.io/manual-rolling-update=true oc annotate pod <cluster_name>-mirrormaker2-<index_number> strimzi.io/manual-rolling-update=true
-
等待下一个协调发生(默认为两分钟)。当在协调过程检测到注解时,就会触发被注解的
Pod
的滚动更新。当 Pod 的滚动更新完成后,注解会自动从Pod
中删除。