Storage Classes
A StorageClass provides a way for administrators to describe the “classes” of storage they offer. Different classes might map to quality-of-service levels, or to backup policies, or to arbitrary policies determined by the cluster administrators. Kubernetes itself is unopinionated about what classes represent. This concept is sometimes called “profiles” in other storage systems.
Kadalu provides a few storage classes by default, but users are not limited to only these classes. This document helps to understand the default available storage classes and how to create new ones for your requirements.
kadalu.storage-pool-name
Kadalu creates and deploys Storage Class when storage pool is created. The name of this Storage class is same as the Storage name. Kadalu will provision PVs only from this Storage pool across the Cluster.
Example:
When a Storage is created with name "storage-pool-1", Kadalu deploys a Storage Class with name "kadalu.storage-pool-1". The parameter "storage_name" is set to "storage-pool-1" to filter storages to PVs only from this Storage.
Example: Create Storage "storage-pool-1",
$ kubectl kadalu storage-add storage-pool-1 \
--path kube-nodename:/mnt/mount/export-path
Deployed Storage Class,
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: kadalu.storage-pool-1
provisioner: kadalu
parameters:
storage_name: "storage-pool-1"
And the PVC,
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv1
spec:
storageClassName: kadalu.storage-pool-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
How to Create a custom Storage Class?
The following filters are available. Use any of the filters to create a new Storage class.
storage_name
Specify the name of the Storage pool from which PVs need to provision.
Example Storage Class
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: kadalu.fast-storage
provisioner: kadalu
parameters:
storage_name: "storage-pool-1"
And the PVC,
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv5
spec:
storageClassName: kadalu.fast-storage
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
node_affinity
Use this option if a PV needs to provision from the locally available Storage, This Storage Class behaves the same as local Storage but with the support for dynamic provisioning.
Example Storage Class
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: kadalu.local-kube1
provisioner: kadalu
parameters:
node_affinity: "kube1" # Node name as shown in `kubectl get nodes`
And the PVC,
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv6
spec:
storageClassName: kadalu.local-kube1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storage_type
Specify the name of the Storage pool type from which PVs need to provision. By default, Kadalu provides Storage Class for all supported Storage types.
Example Storage Class
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: kadalu.replica2
provisioner: kadalu
parameters:
storage_type: "Replica2"
And the PVC,
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv7
spec:
storageClassName: kadalu.replica2
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
pv_type
Use this option if the PV created using this Storage Class should be a Mounted Block Volume.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: kadalu.db-storage
provisioner: kadalu
parameters:
storage_name: "storage-pool-1"
pv_type: Block
And the PVC,
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv8
spec:
storageClassName: kadalu.db-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
The number of customization a Storage Class can provide is impressive. The only limit is your imagination. Please open a new issue if your use case needs more filters than the ones listed above.