Persistent Volumes
In this tutorial, we are going to discuss about Persistent Volumes in Kubernetes. When we created volumes in the previous tutorial, We configured volumes within the pod definition file so every configuration information required to configure storage for the volume goes within the POD definition file.
Now when you have a large environment with a lot of users deploying a lot of PODs, the users would have to configure storage every time for each POD.
Whatever storage solution is used the users who deploys the PODs would have to configure that on all pod definition files in his own environment.
Every time it changes to be made, The user would have to make them on all of his PODs. Instead you would like to manage storage more centrally.
A Persistent Volume is a cluster-wide pool of storage volumes configured by an administrator to be used by users deploying application on the cluster. The users can now select storage from this pool using Persistent Volume Claims.
Let us now create a persistent volume.
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-vol
spec:
accessModes: [ "ReadWriteOnce" ]
capacity:
storage: 1Gi
hostPath:
path: /home/ashok/data
Here accessModes defines how a volume should be mounted on the hosts whether in a read only mode or read write mode etc. The supported values are
- ReadOnlyMany
- ReadWriteOnce
- ReadWriteMany
Next is the capacity. Here we have to specify the amount of storage to be reserved for this persistent volume which is set to 1 GB here.
Next comes the volume type. We will start with the host path option that uses storage from the nodes local directory. Remember this option is not to be used in a production environment.
To create the persistent volume run the following command
$ kubectl create -f pv-definition.yaml
persistentvolume/pv-vol created
To list the persistent volumes run the following command
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-vol 1Gi RWO Retain Available 3min
Now to delete the persistent volume run the following command
$ kubectl delete pv pv-vol
persistentvolume "pv-vol" deleted