【问题标题】:What happens to persistent volume if the StatefulSet got deleted and re-created?如果 StatefulSet 被删除并重新创建,持久卷会发生什么?
【发布时间】:2019-11-21 11:55:57
【问题描述】:

我将 Kafka 和 zookeeper 作为 statefulset 并将 Kafka 暴露在集群外部。但是,每当我尝试删除 Kafka statefulset 并重新创建一个时,数据似乎消失了? (当我尝试使用kafkacat 消费所有消息时,旧消息似乎消失了)即使它使用相同的 PVC 和 PV。我目前使用 EBS 作为我的持久卷。

有人可以向我解释当我删除 statefulset 时 PV 发生了什么吗?请帮帮我。

【问题讨论】:

  • 删除statefulsets并检查是否可以看到ebs卷文件夹中的数据。

标签: kubernetes apache-kafka


【解决方案1】:

我可能会看看持久卷是如何创建的。 如果你运行命令 kubectl get pv 你可以看到Reclaim policy,如果它被设置为retain,那么即使有状态集被删除,你的volume也会继续存在

【讨论】:

  • 回收策略设置为保留。我想每当我尝试重新创建或重新开始时,我都会看到它连接到现有的 pvc 和 pv,但似乎之前的所有数据都被清除了。
  • 不应该这样!即使在删除之后,持久卷也应该能够保存数据。我的猜测是,当你重新创建一个有状态的集合时,它可能是在创建一个新的 PV?
  • 不,我认为它仍在使用相同的 pv。可能重新创建的 Kafka 集群找不到现有数据?
【解决方案2】:

这是预期的行为,因为新的 statefulSet 将创建一组新的 PV 并重新开始。 (如果没有其他选择,它也可以随机降落在旧 PV 上,例如本地卷)

StatefulSet 并不意味着 kubernetes 会记住您在您删除的其他旧 statefulset 中所做的事情。

Statefulset 表示如果 Pod 因某种原因重新启动或重新创建,将为其分配相同的卷。这并不意味着卷将在 StatefulSet 中分配。

【讨论】:

  • 你有这方面的资料吗?这似乎并不普遍正确。
【解决方案3】:

我假设您的情况是您有一个 statefulset,其中有一个 persistentvolumeclaim 定义 - 或者它只是引用现有卷 - 您尝试删除它。

在这种情况下,持久卷将保留在那里。 pvc也不会消失;

这样您就可以根据需要将相同的卷重新挂载到不同的 statefulset pod - 或更新之前的一个。

如果你想删除持久化卷,你应该删除 pvc,buond PV 就会消失。

【讨论】:

    猜你喜欢
    • 2016-10-10
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多