【问题标题】:If we have only one replica of the stateful pod, can we use Deployment resource instead of StatefulSet?如果我们只有一个 stateful pod 的副本,我们可以使用 Deployment 资源而不是 StatefulSet 吗?
【发布时间】:2021-10-11 11:54:27
【问题描述】:

我在 Kubernetes 中阅读了一些关于 DeploymentStatefulSet 的信息。当我们有一个有状态的应用程序时,我们通常需要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


【解决方案1】:

即使有 1 个副本,statefulset 仍然可以为您提供一些东西,例如稳定的网络 ID。您说得对,大多数功能都不再重要,但这确实取决于您的特定需求。

【讨论】:

  • 我们不是在谈论稳定的网络 ID(不确定我是否需要稳定的网络 ID)。但是如果我们不需要稳定的网络 ID,而我只有一个副本,我真的需要 statefulset 来引入持久性吗?如果我们重新启动 Pod,部署管理的 Pod 的持久性会发生什么?
  • 与副本的持久性没有直接区别:1。 PVC 是 PVC,PV id 是 PV,实际上是相同的底层内容。
猜你喜欢
  • 2017-04-29
  • 2016-05-22
  • 2021-05-30
  • 1970-01-01
  • 2020-07-12
  • 2013-06-26
  • 2019-12-08
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多