You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strimzi部署的Kafka集群无法扩容Azure托管磁盘PV问题求助

问题根因

你遇到的报错是两个限制叠加导致的:

  1. 你当前使用的Openshift 3.11内置Kubernetes v1.11版本,对应的in-tree kubernetes.io/azure-disk存储驱动不支持在线扩容Azure托管磁盘,必须先将磁盘从运行的VM上卸载,才能执行扩容操作。
  2. Strimzi Cluster Operator为了保障Kafka集群的可用性,默认会维持Kafka StatefulSet的副本数符合CR配置的副本数,因此你手动缩副本到0的操作会被Operator自动回滚。
可行解决方案

方案1:短暂停机扩容(操作简单,适合开发测试环境)

  1. 临时暂停Strimzi Operator对集群的 reconcile 管控,避免手动操作被回滚:
oc annotate kafka <你的Kafka集群CR名称> strimzi.io/pause-reconciliation="true"
  1. 手动将Kafka StatefulSet副本数缩为0,等待所有Kafka Pod完全终止,此时关联的Azure磁盘会自动从节点卸载:
oc scale sts <Kafka StatefulSet名称> --replicas=0
  1. 批量编辑所有Kafka数据PVC,将spec.resources.requests.storage修改为目标容量(如257Gi)。
  2. 等待扩容完成,执行oc get pvc查看PVC状态,当status.capacity.storage更新为目标容量、且Resizing状态消失时,说明扩容完成。
  3. 将Kafka StatefulSet副本数恢复为原始值,等待所有Pod启动正常:
oc scale sts <Kafka StatefulSet名称> --replicas=<原始副本数>
  1. 验证Kafka集群读写正常、所有副本同步完成后,移除暂停注解恢复Operator管控:
oc annotate kafka <你的Kafka集群CR名称> strimzi.io/pause-reconciliation-
  1. 最后更新Kafka CR中spec.kafka.storage.size为扩容后的容量,避免后续Operator reconcile时出现配置不一致。

方案2:滚动扩容(集群无停机,适合生产环境)

适合Kafka集群副本数≥2、不能接受停机的场景:

  1. 先修改Kafka CR中spec.kafka.storage.size为目标容量,触发Operator滚动更新流程,首次扩容会报你遇到的磁盘挂载报错,无需处理。
  2. 查看第一个扩容失败的PVC对应的挂载节点:
oc describe pvc <扩容失败的PVC名称> | grep 'Mounted By:' -A1
  1. 排空该节点,将节点上的所有Pod(包括Kafka Pod)驱逐到其他节点,此时对应磁盘会被卸载:
oc adm drain <节点名称> --ignore-daemonsets --delete-local-data
  1. 等待该PVC扩容完成后,恢复节点的调度权限:
oc adm uncordon <节点名称>
  1. 等待Operator自动滚动到下一个Kafka副本,重复上述步骤2-4,直到所有PVC扩容完成。
注意事项
  • 操作前务必对Kafka所有Topic数据做全量备份,避免操作异常导致数据丢失。
  • 扩容完成后需验证所有PVC容量正确、Kafka集群所有副本处于ISR同步状态。

内容的提问来源于stack exchange,提问作者veerendra2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:45:03