EKS集群中ReadWriteMany动态PVC处于Pending状态的解决求助
问题:AWS EKS中EFS CSI驱动无法动态创建PV导致PVC处于Pending状态
环境与现状
- 已创建EFS文件系统,StorageClass
efs-sc创建成功:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE efs-sc efs.csi.aws.com Delete Immediate false 5m17s
- PVC
efs-claim-1持续处于pending状态,事件提示:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ExternalProvisioning 2m18s (x17 over 6m18s) persistentvolume-controller waiting for a volume to be created, either by external provisioner "efs.csi.aws.com" or manually created by system administrator
- 使用的清单文件(StorageClass、PVC、Deployment)如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs-ap fileSystemId: fs-XXXX directoryPerms: "700" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: efs-claim-1 spec: accessModes: - ReadWriteMany storageClassName: efs-sc resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: annotations: name: debug-app spec: replicas: 1 selector: matchLabels: component: debug-app template: metadata: labels: app: debug-app component: debug-app spec: containers: - image: ubuntu:20.04 imagePullPolicy: IfNotPresent name: debug-app command: ["/bin/sh","-c"] args: - sleep 3650d ports: - containerPort: 8000 resources: limits: cpu: 2 memory: 4Gi requests: cpu: 10m memory: 16Mi volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: efs-claim-1
- 未使用Fargate Profile,已重新创建EFS存储但问题依旧。
解决方法
1. 确认EFS CSI驱动部署状态
动态PV创建依赖EFS CSI驱动,先检查驱动组件是否正常运行:
kubectl get pods -n kube-system -l app=efs-csi-controller kubectl get pods -n kube-system -l app=efs-csi-node
- 确保所有Pod状态为
Running,若有异常,查看日志定位问题:
kubectl logs -n kube-system <efs-csi-controller-pod-name> -c efs-plugin kubectl logs -n kube-system <efs-csi-node-pod-name> -c efs-plugin
2. 验证EFS与EKS集群的网络连通性
- 确认EFS挂载目标与EKS节点处于同一VPC,节点所在子网的安全组需允许NFS流量(端口2049)进出EFS的安全组。
- 登录EKS节点,手动挂载EFS测试连通性:
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 <efs-file-system-id>.efs.<region>.amazonaws.com:/ /tmp/test-efs
挂载失败则检查安全组规则或VPC路由配置。
3. 修正StorageClass参数配置
- 替换
fileSystemId为实际的EFS文件系统ID,确保无拼写错误。 provisioningMode: efs-ap为访问点模式,若不需要访问点,可改为直接挂载模式efs,更新StorageClass后重建PVC:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs fileSystemId: <实际EFS ID> directoryPerms: "700"
4. 检查IAM权限配置
EFS CSI驱动需要以下IAM权限来创建访问点和挂载存储:
elasticfilesystem:DescribeFileSystemselasticfilesystem:CreateAccessPointelasticfilesystem:DeleteAccessPointelasticfilesystem:DescribeAccessPoints
若使用IAM Roles for Service Accounts (IRSA),需确认CSI控制器的服务账户已关联包含上述权限的IAM策略。
5. 调整PVC存储请求配置
EFS为弹性存储,storage:5Gi仅作为标识,不限制实际容量。可尝试移除resources.requests.storage字段,或保留但确认无参数冲突。
验证步骤
完成上述检查后,重建PVC验证结果:
kubectl delete pvc efs-claim-1 kubectl apply -f <你的清单文件路径>
查看PVC状态:
kubectl get pvc efs-claim-1
若状态变为Bound,则动态PV创建成功。
内容的提问来源于stack exchange,提问作者Reda E.
相关产品推荐
相关产品推荐

