OpenShift PersistentVolume Operations: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(18 intermediate revisions by the same user not shown)
Line 24: Line 24:


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


==Delete a Bound Persistent Volume==
==Delete a Bound Persistent Volume==
Line 31: Line 29:
{{Warn|This is dangerous, do it only if you know what you're doing.}}
{{Warn|This is dangerous, do it only if you know what you're doing.}}


==Create a Persistent Volume==
Delete the persistent volume claim first:
 
oc delete pvc <''pvc-name''>
 
The volume becomes "Released".


===NFS===
Then disassociate the persistent volume from the persistent volume claim reference, still attached to the volume.


====Provision the Underlying Storage====
This can be done interactively with [[oc edit]] - delete the "claimRef" structure, or with [[oc patch]]:
 
oc patch pv/<''persistent-volume-name''> --patch='{ "spec": { "claimRef": null}}'
 
==Create a NFS Persistent Volume==
<span id='Create_a_Persistent_Volume'></span>
 
===Provision the Underlying Storage===


Provisioning the underlying storage consists in exporting a NFS volume. On the support node:
Provisioning the underlying storage consists in exporting a NFS volume. On the support node:
Line 60: Line 69:
  exportfs -av
  exportfs -av


====Create the Persistent Volume Definition File====
===Create the Persistent Volume Definition File===


Create a "pv.yaml" file with the following content:
Create a "pv.yaml" file with the following content:
Line 84: Line 93:
Repeat  for all persistent volumes, updating "name", "storage" and "path" accordingly.
Repeat  for all persistent volumes, updating "name", "storage" and "path" accordingly.


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


  oc create -f pv.yaml
  oc create -f pv.yaml
Line 98: Line 107:


Note that the volume, even if available, it won't be used until a matching [[OpenShift_Concepts#Persistent_Volume_Claim|persistent volume claim]] is declared.
Note that the volume, even if available, it won't be used until a matching [[OpenShift_Concepts#Persistent_Volume_Claim|persistent volume claim]] is declared.
===Use a Template===
Alternatively, use this template: https://github.com/NovaOrdis/playground/blob/master/openshift/pv-template.yaml and run it as such:
oc process -f ./pv-template.yaml --param NAME=pv9 --param SIZE_GB=2 | oc create -f -


=Recycle a "Released" Persistent Volume=
=Recycle a "Released" Persistent Volume=


<font color=red>TODO</font>
See {{Internal|OpenShift_PersistentVolume_Operations#Unbind_a_Pod_from_the_Volume|Unbind a Pod from the Volume}} below.


=Persistent Volume Claim Operations=
=Persistent Volume Claim Operations=
Line 158: Line 173:
             claimName: <''<font color=teal>persistent-volume-claim-name</font>''>
             claimName: <''<font color=teal>persistent-volume-claim-name</font>''>
       ...
       ...
The same result can be obtained with:
[[Oc_set#volumes|oc set volumes]]
==Unbind a Pod from the Volume==
Delete the persistent volume claim:
oc delete pvc <''persistent-volume-claim-name''>
The associated [[OpenShift Concepts#Persistent_Volume|persistent volume]] moves to a "Released" state after the persistent volume claim is deleted.
To return the volume to an "Available" state, edit its definition and release the persistent volume claim reference from the volume definition:
oc edit pv pv1
...
kind: PersistentVolume
spec:
  ...
  <font color=orange>claimRef:</font>
    <font color=orange>apiVersion: v1</font>
    <font color=orange>kind: PersistentVolumeClaim</font>
    <font color=orange>name: metrics-1</font>
    <font color=orange>namespace: openshift-infra</font>
    <font color=orange>resourceVersion: "2180"</font>
    <font color=orange>uid: 196343eb-c6b8-11e7-9f09-525400360e56</font>
  ...
{{Warn|Transitioning the persistent volume from "Released" to "Available" state does not clear the storage content - this will have to be done manually.}}
=Volumes with oc set=
{{Internal|Oc_set#volumes|oc set volumes}}

Latest revision as of 22:55, 25 January 2018

External

Internal

Overview

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

Details about a Specific Persistent Volume

oc describe pv <persistent-volume-name>

Delete an Unbound Persistent Volume

oc delete pv <persistent-volume-name>

Delete a Bound Persistent Volume


This is dangerous, do it only if you know what you're doing.

Delete the persistent volume claim first:

oc delete pvc <pvc-name>

The volume becomes "Released".

Then disassociate the persistent volume from the persistent volume claim reference, still attached to the volume.

This can be done interactively with oc edit - delete the "claimRef" structure, or with oc patch:

oc patch pv/<persistent-volume-name> --patch='{ "spec": { "claimRef": null}}'

Create a NFS Persistent Volume

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: pv1
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.

Repeat for all persistent volumes, updating "name", "storage" and "path" accordingly.

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.

Use a Template

Alternatively, use this template: https://github.com/NovaOrdis/playground/blob/master/openshift/pv-template.yaml and run it as such:

oc process -f ./pv-template.yaml --param NAME=pv9 --param SIZE_GB=2 | oc create -f -

Recycle a "Released" Persistent Volume

See

Unbind a Pod from the Volume

below.

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>
     ...

The same result can be obtained with:

oc set volumes

Unbind a Pod from the Volume

Delete the persistent volume claim:

oc delete pvc <persistent-volume-claim-name>

The associated persistent volume moves to a "Released" state after the persistent volume claim is deleted.

To return the volume to an "Available" state, edit its definition and release the persistent volume claim reference from the volume definition:

oc edit pv pv1

...
kind: PersistentVolume
spec:
  ...
  claimRef:
   apiVersion: v1
   kind: PersistentVolumeClaim
   name: metrics-1
   namespace: openshift-infra
   resourceVersion: "2180"
   uid: 196343eb-c6b8-11e7-9f09-525400360e56
  ...

Transitioning the persistent volume from "Released" to "Available" state does not clear the storage content - this will have to be done manually.

Volumes with oc set

oc set volumes