In my humble opinion, Google Kubernetes Engine (previously known as Google Container Engine) is the best kubernetes implementation among all the cloud providers. It is THE easiest to set up as well. Because of that, we’ve been using GKE extensively on many of our projects. And recently, I came across a use case that is not documented at all (at least I couldn’t find any documentation) - Using an SSD with Persistent Volume (PV) in GKE

Turns out, it is not very straight forward. So, I decided to write a blog post explaining just that.

Creating an SSD persistent volume in GKE

First of all, we need to add the SSD storage class so that you can start creating PVs from SSD. Create ssd-storage-class.yml with the following content

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

Create the storage class

kubectl create -f ssd-storage-class.yml

Once that is done, make sure that the new storage class is created and ready to use

kubectl get sc

You should see something like below

➜ kubectl get sc
NAME                 TYPE
ssd                  kubernetes.io/gce-pd
standard (default)   kubernetes.io/gce-pd

Great. We have created the storage class. Now all we can easily create persistent volumes using the newly created storage class

Example:

Create ssd-pv-demo.yml with the following contents

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ssd-pv-demo
  labels:
    name: ssd-pv-demo
spec:
  accessModes: [ "ReadWriteOnce" ]
  storageClassName: ssd
  resources:
    requests:
      storage: 10Gi

the storageClassName is what defines whether the disk is an SSD or a standard drive.

Alright, that’s all.