为什么有状态集?无状态Pod可以使用持久卷吗?

时间:2017-01-19 02:37:27

标签: kubernetes

我是Kubernetes的新手,可能会被推测,所以如果我对术语的使用不太正确,请原谅我。我希望我的问题的意图是明确的。

我试图绕过Stateful Sets。它们的使用与使用"无状态"有何不同?具有持续卷的窗格?也就是说,假设"正常" Pod可能声称持久存储,我错过了哪些明显的东西需要这个新构造(有序启动/停止等)?

1 个答案:

答案 0 :(得分:80)

是的,常规pod可以使用持久卷。但是,有时您有多个逻辑上形成"组"的pod。这方面的例子是数据库副本,ZooKeeper主机,Kafka节点等。在所有这些情况下,有一堆服务器,它们一起工作并相互通信。他们的特别之处在于团队中的每个人都有自己的身份。例如,对于数据库集群,一个是主数据库,两个是关注者,每个关注者与主服务器通信,让它知道它有什么并且没有同步。所以追随者都知道" db-x-0"是主人,主人知道" db-x-2"是一个追随者,所有数据都达到某一点,但仍需要超出该数据的数据。

在这种情况下,你需要一些你可以轻易从常规吊舱中获取的东西:

  1. 一个可预测的名称:你想要开始你的pod告诉他们在哪里找到对方,这样他们就可以组成一个集群,选出一个领导等等,但你需要事先知道他们的名字才能做到这一点。普通的播客名称是随机的,因此您无法提前了解它们。
  2. 稳定的地址/ DNS名称:您希望步骤(1)中可用的任何名称保持不变。如果正常的pod在另一台主机上重新启动(重新部署,运行它的主机等),它将获得一个新名称和一个新的IP地址。
  3. 组中个人与其持久性卷之间的持久链接:如果运行其中一个数据库主服务器的主机已停止,则会将其移至新主机但应连接相同持久量与只有1个卷,其中包含正确的数据#34;个人"。因此,例如,如果您重新部署3个数据库主机组,您希望相同的个人(通过DNS名称和IP地址)获得相同的持久卷,以便主服务器仍然是主服务器并且仍然具有相同的数据,replica1获取它& #39; s数据等
  4. StatefulSets解决了这些问题,因为它们提供了(引自https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/):

    1. 稳定,独特的网络标识符。
    2. 稳定,持久的存储。
    3. 有序,优雅的部署和扩展。
    4. 有序,优雅的删除和终止。
    5. 我没有真正谈论过(3)和(4)但是这也可以帮助群集,因为你可以告诉第一个部署成为主人,下一个找到第一个并将其视为主人等

      有些人已经注意到,通过使用常规的pod和服务,你确实可以一些具有相同的好处,但它的工作要多得多。例如,如果您需要3个数据库实例,则可以手动创建3个部署和3个服务。请注意,您必须手动创建 3部署,因为您无法在部署中为单个pod提供服务点。然后,为了扩展您,您需要手动创建另一个部署和另一个服务。这确实有效,并且在PetSet / PersistentSet出现之前有点常见。请注意,它缺少上面列出的一些好处(例如,持久性卷映射和固定启动顺序)。