问题描述
想要部署一个statefulSet,该statefulSet将使用基于标签的静态卷配置(声明现有PVs)。然而,持久卷控制器似乎正在尝试动态配置存储,因为当用户运行kubectl describe pvc db-data-db-N
时,事件日志中显示如下信息:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 9s (x3 over 21s) persistentvolume-controller Failed to provision volume with StorageClass "db-data-storage": claim.Spec.Selector is not supported for dynamic provisioning on AWS
用户已经使用以下格式预配置了PVs(使用Helm):
kind: PersistentVolume
apiVersion: v1
metadata:
name: db-data-{{ $volIndex }}
labels:
restoredFromBackup: "true"
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
volumeID: {{ $volId }}
fsType: ext4
以下是用户的PVC模板:
volumeClaimTemplates:
- metadata:
name: db-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
selector:
matchLabels:
restoredFromBackup: "true"
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户的回答,问题可能是由于集群中存在默认的StorageClass,导致PVC被强制为动态配置。可以尝试通过以下方式解决:
1. 指定一个storageClassName,因为当未指定时,Kubernetes将使用默认的storage class。可以参考Kubernetes文档中的Dynamic Provisioning和Dynamic部分。
2. 或者,尝试删除集群中的默认storage class,以显式地使用给定的PV和PVC配置。
方案2
根据用户的评论,问题可能是由于集群中存在默认的StorageClass,导致PVC被强制为动态配置。可以尝试通过以下方式解决:
1. 指定一个storageClassName,因为当未指定时,Kubernetes将使用默认的storage class。可以参考Kubernetes文档中的Dynamic Provisioning和Dynamic部分。
2. 或者,尝试删除集群中的默认storage class,以显式地使用给定的PV和PVC配置。
请注意,方案1和方案2是相同的解决方法,只是表达方式不同。
以上是解决该问题的两种可能方案。根据用户的回答,问题可能是由于集群中存在默认的StorageClass,导致PVC被强制为动态配置。用户可以尝试指定一个storageClassName,或者删除集群中的默认storage class,以显式地使用给定的PV和PVC配置。
如果以上解决方案无法解决问题,请提供更多详细信息,以便我们能够更好地帮助您解决问题。
希望对您有所帮助!如果有任何其他问题,请随时提问。