kubernetes controller源码解读之StatefulSet
1. StatefulSet应用场景说明
Deployment部署的无状态应用,应用的各个实例是相互独立的。但是在实际应用中存在如下需求:
- 应用的各个实例之间有一定依赖关系。如多个实例组成一个集群(比如ETCD集群),实例之间需要通过通信选出leader。这就要求各个实例的网络地址必须固定(不管是实例重启,还是热迁移到别的节点等实例的网络地址都必须保持不变),否则就无法组成稳定集群。
- 应用的实例和存储数据需要绑定。比如部署mysql集群(主备模式),两个实例通过 sharding来保存数据,所以访问这两个实例是分库之后不同的数据。而用户会要求访问两个实例返回数据是稳定的,也就是要求实例和存储数据必须要绑定(不管是实例是重启,或者迁移到其他节点),实例对应的 storage必须固定。
- 应用的各实例启动需要遵循一定的顺序。比如首先启动的实例必