Chapter 6.1 - Volumes
Learning Objectives
By the end of this chapter, you will be able to:
- Understand the different types of Kubernetes volumes
- Use ephemeral volumes (emptyDir, tmpfs)
- Distinguish between ephemeral volumes and persistent storage
- Choose the right volume type based on the use case
- Understand the volume lifecycle
Introduction
Volumes in Kubernetes allow containers to access storage. Unlike the container filesystem (which is ephemeral), volumes persist even if the container restarts.
Ephemeral Volumes
Ephemeral volumes exist only during the Pod's lifetime. They are deleted when the Pod terminates.
emptyDir
An emptyDir volume is created when a Pod starts and deleted when the Pod terminates.
apiVersion: v1
kind: Pod
metadata:
name: empty-dir-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /cache
- name: sidecar
image: busybox:1.35
volumeMounts:
- name: cache
mountPath: /shared
volumes:
- name: cache
emptyDir:
sizeLimit: 1Gi # Optional: size limit
Characteristics:
- Automatically created when the Pod starts
- Shared between all containers in the Pod
- Stored on the node (local disk)
- Deleted when the Pod terminates
Use Cases:
- Temporary cache
- Temporary files shared between containers
- Intermediate work data
tmpfs (RAM)
A tmpfs volume is stored in memory (RAM) instead of disk.
apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 512Mi # RAM limit
Characteristics:
- Stored in RAM (very fast)
- Deleted on node restart
- Limited by available RAM
- Faster than emptyDir (disk)
Use Cases:
- High-performance in-memory cache
- Sensitive temporary files (deleted on restart)
- Data that should not persist
Caution: Use with care as it consumes RAM.
Comparison: emptyDir vs tmpfs
| Characteristic | emptyDir | tmpfs |
|---|---|---|
| Storage | Local disk | RAM |
| Performance | Medium | Very high |
| Persistence | Survives container restart | Deleted on node restart |
| Limit | Disk space | Available RAM |
| Use Case | Cache, temporary files | High-performance cache, sensitive data |
Special Volumes
ConfigMap and Secret as Volumes
ConfigMaps and Secrets can be mounted as volumes.
apiVersion: v1
kind: Pod
metadata:
name: config-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: app-secrets
defaultMode: 0400
Result: Each key becomes a file in the mounted directory.
Persistent Volumes (Preview)
Persistent volumes (PV/PVC) will be covered in detail in Chapter 6.2.
Key Difference:
Complete Example: Shared Cache
apiVersion: v1
kind: Pod
metadata:
name: cache-example
spec:
containers:
# Main container
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: tmp
mountPath: /tmp
# Sidecar container for cache
- name: cache-warmup
image: busybox:1.35
command: ["/bin/sh", "-c", "while true; do echo 'Cache data' > /cache/data.txt; sleep 60; done"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
# Shared cache (disk)
- name: cache
emptyDir:
sizeLimit: 500Mi
# Temporary files (RAM)
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 100Mi
Best Practices
1. Choose the Right Type
- emptyDir: Cache, temporary files, shared data between containers
- tmpfs: High-performance cache, sensitive temporary data
- PV/PVC: Important data that must persist
2. Size Limits
Always define sizeLimit to avoid:
- Disk space exhaustion (emptyDir)
- RAM exhaustion (tmpfs)
3. Cleanup
Ephemeral volumes are automatically cleaned up, but:
- Ensure applications clean up their temporary files
- Monitor disk/RAM space usage
Useful Commands
Check a Pod's Volumes
kubectl describe pod empty-dir-pod
View Volume Usage
kubectl exec empty-dir-pod -c app -- df -h
Test a Volume
# Write to the volume
kubectl exec empty-dir-pod -c app -- sh -c "echo 'test' > /cache/test.txt"
# Read from the volume
kubectl exec empty-dir-pod -c app -- cat /cache/test.txt
Summary
In this chapter, you learned:
Ephemeral volumes: emptyDir (disk) and tmpfs (RAM)
emptyDir: Created at startup, deleted at termination, shared between containers
tmpfs: Stored in RAM, very fast, deleted on node restart
Use cases: Cache, temporary files, shared data
Limitations: Limited size, lifetime tied to the Pod
Best practices: Define sizeLimit, choose based on needs
Next Steps
Chapter 6.2: PersistentVolumes and PersistentVolumeClaims
Lab 6.1: Ephemeral Volumes and emptyDir
Chapter created: December 2024