有状态(stateful)workload(数据库、队列、集群化存储)需要稳定的身份和持久的存储——这是 Deployment 无法提供的。StatefulSet 给 Pod 稳定的名字和有序的生命周期;PersistentVolume (PV) 与 PersistentVolumeClaim (PVC) 给它们能比 Pod 更长寿的存储。
为什么 Deployment 不够用
Deployment 的 Pod 是可互换的:随机名字 (web-7f9-abc)、任意顺序、每个 Pod
之间不共享任何东西。这对无状态应用很完美——但一个数据库副本需要:
→ 一个稳定的网络身份(好让对等者能找到它:db-0, db-1, db-2)
→ 它自己的、能在重启/重新调度后存活的持久磁盘
→ 有序、可控的启动/扩缩(先起 db-0 再起 db-1)
StatefulSet 恰恰提供了这些。
