Bootstrap FreeKB - OpenShift - Create Persistent Volume
OpenShift - Create Persistent Volume

Updated:   |  OpenShift articles

If you are not familiar with the oc command, refer to OpenShift - Getting Started with the oc command.

A persistent volume (PV) is an OpenShift resource that points to some sort of storage, such as an LVM volume or a CIFS share or an NFS share, whereas a persistent volume claim (PVC) is a reference to a persistent volume, used by a pod.

 

A JSON or YAML file that contains key value pairs used to create an object, such as a config map, deployment, a project, a pod, a route, a secret, a service, et cetera. These files are known as templates. The oc explain command can be used to get the list of keys that can be used in the JSON or YAML template file.

oc explain persistentvolumes

 

And then more details on each key can be displayed.

oc explain persistentvolumes.spec

 

storageClassName must be an exact match of the NAME of the Storage Class returned by the oc get storageclass command.

The csi (Container Storage Interface) driver must be an exact match of the PROVISIONER of the Storage Class.

persistentVolumeReclaimPolicy must be an exact match of the RECLAIMPOLICY of the Storage Class.

~]$ oc get storageclass
NAME                     PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
file-storage (default)   csi.trident.netapp.io          Delete          Immediate           true                   377d
thin                     kubernetes.io/vsphere-volume   Delete          Immediate           false                  381d
efs-sc                   efs.csi.aws.com                Delete          Immediate           false                  20d

 

accessMode can contain one or more of the following:

  • ReadWriteOnce (RWO) - The volume may only be mounted on a single node
  • ReadWriteOncePod (RWOP) - The volume may only be mounted on a single pod
  • ReadOnlyMany (ROX) - The volume may be mounted on different nodes
  • ReadWriteMany (RWX) - The volume can be mounted on different nodes

volumeMode can be either:

  • Filesystem (default, files are stored anywhere on the storage device)
  • Block (files are stored in a dediated block on the storage device, which may result in improved read/write performance)

 

labels or claimRef are Optional, and can be used to bind Persistent Volume Claims to the Persistent Volume

  • claimRef can be used to bind the Persistent Volume to Persistent Volume Claims
  • metadata.labels can be used to create a custom label (key / value pair) that would then be used to bind the Persistent Volume Claim to the Persistent Volume

The following is the bare minimum that is required to create a Persistent Volume.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-persistent-volume
spec:
  accessModes:
    - ReadOnlyMany
  capacity:
    storage: 1Gi

 

Here is a more common example.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-persistent-volume
  labels: 
    name: my-persistent-volume
spec:
  accessModes:
    - ReadOnlyMany
    - ReadWriteMany
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  csi:
    driver: efs.csi.aws.com
  claimRef:
    kind: PersistentVolumeClaim
    namespace: default
    name: my-persistent-volume-claim
    apiVersion: v1
  persistentVolumeReclaimPolicy: Delete
  storageClassName: efs-sc
  volumeMode: Filesystem

 

Or, here is how you could create a Persistent Volume for an NFS share.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-persistent-volume
  labels: 
    name: my-persistent-volume
spec:
  accessModes:
    - ReadOnlyMany
    - ReadWriteMany
    - ReadWriteOnce
  capacity:
    storage: 1Gi 
  nfs: 
    path: /mnt
    server: 198.19.255.74
  persistentVolumeReclaimPolicy: Retain

 

The oc apply or oc create command with the -f or --filename option can be used to create the pod using the template JSON or YAML file.

The oc replace command can be used to replace a pod using a new or updated template JSON or YAML file.

The oc edit command can be used to update a pods template YAML file.

~]$ oc create -f create_pv.yml 
persistentvolume/my-persistent-volume created

 

The oc get persistentvolumes (or oc get pv) command should list the persistent volume.

~]$ oc get persistentvolumes
NAME                            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
my-persistent-volume            1Gi        RWX            Retain           Bound    default/pvc-sv1           efs-sc                  20d

 

The oc describe pv command can be used to display the details of a Persistent Volume. In this example, the details of the pvc001 Persistent Volume will be displayed.

~]$ oc describe pv my-persistent-volume
Name:            my-persistent-volume
Labels:          <none>
Annotations:     pv.kubernetes.io/bound-by-controller: yes
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    efs-sc
Status:          Bound
Claim:           default/pvc-sv1
Reclaim Policy:  Retain
Access Modes:    RWX
VolumeMode:      Filesystem
Capacity:        1Gi
Node Affinity:   <none>
Message:         
Source:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            efs.csi.aws.com
    FSType:            
    VolumeHandle:      fs-0123cdef::fsap-0123456789abcdef
    ReadOnly:          false
    VolumeAttributes:  <none>
Events:                <none>

 




Did you find this article helpful?

If so, consider buying me a coffee over at Buy Me A Coffee



Comments


Add a Comment


Please enter 34f517 in the box below so that we can be sure you are a human.