I’ve been building a system recently on AWS EKS and using EFS filesystems as volumes for persistent storage.
I initially only had one container that required any storage, but as I added a second I ran into the issue that there didn’t look to be a way to bind a EFS volume to a specific PersistentVolumeClaim so no way to make sure the same volume was mounted into the same container each time.
A Pod requests a volume by referencing a PersistentVolumeClaim as follows:
apiVersion: v1 kind: Pod metadata: name: efs-app spec: containers: - name: app image: centos command: ["/bin/sh"] volumeMounts: - name: efs-volume mountPath: /data volumes: - name: efs-volume persistentVolumeClaim: claimName: efs-claim
The PersistentVolumeClaim would look:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: efs-claim spec: accessModes: - ReadWriteMany storageClassName: efs-sc resources: requests: storage: 5Gi
You can bind the EFS volume to a PersistentVolume as follows
apiVersion: v1 kind: PersistentVolume metadata: name: efs-persistent-volume spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc csi: driver: efs.csi.aws.com volumeHandle: fs-6eb2fc16
volumeHandle points to the EFS volume you want to back it.
If there is only one PersistentVolume then there is not a problem as the PersistentVolumeClaim will grab the only one available. But if there are more than one then you can include the
volumeName in the PersistentVolumeClaim description to bind the two together.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: efs-claim spec: accessModes: - ReadWriteMany storageClassName: efs-sc resources: requests: storage: 5Gi volumeName: efs-persistent-volume
After a bit of poking around I found this Stack Overflow question which pointed me in the right direction.