StatefulSet扩容时Pod必须按序创建并绑定对应PV,需预置带序号的PV(如pv-0、pv-1)且reclaimPolicy设为Retain;PVC通过volumeClaimTemplates自动生成带序号后缀的实例(如www-web-0),并严格按OrderedReady策略顺序调度,任一PVC未Bound将阻塞后续Pod创建。

StatefulSet扩容时,每个Pod必须按序创建并挂载对应PV,确保数据隔离与顺序性;若跳过序号或并发创建,会导致PV绑定错乱、Pod启动失败或数据覆盖。
准备带唯一标识的PV和PVC模板
先为每个预期副本创建独立PV,名称需含序号(如pv-0、pv-1),且spec.persistentVolumeReclaimPolicy设为Retain——【否则扩容后删除Pod,PV被自动回收,下一次同序号Pod无法复用原数据】。
在StatefulSet的volumeClaimTemplates中定义PVC模板,名称固定(如www),但accessModes、resources.requests.storage必须满足后端存储要求;Kubernetes会基于此模板为每个Pod生成带序号后缀的PVC(www-web-0、www-web-1)。
配置StatefulSet的有序部署策略
设置spec.podManagementPolicy为OrderedReady,这是默认值,但必须显式确认未被覆盖;同时确保spec.updateStrategy.type为RollingUpdate(默认),避免误设为OnDelete导致扩容不触发新Pod创建。
关键点:spec.revisionHistoryLimit建议设为2以上,防止旧ReplicaSet被清空后无法回滚;若设为0,缩容再扩容可能因无历史版本而创建错误序号的Pod。
执行按序扩容操作
第一步:运行kubectl scale sts 【your-statefulset-name】 --replicas=3,命令立即返回,但实际Pod创建严格按0→1→2顺序进行。
第二步:等待web-0处于Running且Ready=True后,控制器才开始创建web-1;此时它会查找名为www-web-1的PVC,再绑定到预置的pv-1(或动态供给的新PV);【若pv-1不存在且未配置StorageClass,web-1将卡在Pending状态,web-2不会启动】。
第三步:依次观察kubectl get pvc -l statefulset.kubernetes.io/pod-name,确认每个PVC都处于Bound状态且绑定到预期PV;任意一个PVC未Bound,后续序号Pod均不会调度。


















