StatefulSet介绍
从1.9 GA版本开始,StatefulSet成为kubernetes的稳定特性。StatefulSet是一种副本控制器,管理pod的部署、缩放等。与ReplicaSet、Deployment不同的是,它对集合中的pod提供顺序、唯一性保证。StatefulSet为集合中的每个pod分配唯一、持久的pod名称、DNS解析、持久化存储,并且负责将这些标识粘在pod上,无论pod调度到任何节点上。
什么时候需要使用StatefulSet
当应用的需求,与下述中的一条或者多条相符时,使用StatefulSet就会有价值:
- 唯一、稳定的网络标识(pod原本没有网络标识,service有)。
- 稳定、持久化存储。
- 多个副本有序、优雅的部署与缩放。
- 多个副本有序、优雅的部署与缩放。
- 多个副本有序、优雅的自动滚动升级。
StatefulSe限制
- StatefulSet特性,1.5之前的版本不可用,1.9之前的版本不稳定。
- 必需为pod提供持久化存储。
- 删除或者缩容StatefulSet时,出于数据安全的目的,不会自动删除与pod相关的持久化存储,需要手动处理。
- 当前StatefulSet需要通过无头服务为其所管理的pod提供网络标识,或者说DNS条目,用户需手动创建无头服务。
唯一、稳定pod名称
StatefulSet中的pod名称由StatefulSet配置中的name加上表示序号的整数,整数从0开始取值,最大值为副本数量减1.
唯一、稳定网络ID
StatefulSet通过与其相关的无头服务为每个pod提供DNS解析条目。假如无头服务的DNS条目为:
"$(service name).$(namespace).svc.cluster.local",
那么pod的解析条目就是"$(pod name).$(service name).$(namespace).svc.cluster.local",每个pod name也是唯一的。
稳定持久存储
通过 PersistentVolume 提供持久化存储。