- Working DirectPV plugin. To install the plugin, refer to the plugin installation guide.
- Working DirectPV CSI driver in Kubernetes. To install the driver, refer to the driver installation guide.
- Added drives in DirectPV. Refer to the drive management guide.
Refer to the volume provisioning guide.
To get information of volumes from DirectPV, run the list volumes
command. Below is an example:
$ kubectl directpv list drives
┌────────┬──────┬──────┬─────────┬─────────┬─────────┬────────┐
│ NODE │ NAME │ MAKE │ SIZE │ FREE │ VOLUMES │ STATUS │
├────────┼──────┼──────┼─────────┼─────────┼─────────┼────────┤
│ master │ vdb │ - │ 512 MiB │ 506 MiB │ - │ Ready │
│ node1 │ vdb │ - │ 512 MiB │ 506 MiB │ - │ Ready │
└────────┴──────┴──────┴─────────┴─────────┴─────────┴────────┘
Refer to the list volumes command for more information.
DirectPV supports online volume expansion which does not require restart of pods using those volumes. This is automatically done after setting expanded size to Persistent Volume Claim
. Below is an example:
# Get 'minio-data-1-minio-0' Persistent volume claim.
$ kubectl get pvc minio-data-1-minio-0 -o yaml > minio-data-1-minio-0.yaml
$ cat minio-data-1-minio-0.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
volume.kubernetes.io/selected-node: master
volume.kubernetes.io/storage-provisioner: directpv-min-io
creationTimestamp: "2023-06-08T04:46:02Z"
finalizers:
- kubernetes.io/pvc-protection
labels:
app: minio
name: minio-data-1-minio-0
namespace: default
resourceVersion: "76360"
uid: d7fad69a-d267-43c0-9baf-19fd5f65bdb5
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 16Mi
storageClassName: directpv-min-io
volumeMode: Filesystem
volumeName: pvc-d7fad69a-d267-43c0-9baf-19fd5f65bdb5
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 16Mi
phase: Bound
# Edit 'minio-data-1-minio-0' PVC to increase the size from 16MiB to 64MiB.
$ cat minio-data-1-minio-0.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
volume.kubernetes.io/selected-node: master
volume.kubernetes.io/storage-provisioner: directpv-min-io
creationTimestamp: "2023-06-08T04:46:02Z"
finalizers:
- kubernetes.io/pvc-protection
labels:
app: minio
name: minio-data-1-minio-0
namespace: default
resourceVersion: "76360"
uid: d7fad69a-d267-43c0-9baf-19fd5f65bdb5
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 64Mi # <--- increase size here
storageClassName: directpv-min-io
volumeMode: Filesystem
volumeName: pvc-d7fad69a-d267-43c0-9baf-19fd5f65bdb5
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 16Mi
phase: Bound
# Apply changes
$ kubectl apply -f minio-data-1-minio-0.yaml
# After successful expansion, you will see updated YAML
$ kubectl get pvc minio-data-1-minio-0 -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: directpv-min-io
volume.kubernetes.io/selected-node: master
volume.kubernetes.io/storage-provisioner: directpv-min-io
creationTimestamp: "2023-06-08T04:46:02Z"
finalizers:
- kubernetes.io/pvc-protection
labels:
app: minio
name: minio-data-1-minio-0
namespace: default
resourceVersion: "76651"
uid: d7fad69a-d267-43c0-9baf-19fd5f65bdb5
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 64Mi
storageClassName: directpv-min-io
volumeMode: Filesystem
volumeName: pvc-d7fad69a-d267-43c0-9baf-19fd5f65bdb5
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 64Mi # <--- increased size here
phase: Bound
CAUTION: THIS IS DANGEROUS OPERATION WHICH LEADS TO DATA LOSS
Volume can be deleted only if it is in Ready
state (that is, no pod is using it). Run the kubectl delete pvc
command which triggers DirectPV volume deletion. As removing a volume leads to data loss, double check what volume you are deleting. Below is an example:
# Delete `sleep-pvc` volume
kubectl delete pvc sleep-pvc
When Pods and/or Persistent Volume Claims are deleted forcefully, associated DirectPV volumes might be left undeleted and they becomes stale. These stale volumes are removed by running clean
command. Below is an example:
$ kubectl directpv clean --all
Refer clean command for more information.
CAUTION: THIS IS DANGEROUS OPERATION WHICH LEADS TO DATA LOSS
By Kubernetes design, StatefulSet workload is active only if all of its pods are in running state. Any faulty volume(s) will prevent the statefulset from starting up. DirectPV provides a workaround to suspend failed volumes by mounting them on empty /var/lib/directpv/tmp
directory with read-only access. This can be done by executing the suspend volumes
command. Below is an example:
> kubectl directpv suspend volumes --nodes node-1 --drives dm-3
Suspended volumes can be resumed once they are fixed. Upon resuming, the corresponding volumes will resume using the respective allocated drives. This can be done by using the resume volumes
command. Below is an example:
> kubectl directpv resume volumes --nodes node-1 --drives dm-3