在Kubernetes集群中的应用大致可分为无状态应用和有状态应用这两种类型。这两种应用对存储的需求不同。
Kubernetes使用ReplicaSet来保证应用Pod实例的在线数量。如果应用的某个实例由于某种原因崩溃了(如Pod所在的宿主机出故障了),ReplicaSet会立刻用相同模板创建并启动一个新实例来替代它。
由于是无状态的应用,新实例与旧实例一模一样,所以新实例能做到对旧实例的无损替代。此外,Kubernetes通过负载均衡Service的方式,对外提供一个稳定的访问接口,实现应用的高可用。
对于有状态的应用,Kubernetes引入了StatefulSet。StatefulSet配合PVC和PV,可以将应用的状态存储到远端。这样的应用Pod在遇到宿主机等的故障迁移后,通过复用之前的远端存储,可实现应用带状态的迁移。
而Stateful Set是通过保持其管理的每个Pod的名字的有序性和不变性的方式,建立了Pod名字与该Pod使用的存储(通过PVC来描述)的一一对应关系,从而保证了同名的Pod发布或迁移过程中始终可以使用“同一份”远程存储。