Static Provisioning

In Volume we discussed how we can create a PV and a PVC to bind to that PV and finally configure a pod to use the PVC to get a persistent volume.

Untitled

The problem with this approach is that we need to manually provision the storage on a cloud provider or storage device before we can create a PV using it. This is called as static provisioning.

Untitled

Dynamic Provisioning

In dynamic provisioning, a provisioner is created which can automatically provision storage on the cloud or storage device and attach them to the pod when the claim is made. Dynamic provisioning is achieved by creating a StorageClass object.

When using storage classes, we don’t need to create PVs manually. When a PVC is created with a storage class, the storage class uses a provisioner to automatically provision storage and create a PV to bind to the PVC.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
	name: gcp-storage
provisioner: kubernetes.io/gce-pd

provisioner depends on the type of underlying storage being used (EBS, AzureDisk, etc.)

provisioner: kubernetes.io/no-provisioner means dynamic provisioning is disabled.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
	name: myclaim
spec:
	storageClassName: gcp-storage
	accessModes:
		- ReadWriteOnce
	resources:
		requests:
			storage: 500Mi

Depending on the provisioner, there are some properties that we can specify to control the behavior of the underlying storage.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
	name: gcp-storage
provisioner: kubernetes.io/gce-pd
parameters:
	type: pd-ssd
	replication-type: regional-pd

Using these properties, we can create classes of storage such as silver, gold & platinum with increasing levels of replication and speed.

Untitled

Reclaim Policy and Volume Binding Mode

reclaimPolicy defines the behavior of the PV when the PVC is deleted

volumeBindingMode defines when the volume should be created and bound to a PVC

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
	name: gcp-storage
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer