⏰ Run Batch Jobs and Scheduled Tasks in Kubernetes
Pods run forever. Jobs run to completion. CronJobs run on schedule. Perfect for backups, reports, data processing.
📝 Job Example (One-Time)
apiVersion: batch/v1
kind: Job
metadata:
name: database-backup
spec:
template:
spec:
containers:
- name: backup
image: postgres:15
command: ['pg_dump', '-h', 'postgres', '-U', 'user', 'dbname', '>', '/backup/db.sql']
restartPolicy: Never
backoffLimit: 4
# Create job
kubectl create -f job.yaml
# Check job status
kubectl get jobs
kubectl logs job/database-backup
# Delete job (pods also deleted)
kubectl delete job database-backup
🎯 CronJob (Scheduled)
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-backup
spec:
schedule: "0 2 * * *" # Every day at 2 AM
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: postgres:15
command: ['pg_dump', '-h', 'postgres', '-U', 'user', 'dbname']
restartPolicy: OnFailure
# Cron schedule format:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday)
# │ │ │ │ │
# * * * * *
# Examples:
# "*/15 * * * *" Every 15 minutes
# "0 1 * * *" 1 AM daily
# "0 9 * * 1" 9 AM Monday
💡 Commands
- kubectl get jobs, kubectl get cronjobs
- kubectl describe job job-name
- kubectl logs job-name-xxxxx (pod name)
- kubectl delete job job-name
- Parallel jobs: spec.parallelism = 5
“Daily database backup used to run on cron job on VM. Moved to Kubernetes CronJob. Now managed with kubectl, logs in docker, part of cluster.”
