K8S Cronjob PVC cleanup
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
In the world of Kubernetes (often abbreviated as K8S), managing resources efficiently is essential to maintaining a healthy cluster environment. One common challenge is managing resources like Persistent Volume Claims (PVCs), which can build up over time due to periodic jobs like CronJobs. Here, we'll delve into the concept of cleaning up these resources using a K8S CronJob, ensuring your cluster remains optimized and free of clutter.
Understanding Persistent Volume Claims (PVCs)
In Kubernetes, a PVC is a request for storage by a user. It is similar to a Pod as it binds to a specific Persistent Volume (PV) but abstracts the storage provider specifics, enabling dynamic storage provisioning. PVCs can be thought of as a way for developers to request durable storage without having to know the intricacies of the underlying storage platform.
Key Points:
- Persistence: PVCs ensure that data is not lost even if pods are deleted.
- Dynamic Provisioning: Allows automatic creation of PVs without pre-existing storage.
- Binding: PVCs are bound to a single PV, forming a binding relationship.
The Need for Cleanup
With regular deployment cycles and updates, Kubernetes environments can become cluttered with unused PVCs, which, if not managed, can waste storage and incur costs. This often happens when tasks like builds and tests, which frequently use temporary PVCs, finish executing and leave behind unneeded resources.
Automating Cleanup with K8S CronJobs
K8S CronJobs allow scheduled execution of jobs, akin to the traditional Unix cron jobs. They are pivotal in automating repetitive tasks such as PVC cleanup.
CronJob Structure
A typical CronJob might look like this in YAML configuration:
- name: pvc-cleanup
- "/bin/sh"
- "-c"
- |
- Schedule: The `schedule` field uses standard cron syntax to determine when the job runs. Here it is set daily at 2 AM.
- Containers & Script: A container runs a script to list all namespaces' PVCs, filter those that are in the `Released` state, and delete them.
- Restart Policy: The job's restart policy is set to `OnFailure`, ensuring failed jobs attempt to rerun.
Related reading
- K8S Error running load balancer syncing routine
- K8S Failed to pull image from local repo
- K8s how to install charts from the Helm Hub
- K8s NodePort service is “unreachable by IP” only on 2/4 slaves in the cluster
- K8S Read config map via go API
- Kafka Find Controller ID in a cluster using Kraft protocol
- Kafka in Kubernetes - Marking the coordinator dead for group
- Kafka in Kubernetes Cluster- How to publish/consume messages from outside of Kubernetes Cluster

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.