EKS环境下AWS EFS CSI Driver持久卷重挂载方案咨询
这个通过预先创建EFS访问点、配置静态PersistentVolume(PV)的方案是行业内广泛采用的成熟方案,完全可以满足你要求的「StatefulSet卸载后数据卷保留、后续部署重新挂载」的需求,很多用户都通过这个方案解决了动态配置带来的挂载问题。
关键配置要点
VolumeHandle格式必须准确
你模板里的{{ $v.spec.csi.volumeHandle }}变量必须严格按照fs-<EFS文件系统ID>:/ap-<访问点ID>的格式配置,这是EFS CSI Driver识别静态PV与对应访问点绑定的核心标识,格式错误会直接导致挂载失败。PersistentVolumeReclaimPolicy设为Retain
一定要确保PV的persistentVolumeReclaimPolicy配置为Retain(你的模板已经预留了这个变量),这样当StatefulSet对应的PVC被删除时,PV不会被自动回收,EFS访问点下的数据会完整保留,后续重新创建匹配的PVC就能自动绑定该PV并恢复数据。StorageClass匹配规则
静态PV指定的storageClassName必须和StatefulSet的volumeClaimTemplates中PVC引用的StorageClass名称完全一致。这个StorageClass不需要配置动态Provisioner,只需创建一个空的StorageClass(或者使用集群默认的)即可,核心是名称匹配。StatefulSet的PVC模板对齐
StatefulSet的PVC模板里的accessModes、storageClassName必须和静态PV的配置完全匹配,Kubernetes才能自动完成PV与PVC的绑定。
为什么动态配置方案会失败
你之前用的动态配置方案,默认情况下当StatefulSet卸载、PVC被删除时,动态Provisioner创建的EFS访问点和对应的PV会被自动清理(ReclaimPolicy默认是Delete),导致数据卷无法重新挂载。而静态配置通过预先创建访问点+Retain策略,从根源上避免了数据卷被回收的问题,这也是AWS支持推荐该方案的核心原因。
内容的提问来源于stack exchange,提问作者Theo Sweeny

