StorageClass (sc)
-
Storage Class (
SC
) provisions volumes dynamically (represented by aPV
) whenever aPVC
is created -
What is Dynamic Provisioning?
- Automatically creates the storage needed (locally or on cloud providers)
- Differently from
Static Provisioning
(with static PVs) where the storage must be in place beforehand - With
StorageClasses
a provisioner is defined (E.g., google storage) that automatically provisions storage - When claiming a storage (with PVC associated with a SC), the PV is created automatically
Properties
allowVolumeExpansion
- Expands the storage automatically
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: kubernetes.io/no-provisioner
allowVolumeExpansion: true
volumeBindingMode
- Immediate (default)
-
SC creates a PV as soon as the PVC is created
-
WaitForFirstConsumer
- SC creates a PV as soon as the PVC is created AND the pod initializes
- Before the pod initializes the PVC remains in
Pending
state - This way the PV is provisioned in the same region of the pod
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
spec.allowedTopologies
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
csi.storage.k8s.io/fstype: xfs
type: io1
iopsPerGB: "50"
encrypted: "true"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- us-east-2c
provisioner
kubernetes.io/no-provisioner
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: kubernetes.io/no-provisioner
kubernetes.io/gce-pd
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard # pd-ssd
replication-type: none # regional-pd
kubernetes.io/aws-ebs
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
iopsPerGB: "10"
fsType: ext4
kubernetes.io/azure-disk
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed
provisioner: kubernetes.io/azure-disk # Disk PV can only be attached to one pod at a time
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
kind: Managed # Shared (default), Managed, Dedicated
storageaccounttype: StandardSSD_LRS # Premium_LRS, Standard_LRS
cachingmode: ReadOnly
kubernetes.io/azure-file
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile # /usr/share/nginx/html to serve pages
provisioner: kubernetes.io/azure-file # File Shares can be attached to multiple pods at the same time
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
skuName: Standard_LRS
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
- actimeo=30
ebs.csi.aws.com
- Requires the EBS CSI Driver installed on the cluster
- By default when creating an EKS cluster only a
kubernetes.io/aws-ebs
storage class is created
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
csi.storage.k8s.io/fstype: xfs
type: io1
iopsPerGB: "50"
encrypted: "true"
# fstype: ntfs # for windows
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- us-east-2c
reclaimPolicy (bypass)
- Bypassed to
pv.spec.persistentVolumeReclaimPolicy
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-sc
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain