我是Kubernetes的新手,可能会被推测,所以如果我对术语的使用不太正确,请原谅我。我希望我的问题的意图是明确的。
我试图绕过Stateful Sets。它们的使用与使用"无状态"有何不同?具有持续卷的窗格?也就是说,假设"正常" Pod可能声称持久存储,我错过了哪些明显的东西需要这个新构造(有序启动/停止等)?
答案 0 :(得分:80)
是的,常规pod可以使用持久卷。但是,有时您有多个逻辑上形成"组"的pod。这方面的例子是数据库副本,ZooKeeper主机,Kafka节点等。在所有这些情况下,有一堆服务器,它们一起工作并相互通信。他们的特别之处在于团队中的每个人都有自己的身份。例如,对于数据库集群,一个是主数据库,两个是关注者,每个关注者与主服务器通信,让它知道它有什么并且没有同步。所以追随者都知道" db-x-0"是主人,主人知道" db-x-2"是一个追随者,所有数据都达到某一点,但仍需要超出该数据的数据。
在这种情况下,你需要一些你可以轻易从常规吊舱中获取的东西:
StatefulSets解决了这些问题,因为它们提供了(引自https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/):
我没有真正谈论过(3)和(4)但是这也可以帮助群集,因为你可以告诉第一个部署成为主人,下一个找到第一个并将其视为主人等
有些人已经注意到,通过使用常规的pod和服务,你确实可以一些具有相同的好处,但它的工作要多得多。例如,如果您需要3个数据库实例,则可以手动创建3个部署和3个服务。请注意,您必须手动创建 3部署,因为您无法在部署中为单个pod提供服务点。然后,为了扩展您,您需要手动创建另一个部署和另一个服务。这确实有效,并且在PetSet / PersistentSet出现之前有点常见。请注意,它缺少上面列出的一些好处(例如,持久性卷映射和固定启动顺序)。