OpenShift PersistentVolume Operations: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 66: Line 66:
   persistentVolumeReclaimPolicy: Retain
   persistentVolumeReclaimPolicy: Retain
   nfs:
   nfs:
     path: /support-nfs-storage/metrics
     path: /nfs/pv1
     server: support.local
     server: support.ocp36.local
</pre>
</pre>


Make sure the "support.local" server is accessible from any node that will use the volume, and the /support-nfs-storage/metrics is exported and has sufficient permissions.
Make sure the "support.ocp36.local" server is accessible from any node that will use the volume, and the /nfs/pv1 is exported and has sufficient permissions.


====Create the Volume====
====Create the Volume====

Revision as of 22:33, 21 November 2017

External

Internal

Persistent Volume Operations

List Existent Persistent Volumes

A persistent volume is not a project-specific object, so the following query will return all persistent volumes available to the OpenShift instance.

oc get pv

Delete a Persistent Volume

oc delete pv <persistent-volume-name>
oc delete pv metrics-volume

Create a Persistent Volume

NFS

Provision the Underlying Storage

Provisioning the underlying storage consists in exporting a NFS volume. On the support node:

1. Create a /etc/exports.d/persistent-volumes.exports file, if it does not exist already

2. Add entries similar to:

/nfs/pv1 192.168.122.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
/nfs/pv2 192.168.122.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
/nfs/pv3 192.168.122.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)
/nfs/pv4 192.168.122.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)

adjusting for local IP and network mask.

3. Create the corresponding local directories.

mkdir pv1 pv2 pv3 pv4
chown nfsnobody:nfsnobody pv1 pv2 pv3 pv4
chmod a+rwx pv*

3. Export new filesystems:

exportfs -av

Create the Persistent Volume Definition File

Create a "pv.yaml" file with the following content:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: metrics-volume
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /nfs/pv1
    server: support.ocp36.local

Make sure the "support.ocp36.local" server is accessible from any node that will use the volume, and the /nfs/pv1 is exported and has sufficient permissions.

Create the Volume

oc create -f pv.yaml

Once created, it will shows as:

oc get pv

NAME              CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM                    REASON    AGE
...
metrics-volume    10Gi       RWO           Retain          Available                                      25s
...

Note that the volume, even if available, it won't be used until a matching persistent volume claim is declared.

Persistent Volume Claim Operations

List Existent Persistent Volume Claims for the Current Project

A persistent volume claim is project-specific object, so the following query will return all persistent volume claims available in the current project:

oc get pvc

Create a Persistent Volume Claim

Create a definition of the persistent volume claim, a "pvc.yaml" file with the following content

apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
  name: "jenkins-data"
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "2Gi"

Create the persistent volume claim:

oc create -f pvc.yaml

Once created, the persistent volume claim is immediately bound to an available persistent volume, if exists and it matches persistent volume claim's criteria.

Associate a Persistent Volume Claim with a Deployment Configuration

Edit the Deployment Configuration:

oc edit dc/<deployment-configuration-name>
...
spec:
  ...
  template:
    ...
    spec:
     containers:
     - name: <container-name>
       ...
       volumeMounts:
       - mountPath: /some/path/inside/the/container
         name: volume-1 # this is the name of the container volume referred below
       ...
       volumes:
       - name: volume-1
         persistentVolumeClaim:
           claimName: <persistent-volume-claim-name>
     ...