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:

  1. Single Job → Menjalankan satu tugas sekali saja.
  2. Parallel Job → Menjalankan beberapa instance secara paralel.
  3. 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

  1. Melihat Job yang telah dijalankan oleh CronJob:
    kubectl get jobs
  2. Melihat log dari Job yang dibuat oleh CronJob:
    kubectl logs job/backup-db

3. Perbedaan Job dan CronJob

AspekJobCronJob
KegunaanMenjalankan tugas sekali saja.Menjalankan tugas secara berkala.
Kapan Berjalan?Sekali dan selesai.Berdasarkan jadwal cron.
Contoh PenggunaanMemproses batch, migrasi data.Backup harian, membersihkan cache.
Format YAMLkind: Jobkind: 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.