背景
由于ReplicaSet、ReplicationController、Deployment等这些控制器都是无状态的,但是我们想要使用k8s来编排有状态的服务如数据库等,但因为有状态服务的复杂性,为此,k8s 推出了面向有状态服务的工作负载 StatefulSet。网络持久化、存储持久化,部署持久化
有状态服务
-认为所有pod都是一样的,不具备与其他实例有不同的关系。
- 没有顺序的要求。
- 不用考虑再哪个Node运行。
- 随意扩容缩容。
无状态服务
- 集群节点之间的关系。
- 数据不完全一致。
- 实例之间不对等的关系。
- 依靠外部存储的应用。
- 通过dns维持身份
如何解决无状态的?
k8s 推出了面向有状态服务的工作负载 StatefulSet(kind:StatefulSet)。其管理的 pod 具有如下特点:
- 唯一性 - 对于包含 N 个副本的 StatefulSet,每个 pod 会被分配一个 [0,N)范围内的唯一序号。
- 顺序性 - StatefulSet 中 pod 的启动、更新、销毁默认都是按顺序进行的。
- 稳定的网络身份标识 - pod 的主机名、DNS 地址不会随着 pod 被重新调度而发生变化。
- 稳定的持久化存储 - 当 pod 被重新调度后,仍然能挂载原有的 PersistentVolume,保证了数据的完整性和一致性。 <