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

如何在EKS的多个Deployment间共享EFS中的同一文件夹

解决EKS中EFS固定路径挂载问题

要让所有微服务都写入EFS的同一个固定目录(如/logs),避免自动生成带PVC ID的子目录,核心是调整EFS CSI驱动的挂载模式,以下是两种可行方案:

方案1:修改StorageClass为直接挂载模式(推荐)

你当前使用的provisioningMode: efs-ap(Access Point模式)会为每个PVC自动创建独立的Access Point,并在basePath下生成PVC ID命名的子目录。切换为直接挂载模式即可解决该问题:

修改后的StorageClass配置

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: dev-logs-efs-sc
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs  # 切换为直接挂载EFS文件系统模式
  fileSystemId: fs-xxxxxxxxxxx
  basePath: "/logs"  # 直接挂载此固定路径,无额外子目录

操作步骤

  1. 删除现有PVC和自动生成的PV:
    kubectl delete pvc dev-logs-efs-pvc
    kubectl delete pv <自动生成的PV名称>
    
  2. 应用修改后的StorageClass:
    kubectl apply -f storageclass.yaml
    
  3. 重新创建PVC:
    kubectl apply -f pvc.yaml
    
  4. 重启所有使用该PVC的Deployment,确保Pod挂载新的PV。

此方案下,所有Pod都会直接挂载EFS的/logs目录,重启、扩缩容时路径保持不变,所有微服务的日志会直接写入该目录。

方案2:使用静态PV绑定固定路径

如果需要更严格的路径控制,可以创建静态PV直接指向EFS的/logs路径,所有PVC绑定该PV:

静态PV配置

apiVersion: v1
kind: PersistentVolume
metadata:
  name: dev-logs-efs-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-xxxxxxxxxxx:/logs  # 直接指定EFS文件系统ID+固定路径

绑定静态PV的PVC配置

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dev-logs-efs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  volumeName: dev-logs-efs-pv  # 绑定上面的静态PV
  storageClassName: ""  # 禁用动态Provisioning

操作步骤

  1. 删除现有动态生成的StorageClass、PVC、PV
  2. 应用静态PV和PVC配置
  3. 重启Deployment完成挂载

注意事项

  • 确保EFS文件系统的/logs目录已存在(CSI驱动会自动创建不存在的目录)
  • 所有微服务必须使用同一个PVC,才能共享该挂载路径
  • 若之前有日志存于自动生成的pvc-xxx子目录,需手动迁移至/logs目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:24