We’re almost there! This is the final blog post in the CKAD series! I hope you got value out of the learning experience.
Let’s dive into our final topic (as there is only one):
Understand PersistentVolumeClaims for storage
Our final topic for the CKAD requires us to understand PersistentVolumeClaims. We worked with Volumes before in a couple of examples, and PersistentVolumes (and claims) help us with providing a process to map 1 storage class to multiple pods.
It is a bit confusing to understand the difference between a PersistentVolume and a PersistentVolumeClaim. Think about it like a node and pods: a PersistentVolume is like a node, a PersistentVolumeClaim is like a pod running on a node. Making this ‘real’: the PersistentVolume is a provisioned piece of storage, whie the PersistentVolumeClaims consume parts of that PersistentVolume. Pods can consume (I didn’t want to call it mount) these claims to read/write data from/to.
So, let’s build out a sample:
- We’ll reserve a 10GB block of file system space on /
mnt. (this works only on a single-node cluster!)
- We’ll create a PersistentVolumeClaim there of 2GB
- We’ll mount that PersistentVolumeclaim to a pod.
Step 1 will be to create our PersistentVolume. This would look something like this:
apiVersion: v1 kind: PersistentVolume metadata: name: volume spec: storageClassName: hyperstorage capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /mnt
Adding to this, we can create our PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc spec: storageClassName: hyperstorage accessModes: - ReadWriteOnce resources: requests: storage: 2Gi
This will create our PersistentVolumeClaim. Now that we have this, we can mount this in a pod:
apiVersion: v1 kind: Pod metadata: name: pod spec: volumes: - name: local-volume persistentVolumeClaim: claimName: pvc containers: - name: nginx image: nginx volumeMounts: - mountPath: "/tmp/pvc" name: local-volume
As you can see in the pod definition, we define the link between the persistentVolumeClaim and the local volume that will be mounted at that volume level. The name of the claim is important.
Once we have this, we can actually go ahead and look into our mounted directory:
kubectl exec -it pod sh ls /tmp/pvc
If you’re running this on the Azure Kubernetes Service, you’ll see a
DATALOSS_WARNING_README.txt file. This is because the /mnt path of the host is the temporary drive on the host VM. But that way you also see that the files on the host system are shared with the actual pods.
That’s it! In this final topic of the CKAD study process, we discussed PersistentVolumeClaims and how to mount them in your pod.
With all these study materials in your back pocket, you should now be able to go ahead and take your CKAD exam!