What if your app's important data vanished every time it restarted? PVCs stop that nightmare.
Why PersistentVolumeClaim (PVC) definition in Kubernetes? - Purpose & Use Cases
Imagine you have a container running an app that needs to save files. You try to store data inside the container itself.
But when the container stops or restarts, all your saved files vanish!
Saving data inside containers is like writing notes on a whiteboard that gets erased every time you clean the room.
Manually managing storage for containers is slow and risky because data can be lost or hard to share between containers.
PersistentVolumeClaim (PVC) lets you ask Kubernetes for storage space that stays safe even if containers restart.
This means your app can save files reliably without worrying about losing them.
docker run myapp
# Data lost when container stopskubectl apply -f pvc.yaml
# Storage stays even if pod restartsWith PVCs, your apps can keep important data safe and share it easily across containers.
A photo-sharing app stores user pictures on a persistent volume so photos don't disappear when the app updates or restarts.
Storing data inside containers is temporary and risky.
PersistentVolumeClaim requests stable storage from Kubernetes.
PVCs keep data safe across container restarts and enable sharing.
Practice
PersistentVolumeClaim (PVC) in Kubernetes?Solution
Step 1: Understand PVC role
A PVC is used to request storage resources in Kubernetes, separating storage use from storage details.Step 2: Compare options
Options A, B, and D relate to other Kubernetes features, not storage requests.Final Answer:
To request storage resources from the cluster -> Option DQuick Check:
PVC = Storage request [OK]
- Confusing PVC with Pod or Deployment definitions
- Thinking PVC schedules pods
- Mixing PVC with network policies
Solution
Step 1: Check accessModes and storage request
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi correctly uses ReadWriteOnce and requests 5Gi storage under resources.requests.Step 2: Identify errors in other options
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi uses ReadOnlyMany (not requested). apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: limits: storage: 5Gi uses limits instead of requests. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: cpu: 5Gi incorrectly requests cpu instead of storage.Final Answer:
Correct minimal PVC YAML with 5Gi and ReadWriteOnce -> Option BQuick Check:
accessModes + storage request = apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi [OK]
- Using limits instead of requests for storage
- Wrong accessModes value
- Requesting cpu instead of storage
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: fast-storageSolution
Step 1: Read storage size
The YAML requests 10Gi storage under resources.requests.storage.Step 2: Read access mode
Access mode is ReadWriteMany as specified under accessModes.Final Answer:
10Gi storage with ReadWriteMany access -> Option AQuick Check:
storage=10Gi, access=ReadWriteMany [OK]
- Confusing ReadWriteOnce with ReadWriteMany
- Misreading storage size
- Ignoring storageClassName as it doesn't affect size or access
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2GBSolution
Step 1: Check storage size unit
Kubernetes expects storage size units like Gi, Mi, not GB. '2GB' is invalid.Step 2: Verify other fields
accessModes and metadata name are correct. apiVersion for PVC is v1, not apps/v1.Final Answer:
storage size unit should be Gi, not GB -> Option CQuick Check:
Use Gi for storage size units [OK]
- Using GB instead of Gi for storage size
- Wrong apiVersion for PVC
- Changing accessModes unnecessarily
Solution
Step 1: Verify accessModes and storage size
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: premium-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: premium-ssd uses ReadWriteOnce and requests 20Gi storage correctly.Step 2: Check storageClassName and units
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: premium-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: premium-ssd correctly sets storageClassName to premium-ssd and uses Gi units. Other options have wrong accessModes, use limits instead of requests, or wrong units (GB).Final Answer:
Correct PVC with 20Gi, ReadWriteOnce, and premium-ssd storage class -> Option AQuick Check:
accessModes=ReadWriteOnce + requests.storage=20Gi + storageClassName= premium-ssd [OK]
- Using limits instead of requests for storage
- Wrong accessModes value
- Using GB instead of Gi for storage size
Ready to prove it?
Pass the test and this pattern moves unknown
