kubernetes: Mount an existing EBS volume to a pod

2 min read

If you have an existing EBS volume that you want to use on your EKS cluster, or you don't want to let Kubernetes to manage your volumes, you can use awsElasticBlockStore to link an existing EBS volume to a PersistentVolume or use it directly as a volume on a pod spec:

If we want to use a PersistentVolume object we will have to create using the following spec, adjusting it's size and volumeID:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: test-ebs
spec:
  capacity:
    storage: 1Gi
accessModes:
  - ReadWriteOnce
awsElasticBlockStore:
  volumeID: vol-0f188b7fd87c91a7e
  fsType: ext4

But we can also mount it directly into a pod as a volume:

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod-ebs-volume
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-ebs
      name: ebs-volume
  volumes:
  - name: ebs-volume
    awsElasticBlockStore:
      volumeID: vol-0f188b7fd87c91a7e
      fsType: ext4

This can also be used on any object containing a pod spec template, such as Deployment, DaemonSet, Job...

By manually managing EBS volumes we are going to give away the automatic provision and automatic Volume resizing, nevertheless it is still possible.


Posted on 24/05/2021