基于社区对有状态应用的通用需求,K8S设计了一种有状态应用对象,也即StatefulSet。它可以为用户提供一组具有稳定、有序、唯一特性的应用实例集合。如下图所示:
1. 稳定
稳定的podName:{stsName}-{序号[0-n]}
稳定的网络标识: {podName}. {headless-svcName}.{namespace}.svc.cluster.local
稳定的存储关系:{volumeClaimTemplatesName}-{podName}
2. 有序
按照编号从小到大顺序的部署:0 ~ n
按照编号从大到小进行删除:n ~ 0
支持有序的扩缩容和升级策略
3. 唯一
每个pod拥有一个唯一的网络标识: {podName}. {headless-svcName}.{namespace}.svc.cluster.local
从下图可以看出,与Deployment通过ReplicaSet来管理pod生命周期不同,StatefulSet是直接管理pod的。