EFS CSI Driver
The EFS CSI driver provides shared, multi-node file storage that many pods can mount at once.
When several pods — possibly across different nodes and AZs — need to share the same files, use Amazon EFS through the EFS CSI driver. EFS is a managed NFS file system.
EBS vs EFS
| EBS | EFS | |
|---|---|---|
| Access mode | ReadWriteOnce (one node) | ReadWriteMany (many nodes) |
| Type | Block volume | Shared file system |
| Best for | Databases, single writer | Shared content, uploads, web assets |
| Fargate support | No | Yes |
Because EFS is a network file system, it isn't tied to one AZ — the same volume mounts from any node, which is why it also works with Fargate.
Example
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: fs-0123456789abcdef0
directoryPerms: "700"When to use it
- A content management platform mounts the same EFS volume across 20 pods so all instances read and write to a shared media upload directory.
- A machine learning team uses EFS to share training datasets across multiple GPU pods without copying files to each pod's local disk.
- A Jenkins CI system mounts an EFS volume for its home directory so job workspaces persist across pod restarts and rescheduling.
More examples
Install EFS CSI driver
Installs the EFS CSI driver via Helm using a pre-created IRSA service account with EFS mount permissions.
helm repo add aws-efs-csi-driver \
https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm upgrade --install aws-efs-csi-driver \
aws-efs-csi-driver/aws-efs-csi-driver \
--namespace kube-system \
--set controller.serviceAccount.create=false \
--set controller.serviceAccount.name=efs-csi-controller-saEFS StorageClass with dynamic provisioning
A StorageClass that provisions a unique EFS Access Point per PVC, isolating each workload's data within a shared file system.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: fs-0abc123456789def
directoryPerms: "700"ReadWriteMany PVC for shared storage
A PVC with ReadWriteMany access mode, allowing multiple pods across different nodes to mount and write to the same EFS volume simultaneously.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-media
spec:
accessModes: [ReadWriteMany]
storageClassName: efs-sc
resources:
requests:
storage: 5Gi
Discussion