在不同的命名空间上添加 PersistentVolumeClaim 并出现错误“无法使用 StorageClass 提供卷。缺少 provisioningMode 参数”

Adding PersistentVolumeClaim on a different namespace with error 'failed to provision volume with StorageClass.. Missing provisioningMode parameter"

我正在关注 https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html 到 link EFS 到 EKS。 我的 k8s 集群下有两个命名空间:devstage,据我了解,我需要有两个映射到共享 PersistentVolume 和 StorageClass 的 PersistentVolumeClaims。所以在我 运行 下面 3 个命令之后:

kubectl apply -f specs/pv.yaml
kubectl apply -f specs/claim.yaml
kubectl apply -f specs/storageclass.yaml

并且从 kubectl get sc,pv,pvc1 -n dev 开始,我能够很好地看到所有 3 个项目。但是,当我尝试添加到 stage 命名空间 - kubectl apply -f specs/claim.yaml --namespace=stage 时,我遇到了以下错误,因为 efs-claim 陷入了永远的 PENDING 状态:

Name:          efs-claim
Namespace:     stage
StorageClass:  efs-sc
Status:        Pending
Volume:        
Labels:        <none>
Annotations:   volume.beta.kubernetes.io/storage-provisioner: efs.csi.aws.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Used By:       foo-api-stage-chart-12345-abcde
               foo-api-stage-chart-12345-abcde
Events:
  Type     Reason                Age                From                                                                              Message
  ----     ------                ----               ----                                                                              -------
  Normal   Provisioning          107s               efs.csi.aws.com_ip-xxx  External provisioner is provisioning volume for claim "stage/efs-claim"
  Warning  ProvisioningFailed    107s               efs.csi.aws.com_ip-xxx  failed to provision volume with StorageClass "efs-sc": rpc error: code = InvalidArgument desc = Missing provisioningMode parameter
  Normal   ExternalProvisioning  4s (x8 over 107s)  persistentvolume-controller                                                       waiting for a volume to be created, either by external provisioner "efs.csi.aws.com" or manually created by system administrator

是什么原因造成的

efs.csi.aws.com_ip-xxx failed to provision volume with StorageClass "efs-sc": rpc error: code = InvalidArgument desc = Missing provisioningMode parameter

我不必在 dev 命名空间上提供这样的参数,所以为什么像 stage 这样的不同命名空间需要它?

要解决您看到的错误,请重新应用您的 StorageClass:

...
parameters:
  provisioningMode: efs-ap
  fileSystemId: <ID of the file system created on EFS>
...

如果多个 pods 转到 read/write 到文件系统,请重新应用 PersistentVolume:

...
spec:
  ...
  accessModes:
  - ReadWriteMany
...

如果问题仍然存在,请 post 在您的问题中添加您的 StorageClass、PersistentVolumeClaim 和 PersistentVolume 规范。