GKE中创建Redis集群VolumeSnapshot报错:无法找到CSI PersistentVolumeSource
问题根源
报错Failed to create snapshot content with error cannot find CSI PersistentVolumeSource for volume pvc-0c760ee2-a999-4c18-b103-fd2ae0922ecf的核心原因是:你尝试创建快照的PVC对应的PV并非由CSI驱动(pd.csi.storage.gke.io)创建,而是使用了GKE的legacy存储驱动(gcePersistentDisk),而VolumeSnapshot仅支持CSI类型的PV。
验证问题
查看目标PV的驱动类型:
kubectl describe pv pvc-0c760ee2-a999-4c18-b103-fd2ae0922ecf检查输出中
PersistentVolumeSource字段,若显示为gcePersistentDisk而非csi,则确认是存储驱动不匹配问题。检查集群存储类的驱动类型:
kubectl get storageclasses.storage.k8s.io查看存储类的
PROVISIONER列,若默认存储类的提供者是kubernetes.io/gce-pd(legacy)而非pd.csi.storage.gke.io(CSI),则Bitnami Redis集群默认会使用这个legacy存储类创建PV。
解决方案
1. 重新部署Redis集群并指定CSI存储类
GKE默认提供的CSI存储类通常名为standard-rwo,你可以在安装/升级Redis集群时指定该存储类:
helm upgrade --install redis-cluster bitnami/redis-cluster \ --set persistence.storageClass=standard-rwo
或者修改Chart的values.yaml,将persistence.storageClass设置为你的CSI存储类名称。
2. 验证新PV的CSI类型
重新部署后,查看新创建的PV:
kubectl describe pv <新PVC对应的PV名称>
确认PersistentVolumeSource下存在csi字段,且driver为pd.csi.storage.gke.io。
3. 重新创建VolumeSnapshot
此时再执行你已编写的VolumeSnapshot资源定义,即可正常创建快照。
补充说明
若无法重新部署集群,需手动将数据从legacy PV迁移到CSI PV,步骤较为繁琐(包括创建新CSI PVC、拷贝数据、切换Pod挂载),因此推荐直接重新部署集群并使用CSI存储类。
内容的提问来源于stack exchange,提问作者Márton Péntek

