You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes多个命名空间之间共享EFS存储卷

问题排查与解决方案

一、storageclass.storage.k8s.io "efs-sc" not found报错修复

首先确认集群中是否存在对应StorageClass,执行命令:
kubectl get storageclasses.storage.k8s.io
StorageClass属于集群级资源,只要创建成功所有命名空间均可直接调用,不存在命名空间无法识别的情况。出现该报错的唯一原因是集群中未成功创建名为efs-sc的StorageClass,或配置时名称拼写错误。

正确的EFS StorageClass配置示例如下:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: 替换为你的EFS文件系统ID
  directoryPerms: "700"
reclaimPolicy: Retain
volumeBindingMode: Immediate

创建完成后再次执行kubectl get sc确认efs-sc处于正常状态即可。

二、跨多命名空间共享EFS的两种实现方案

无需为每个命名空间创建独立StorageClass或PV,推荐以下两种成熟方案:

方案1:预创建共享PV,多命名空间直接绑定

适合需要所有命名空间访问同一份EFS数据的场景:

  1. 先创建全局共享PV,配置示例:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-shared-pv
spec:
  capacity:
    storage: 100Gi # EFS为弹性容量,该值仅做配额标识不限制实际使用
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: 替换为你的EFS文件系统ID
  1. 在任意需要使用EFS的命名空间中创建PVC,添加volumeName字段绑定共享PV即可,PVC配置示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-claim
  namespace: 替换为目标命名空间名称
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  volumeName: efs-shared-pv # 绑定预创建的共享PV
  resources:
    requests:
      storage: 5Gi

方案2:动态供给自动创建独立子目录

适合需要各命名空间数据逻辑隔离、但底层共用同一个EFS的场景:
确认EFS CSI驱动已配置正确的IAM权限后,直接在任意命名空间创建你原有格式的PVC即可,CSI驱动会自动在EFS下为每个PVC创建独立的访问点目录,所有目录底层均共用同一个EFS存储,你也可以直接登录EFS访问所有命名空间的目录实现跨命名空间数据共享。

三、错误认知纠正

你之前遇到的认证错误与多StorageClass配置无关,是EFS CSI驱动的IAM角色权限不足导致的。同一EFS支持绑定多个StorageClass,只是该场景下无创建多个StorageClass的必要。


内容的提问来源于stack exchange,提问作者Happy Machine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:24:01