Bird
Raised Fist0
Kubernetesdevops~5 mins

Volumes vs Persistent Volumes in Kubernetes - CLI Comparison

Choose your learning style10 modes available
Introduction
When you run apps in Kubernetes, they often need to save data. Volumes let containers store data temporarily, but if the container stops, the data can be lost. Persistent Volumes provide a way to keep data safe even if containers restart or move.
When you want to share data between containers in the same pod temporarily.
When you need to keep data safe even if the pod or container restarts.
When you want to use storage that exists outside the Kubernetes cluster, like cloud disks.
When you want to manage storage separately from pods for better control and reuse.
When you want to back up or migrate data independently of your app lifecycle.
Config File - persistent-volume.yaml
persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: app
    image: busybox
    command: ["sleep", "3600"]
    volumeMounts:
    - mountPath: "/data"
      name: storage
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: example-pvc

This file creates three things:

  • PersistentVolume (PV): A piece of storage in the cluster with 1Gi size, using a folder on the host machine.
  • PersistentVolumeClaim (PVC): A request for storage by a pod, asking for 1Gi with read-write access.
  • Pod: A pod that uses the PVC to mount the storage at /data inside the container.

This setup keeps data safe even if the pod restarts.

Commands
This command creates the PersistentVolume, PersistentVolumeClaim, and Pod defined in the YAML file. It sets up storage and a pod that uses it.
Terminal
kubectl apply -f persistent-volume.yaml
Expected OutputExpected
persistentvolume/example-pv created persistentvolumeclaim/example-pvc created pod/example-pod created
This command lists all PersistentVolumes in the cluster to check if the PV was created and its status.
Terminal
kubectl get pv
Expected OutputExpected
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE example-pv 1Gi RWO Retain Available 10s
This command lists PersistentVolumeClaims to verify if the PVC is bound to a PV and ready for use.
Terminal
kubectl get pvc
Expected OutputExpected
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE example-pvc Bound example-pv 1Gi RWO 10s
This command writes a file inside the pod's mounted volume and reads it back to confirm the volume is working.
Terminal
kubectl exec example-pod -- sh -c 'echo Hello > /data/hello.txt && cat /data/hello.txt'
Expected OutputExpected
Hello
This command deletes the pod to show that data in the PersistentVolume remains safe after pod removal.
Terminal
kubectl delete pod example-pod
Expected OutputExpected
pod "example-pod" deleted
Key Concept

If you remember nothing else from this pattern, remember: Volumes are temporary storage tied to pods, while Persistent Volumes keep data safe beyond pod lifetimes.

Common Mistakes
Using a volume without a PersistentVolumeClaim for data that must survive pod restarts.
The data will be lost when the pod stops because normal volumes are deleted with the pod.
Use a PersistentVolume and PersistentVolumeClaim to keep data safe beyond pod life.
Creating a PersistentVolumeClaim that requests more storage than the PersistentVolume provides.
The PVC will stay in Pending state because no PV matches the request size.
Ensure the PVC requests equal or less storage than available PV capacity.
Not matching access modes between PersistentVolume and PersistentVolumeClaim.
The PVC will not bind to the PV if access modes differ, causing storage to be unavailable.
Make sure the accessModes in PVC and PV are compatible, like both using ReadWriteOnce.
Summary
Create a PersistentVolume to define storage in the cluster.
Create a PersistentVolumeClaim to request storage for pods.
Mount the PVC in a pod to use persistent storage inside containers.
Verify PV and PVC status to ensure storage is ready.
Data in PersistentVolumes remains safe even if pods are deleted or restarted.

Practice

(1/5)
1. What is the main difference between a Volume and a Persistent Volume in Kubernetes?
easy
A. Volumes are temporary and tied to pod lifecycle; Persistent Volumes are durable and independent.
B. Volumes are used only for databases; Persistent Volumes are for logs.
C. Volumes require manual creation; Persistent Volumes are created automatically.
D. Volumes can be shared across clusters; Persistent Volumes cannot.

Solution

  1. Step 1: Understand Volume lifecycle

    Volumes exist only as long as the pod runs, so they are temporary storage tied to pod lifecycle.
  2. Step 2: Understand Persistent Volume purpose

    Persistent Volumes exist independently of pods and provide durable storage that remains after pods are deleted.
  3. Final Answer:

    Volumes are temporary and tied to pod lifecycle; Persistent Volumes are durable and independent. -> Option A
  4. Quick Check:

    Volume lifecycle = temporary, Persistent Volume = durable [OK]
Hint: Remember: Volumes die with pods; Persistent Volumes live beyond pods [OK]
Common Mistakes:
  • Thinking Volumes are durable storage
  • Confusing Persistent Volumes as pod-specific
  • Assuming Volumes can be shared across clusters
2. Which of the following is the correct way to declare a Persistent Volume Claim (PVC) in a pod spec?
easy
A. "volumes:\n - name: mypvc\n persistentVolumeClaim:\n claimName: myclaim"
B. "volumes:\n - name: mypvc\n emptyDir: {}"
C. "volumes:\n - name: mypvc\n hostPath:\n path: /data"
D. "volumes:\n - name: mypvc\n configMap:\n name: myconfig"

Solution

  1. Step 1: Identify PVC syntax in pod spec

    Persistent Volume Claims are referenced under volumes with persistentVolumeClaim.claimName.
  2. Step 2: Check other volume types

    emptyDir is temporary storage, hostPath mounts host directory, configMap mounts config data, none are PVCs.
  3. Final Answer:

    volumes: - name: mypvc persistentVolumeClaim: claimName: myclaim -> Option A
  4. Quick Check:

    PVC uses persistentVolumeClaim.claimName [OK]
Hint: PVCs use persistentVolumeClaim with claimName in volumes [OK]
Common Mistakes:
  • Using emptyDir or hostPath instead of persistentVolumeClaim
  • Missing claimName field
  • Confusing configMap with PVC
3. Given this pod spec snippet, what type of storage is being used?
volumes:
  - name: temp-storage
    emptyDir: {}
medium
A. Persistent Volume storage
B. HostPath volume storage
C. Temporary Volume storage tied to pod lifecycle
D. Persistent Volume Claim storage

Solution

  1. Step 1: Identify volume type from spec

    The volume uses emptyDir, which is a temporary directory created when the pod starts.
  2. Step 2: Understand emptyDir lifecycle

    emptyDir storage is deleted when the pod is removed, so it is temporary and tied to pod lifecycle.
  3. Final Answer:

    Temporary Volume storage tied to pod lifecycle -> Option C
  4. Quick Check:

    emptyDir = temporary pod storage [OK]
Hint: emptyDir means temporary storage deleted with pod [OK]
Common Mistakes:
  • Assuming emptyDir is persistent storage
  • Confusing emptyDir with hostPath
  • Thinking emptyDir uses Persistent Volume Claims
4. You created a pod with a volume referencing a Persistent Volume Claim, but the pod fails to start with an error about volume not found. What is the most likely cause?
medium
A. The Persistent Volume is deleted automatically when pod is deleted.
B. The pod spec uses emptyDir instead of persistentVolumeClaim.
C. The pod is missing a container image.
D. The Persistent Volume Claim does not exist or is not bound to a Persistent Volume.

Solution

  1. Step 1: Analyze error cause

    If the pod cannot find the volume from PVC, likely the PVC does not exist or is not bound to any Persistent Volume.
  2. Step 2: Check other options

    Using emptyDir would not cause volume not found error; missing container image causes different error; Persistent Volumes are independent of pods.
  3. Final Answer:

    The Persistent Volume Claim does not exist or is not bound to a Persistent Volume. -> Option D
  4. Quick Check:

    Volume not found = missing or unbound PVC [OK]
Hint: Check PVC existence and binding if volume not found error occurs [OK]
Common Mistakes:
  • Assuming emptyDir causes volume not found
  • Ignoring PVC binding status
  • Confusing pod image errors with volume errors
5. You want to ensure data stored by your pod remains even if the pod is deleted and recreated. Which combination should you use?
hard
A. Use a Volume with emptyDir in the pod spec.
B. Use a Persistent Volume with a Persistent Volume Claim referenced in the pod spec.
C. Use a hostPath volume pointing to a temporary directory.
D. Use a ConfigMap volume to store data files.

Solution

  1. Step 1: Identify storage durability requirement

    Data must persist beyond pod lifecycle, so temporary volumes like emptyDir or hostPath to temp dirs won't work.
  2. Step 2: Choose correct storage type

    Persistent Volumes with PVCs provide durable storage independent of pods, ensuring data remains after pod deletion.
  3. Final Answer:

    Use a Persistent Volume with a Persistent Volume Claim referenced in the pod spec. -> Option B
  4. Quick Check:

    Persistent Volume + PVC = durable storage [OK]
Hint: For durable data, always use Persistent Volume with PVC [OK]
Common Mistakes:
  • Using emptyDir for persistent data
  • Using hostPath to temporary directories
  • Confusing ConfigMap with storage for data
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard