Bird
Raised Fist0
Kubernetesdevops~30 mins

Storage classes for dynamic provisioning in Kubernetes - Mini Project: Build & Apply

Choose your learning style10 modes available
Storage classes for dynamic provisioning
📖 Scenario: You are managing a Kubernetes cluster that needs to automatically create storage volumes for applications when they request storage. This is called dynamic provisioning. You will create a StorageClass to define how storage is dynamically created, then create a PersistentVolumeClaim that uses this StorageClass.
🎯 Goal: Build a StorageClass named fast-storage that provisions storage dynamically with the kubernetes.io/aws-ebs provisioner and a PersistentVolumeClaim named fast-pvc that uses this StorageClass to request 5Gi of storage.
📋 What You'll Learn
Create a StorageClass named fast-storage with provisioner kubernetes.io/aws-ebs
Set the StorageClass parameter type to gp2
Create a PersistentVolumeClaim named fast-pvc that uses the fast-storage StorageClass
Request exactly 5Gi of storage in the PersistentVolumeClaim
Use access mode ReadWriteOnce in the PersistentVolumeClaim
💡 Why This Matters
🌍 Real World
Dynamic provisioning allows Kubernetes to automatically create storage volumes when applications need them, saving manual setup time and reducing errors.
💼 Career
Understanding StorageClasses and PVCs is essential for Kubernetes administrators and DevOps engineers managing stateful applications in cloud environments.
Progress0 / 4 steps
1
Create the StorageClass manifest
Create a YAML manifest for a StorageClass named fast-storage with the provisioner set to kubernetes.io/aws-ebs.
Kubernetes
Hint

The kind must be StorageClass. The metadata.name is fast-storage. The provisioner is kubernetes.io/aws-ebs. Add parameters: with type: gp2.

2
Create the PersistentVolumeClaim manifest
Create a YAML manifest for a PersistentVolumeClaim named fast-pvc that uses the StorageClass fast-storage.
Kubernetes
Hint

The kind is PersistentVolumeClaim. The metadata.name is fast-pvc. Under spec, set storageClassName to fast-storage. Request 5Gi storage and use access mode ReadWriteOnce.

3
Apply the manifests to the cluster
Use the kubectl apply -f command to apply the YAML file containing both the StorageClass and PersistentVolumeClaim manifests.
Kubernetes
Hint

Use kubectl apply -f storage.yaml to create the StorageClass and PersistentVolumeClaim in the cluster.

4
Verify the PersistentVolumeClaim status
Run the command kubectl get pvc fast-pvc to check the status of the PersistentVolumeClaim and print the output.
Kubernetes
Hint

Run kubectl get pvc fast-pvc to see the status. The output should include the name fast-pvc and show its status like Bound.

Practice

(1/5)
1. What is the main purpose of a StorageClass in Kubernetes?
easy
A. To define how storage volumes are dynamically provisioned
B. To schedule pods on specific nodes
C. To manage network policies
D. To configure container resource limits

Solution

  1. Step 1: Understand StorageClass role

    A StorageClass defines parameters for dynamic volume provisioning in Kubernetes.
  2. Step 2: Compare with other options

    Scheduling pods, managing network policies, and resource limits are unrelated to StorageClass.
  3. Final Answer:

    To define how storage volumes are dynamically provisioned -> Option A
  4. Quick Check:

    StorageClass = dynamic provisioning [OK]
Hint: StorageClass controls storage creation, not pods or network [OK]
Common Mistakes:
  • Confusing StorageClass with pod scheduling
  • Thinking StorageClass manages network policies
  • Assuming StorageClass sets container CPU/memory limits
2. Which of the following is the correct YAML snippet to specify a StorageClass named fast-storage for a PersistentVolumeClaim?
easy
A. StorageClass: fast-storage
B. storageclass: fast-storage
C. storageClassName: fast-storage
D. storage_class_name: fast-storage

Solution

  1. Step 1: Recall correct field name

    The correct field in PVC spec is storageClassName with camelCase.
  2. Step 2: Check other options

    Options B, C, and D use incorrect casing or underscores, which are invalid in Kubernetes YAML.
  3. Final Answer:

    storageClassName: fast-storage -> Option C
  4. Quick Check:

    Correct YAML key = storageClassName [OK]
Hint: Use exact camelCase 'storageClassName' in PVC spec [OK]
Common Mistakes:
  • Using wrong casing like 'storageclass' or 'StorageClass'
  • Replacing camelCase with underscores
  • Misspelling the field name
3. Given this StorageClass YAML snippet:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: slow
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain

What will happen when a PersistentVolumeClaim requests storage from this class?
medium
A. The volume will not be dynamically provisioned; manual provisioning is required
B. The volume will be deleted automatically when released
C. The volume will be dynamically provisioned immediately
D. The volume will be provisioned but bound immediately without waiting

Solution

  1. Step 1: Analyze provisioner field

    The provisioner is kubernetes.io/no-provisioner, meaning no dynamic provisioning.
  2. Step 2: Understand reclaimPolicy and binding mode

    ReclaimPolicy is Retain (volume kept after release), and volumeBindingMode waits for pod scheduling.
  3. Final Answer:

    The volume will not be dynamically provisioned; manual provisioning is required -> Option A
  4. Quick Check:

    No provisioner = manual provisioning [OK]
Hint: No provisioner means no dynamic provisioning [OK]
Common Mistakes:
  • Assuming dynamic provisioning happens with no-provisioner
  • Confusing reclaimPolicy with provisioning behavior
  • Ignoring volumeBindingMode effect
4. You created a StorageClass with volumeBindingMode: Immediate but your pods fail to schedule because volumes are not available in the node's zone. What is the likely cause and fix?
medium
A. Cause: StorageClass name mismatch; Fix: Correct PVC storageClassName
B. Cause: Reclaim policy is Retain; Fix: Change to Delete
C. Cause: Provisioner is missing; Fix: Add a provisioner
D. Cause: Immediate binding ignores pod location; Fix: Change to WaitForFirstConsumer

Solution

  1. Step 1: Understand volumeBindingMode impact

    Immediate binding provisions and binds volume before pod scheduling, ignoring node zone.
  2. Step 2: Identify fix

    Changing to WaitForFirstConsumer delays binding until pod scheduling, ensuring volume is in correct zone.
  3. Final Answer:

    Cause: Immediate binding ignores pod location; Fix: Change to WaitForFirstConsumer -> Option D
  4. Quick Check:

    Immediate binding ignores pod zone [OK]
Hint: Use WaitForFirstConsumer to bind volume after pod scheduling [OK]
Common Mistakes:
  • Changing reclaimPolicy instead of binding mode
  • Adding provisioner when already present
  • Fixing storageClassName without checking binding mode
5. You want to create a StorageClass that dynamically provisions SSD-backed volumes with fast performance, deletes volumes when released, and delays binding until pod scheduling. Which YAML snippet correctly implements this?
hard
A. apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: standard reclaimPolicy: Retain volumeBindingMode: Immediate
B. apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer
C. apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/no-provisioner parameters: type: io1 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer
D. apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: io1 reclaimPolicy: Delete volumeBindingMode: Immediate

Solution

  1. Step 1: Identify correct provisioner and parameters

    For AWS SSD, provisioner is kubernetes.io/aws-ebs and type gp2 is general SSD.
  2. Step 2: Check reclaimPolicy and binding mode

    ReclaimPolicy should be Delete to remove volumes after release; binding mode WaitForFirstConsumer delays binding until pod scheduling.
  3. Step 3: Validate options

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: standard reclaimPolicy: Retain volumeBindingMode: Immediate uses wrong type and policies; apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/no-provisioner parameters: type: io1 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer uses no provisioner; apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: io1 reclaimPolicy: Delete volumeBindingMode: Immediate uses Immediate binding which is not desired; apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer matches all requirements.
  4. Final Answer:

    YAML with provisioner kubernetes.io/aws-ebs, type gp2, reclaimPolicy Delete, and WaitForFirstConsumer -> Option B
  5. Quick Check:

    Correct provisioner + Delete + WaitForFirstConsumer = apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer [OK]
Hint: Match provisioner, parameters, reclaimPolicy, and bindingMode exactly [OK]
Common Mistakes:
  • Using no-provisioner disables dynamic provisioning
  • Choosing wrong volume type parameter
  • Setting reclaimPolicy to Retain instead of Delete
  • Using Immediate binding when delayed binding is needed
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