在Kubernetes中部署具有静态卷配置的statefulSet,但控制器坚持使用动态卷配置

92次阅读
没有评论

问题描述

想要部署一个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 ProvisioningDynamic部分。
2. 或者,尝试删除集群中的默认storage class,以显式地使用给定的PV和PVC配置。

方案2

根据用户的评论,问题可能是由于集群中存在默认的StorageClass,导致PVC被强制为动态配置。可以尝试通过以下方式解决:
1. 指定一个storageClassName,因为当未指定时,Kubernetes将使用默认的storage class。可以参考Kubernetes文档中的Dynamic ProvisioningDynamic部分。
2. 或者,尝试删除集群中的默认storage class,以显式地使用给定的PV和PVC配置。

请注意,方案1和方案2是相同的解决方法,只是表达方式不同。

以上是解决该问题的两种可能方案。根据用户的回答,问题可能是由于集群中存在默认的StorageClass,导致PVC被强制为动态配置。用户可以尝试指定一个storageClassName,或者删除集群中的默认storage class,以显式地使用给定的PV和PVC配置。

如果以上解决方案无法解决问题,请提供更多详细信息,以便我们能够更好地帮助您解决问题。

希望对您有所帮助!如果有任何其他问题,请随时提问。

正文完