Storage Classes

When setting up a K8s environment the Storage Class by default is created with one main restriction and this is represented with the parameter allowVolumeExpansion: false this will not allow you to expand your disk when these are filling up. It is recommended to create a new Storage Class with at least these next parameters:

  • reclaimPolicy: Retain
  • volumeBindingMode: WaitForFirstConsumer
  • allowVolumeExpansion: true

Here is an example working in a AWS environment:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: io1
provisioner: kubernetes.io/aws-ebs
parameters:
  type: io1
  iopsPerGB: "50"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

and if you’re using GKE:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Check the Storage Class documentation for more details and other providers.

Do not forget using your custom Storage Class when you create a cluster, check the required parameters in Cluster Parameters

Important note: Make sure you include these parameters in order to avoid some of the next errors:

  • Autoscaler not working as expected: cluster-autoscaler pod didn't trigger scale-up (it wouldn't fit if a new node is added)

  • Volumes not assigned: N node(s) had no available volume zone

  • Losing data by accidentally removing a volume: reclaimPolicy: Retain will guarantee the volume is not deleted when a claim no longer exist.