Kubernetes Objects - Job & CronJob
Overview
Jobs and CronJobs in Kubernetes are used for running batch processes and scheduled tasks. Jobs run to completion, while CronJobs run on a schedule.
Job
Purpose
Jobs are used for:
- Batch Processing: One-time tasks that need to complete
- Data Processing: ETL jobs, data analysis
- Backup Operations: Database backups, file backups
- Testing: Running tests, validation scripts
Basic Job
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command:
- perl
- -Mbignum=bpi
- -wle
- print bpi(2000)
restartPolicy: Never
backoffLimit: 4
Job with Parallelism
apiVersion: batch/v1
kind: Job
metadata:
name: parallel-job
spec:
parallelism: 3
completions: 6
template:
spec:
containers:
- name: worker
image: busybox
command: ["sh", "-c", "echo 'Hello from job'; sleep 10"]
restartPolicy: Never
CronJob
Purpose
CronJobs are used for:
- Scheduled Tasks: Regular maintenance, backups
- Periodic Jobs: Data synchronization, cleanup
- Automated Operations: System maintenance, monitoring
Basic CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
CronJob with Concurrency Policy
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-job
spec:
schedule: "0 2 * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: backup-tool:latest
command: ["/backup.sh"]
restartPolicy: OnFailure
Cron Schedule Format
# Format: minute hour day month day-of-week
# Examples:
"0 0 * * *" # Daily at midnight
"0 2 * * *" # Daily at 2 AM
"0 */6 * * *" # Every 6 hours
"0 9 * * 1" # Every Monday at 9 AM
"*/15 * * * *" # Every 15 minutes
Basic Commands
# Create Job
kubectl apply -f job.yaml
# Create CronJob
kubectl apply -f cronjob.yaml
# List Jobs
kubectl get jobs
# List CronJobs
kubectl get cronjobs
# Check Job status
kubectl describe job <job-name>
# Check CronJob status
kubectl describe cronjob <cronjob-name>
# Delete Job
kubectl delete job <job-name>
# Delete CronJob
kubectl delete cronjob <cronjob-name>
Common Use Cases
Database Backup Job
apiVersion: batch/v1
kind: Job
metadata:
name: db-backup
spec:
template:
spec:
containers:
- name: backup
image: postgres:13
command:
- /bin/sh
- -c
- pg_dump -h db-service -U postgres > /backup/backup.sql
env:
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
volumeMounts:
- name: backup-volume
mountPath: /backup
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: backup-pvc
restartPolicy: Never
Log Cleanup CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: log-cleanup
spec:
schedule: "0 3 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cleanup
image: busybox
command:
- /bin/sh
- -c
- find /logs -name "*.log" -mtime +7 -delete
restartPolicy: OnFailure