【发布时间】:2021-10-11 11:54:27
【问题描述】:
我在 Kubernetes 中阅读了一些关于 Deployment 与 StatefulSet 的信息。当我们有一个有状态的应用程序时,我们通常需要StatefulSet,所以每个 pod 都可以有自己的卷。
现在,我的任务是为RabbitMq 引入持久性。我将只有一个 RabbitMq 的 pod 副本。我可以用Deployment 做吗?我看不出这有什么问题。那一个RabbitMq 副本将拥有自己的PersistentVolume(它不会与其他 pod 共享卷,因为我只有一个副本)。另外,我想说的是,如果我的RabbitMq pod 因任何原因重新启动,它将继续从与重新启动之前相同的存储中读取和写入。
我错过了什么吗?
【问题讨论】:
-
如果一个节点变得不可访问,它们只有不同的行为。
Deployment使用至少一种行为,而StatefulSet使用至多一种行为。 -
您还必须单独创建 PersistentVolumeClaim(StatefulSet 包含一个模板),特别是对于 RabbitMQ,手动设置 pod 的主机名。如果 StatefulSet 与您的应用程序匹配,则没有特别的理由避免使用它,即使您只打算运行 1 个副本。
-
@DavidMaze 我“避免”StatefulSet 的原因是我们目前没有持久性,我们目前正在使用 Deployment。所以,我建议切换到 StatefulSet,然后一位开发人员问我:“如果我们只有一个副本,我们不能坚持使用 Deployment,StatefulSet 有什么好处,一切都应该与 Deployment 一起工作? ”。而且我真的不明白为什么在我的特定情况下它不适用于部署。我不确定 pod 重新启动时会发生什么,它是否继续使用它在重新启动之前使用的相同卷?
标签: kubernetes kubernetes-statefulset kubernetes-deployment