Job dan CronJob di Kubernetes

Job dan CronJob digunakan untuk menjalankan tugas (task) dalam Kubernetes yang bersifat sementara atau terjadwal.
- Job digunakan untuk menjalankan tugas sekali jalan hingga selesai.
- CronJob digunakan untuk menjadwalkan tugas berkala, seperti backup database atau penghapusan log lama.
1. Job di Kubernetes
Pengertian Job
Job adalah objek Kubernetes yang memastikan satu atau lebih Pod dijalankan sampai selesai. Job dapat digunakan untuk:
- Tugas batch (misalnya memproses data dalam jumlah besar).
- Eksekusi skrip sekali jalan (misalnya migrasi database).
- Pekerjaan yang harus berhasil sebelum selesai (misalnya mengirim email ke pelanggan).
Jenis Job
Ada tiga jenis Job dalam Kubernetes:
- Single Job → Menjalankan satu tugas sekali saja.
- Parallel Job → Menjalankan beberapa instance secara paralel.
- Completions Job → Menjalankan beberapa instance hingga semua selesai.
Contoh Implementasi Job
1. Single Job (Sekali Jalan)
apiVersion: batch/v1
kind: Job
metadata:
name: single-job
spec:
template:
spec:
containers:
- name: simple-task
image: busybox
command: ["echo", "Hello, Kubernetes!"]
restartPolicy: Never
Penjelasan:
- kind: Job → Menandakan ini adalah Job.
- restartPolicy: Never → Pod tidak akan restart jika gagal.
- command: [“echo”, “Hello, Kubernetes!”] → Menjalankan perintah sederhana.
2. Parallel Job (Menjalankan Beberapa Pod Sekaligus)
apiVersion: batch/v1
kind: Job
metadata:
name: parallel-job
spec:
completions: 3
parallelism: 2
template:
spec:
containers:
- name: worker
image: busybox
command: ["echo", "Processing Task..."]
restartPolicy: Never
Penjelasan:
- completions: 3 → Total 3 Pod harus selesai sebelum Job dianggap berhasil.
- parallelism: 2 → Maksimal 2 Pod berjalan bersamaan.
Melihat Status Job
kubectl get jobs
kubectl describe job single-job
kubectl logs job/single-job
Jika Job sudah selesai, maka statusnya “Completed”.
2. CronJob di Kubernetes
Pengertian CronJob
CronJob digunakan untuk menjalankan tugas secara berkala berdasarkan jadwal. Sama seperti cron job di Linux, CronJob di Kubernetes cocok untuk:
- Backup database setiap hari/minggu
- Menghapus log lama secara otomatis
- Mengecek status aplikasi dan mengirimkan laporan
Format Jadwal CronJob
CronJob menggunakan format cron schedule:
* * * * *
│ │ │ │ │
│ │ │ │ └── Hari dalam seminggu (0-6, 0 = Minggu)
│ │ │ └──── Bulan (1-12)
│ │ └────── Tanggal dalam bulan (1-31)
│ └──────── Jam (0-23)
└────────── Menit (0-59)
Contoh format cron:
- “*/5 * * * *” → Setiap 5 menit.
- “0 0 * * *” → Setiap hari pada jam 00:00.
- “0 0 1 * *” → Setiap tanggal 1 setiap bulan.
Contoh Implementasi CronJob
1. Menjalankan Task Setiap 5 Menit
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cronjob
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cron-container
image: busybox
command: ["echo", "Running Scheduled Task"]
restartPolicy: Never
Penjelasan:
- schedule: “*/5 * * * *” → Job dijalankan setiap 5 menit.
- jobTemplate: → Template untuk Job yang akan dijalankan secara berkala.
- restartPolicy: Never → Pod tidak akan restart jika gagal.
2. Backup Database Setiap Hari Jam 12 Malam
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-db
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup-container
image: mysql
command: ["sh", "-c", "mysqldump -u root -p$MYSQL_PASSWORD mydb > /backup/mydb.sql"]
env:
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: DB_PASSWORD
restartPolicy: OnFailure
Penjelasan:
- schedule: “0 0 * * *” → Menjalankan backup setiap jam 00:00.
- Menggunakan Secret → Agar tidak menyimpan password di dalam kode.
Melihat Status CronJob
Melihat daftar CronJob yang terdaftar:kubectl get cronjobs
- Melihat Job yang telah dijalankan oleh CronJob:
kubectl get jobs
- Melihat log dari Job yang dibuat oleh CronJob:
kubectl logs job/backup-db
3. Perbedaan Job dan CronJob
Aspek | Job | CronJob |
Kegunaan | Menjalankan tugas sekali saja. | Menjalankan tugas secara berkala. |
Kapan Berjalan? | Sekali dan selesai. | Berdasarkan jadwal cron. |
Contoh Penggunaan | Memproses batch, migrasi data. | Backup harian, membersihkan cache. |
Format YAML | kind: Job | kind: CronJob |
4. Best Practices
- Gunakan Job untuk pekerjaan satu kali selesai → Seperti proses data besar atau migrasi database.
- Gunakan CronJob untuk pekerjaan berulang → Seperti backup database atau maintenance otomatis.
- Batasi jumlah Job yang tersimpan → Tambahkan
successfulJobsHistoryLimit
untuk membatasi jumlah Job yang tersimpan.
spec:
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
- Gunakan Resource Limits → Pastikan Job atau CronJob tidak membebani cluster.