Portal/Notes πŸ“
Cka

CronJob

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Sebelumnya kita sudah membuat sebuah Job untuk membackup service database postgres yang kita miliki. Tapi tidak praktis jika kita harus menjalankan job ini secara manual setiap kali ingin backup. Kita bisa menggunakan CronJob untuk ini.

CronJob membuat sebuah job pada jadwal berulang. CronJob menjalankan Job secara periodik pada jadwal tertentu, yang ditulis dalam format Cron.

# * * * * * <command to execute>
# | | | | |
# | | | | day of the week (0–6) (Sunday to Saturday; 
# | | | month (1–12)             7 is also Sunday on some systems)
# | | day of the month (1–31)
# | hour (0–23)
# minute (0–59)

Saya biasanya menggunakan website ini (crontab.guru) untuk memeriksa apakah format cron saya sudah benar dan akan berperilaku sesuai harapan.

Create CronJob to Dump Database

Mari buat CronJob yang akan menjalankan job yang sebelumnya kita buat untuk mendump database PostgreSQL. Definisi/konfigurasi dasar CronJob cukup sederhana.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: postgres-backup
spec:
  schedule: "0 0 * * *"  # Runs at midnight daily
  jobTemplate:

Kita hanya perlu mendefinisikan CronJob di atas, menentukan schedule (di sini saya menggunakan 0 0 * * * sehingga akan berjalan setiap tengah malam), dan kemudian masukkan definisi job yang sebelumnya kita buat ke dalam bagian jobTemplate.

File lengkap kamu akan terlihat seperti ini.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: postgres-backup
spec:
  schedule: "0 0 * * *"
  jobTemplate:
    spec:
      ttlSecondsAfterFinished: 60
      template:
        spec:
          containers:
          - name: pg-backup
            image: postgres:17
            command: ["/bin/sh", "-c"]
            args:
            - |
              echo "Starting PostgreSQL backup..."
              pg_dump -h postgres.default.svc.cluster.local -d mydb > /backup/postgres_backup_$(date +%Y%m%d%H%M%S).sql
              echo "Backup completed!"
            env:
            - name: PGUSER
              valueFrom:
                secretKeyRef:
                  name: postgres-secret
                  key: POSTGRES_USER
            - name: PGPASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-secret
                  key: POSTGRES_PASSWORD
            volumeMounts:
            - mountPath: /backup
              name: backup-storage
          volumes:
          - name: backup-storage
            persistentVolumeClaim:
              claimName: postgres-backup-pvc
          restartPolicy: Never

Beri nama file tersebut postgres-backup-cronjob.yaml lalu apply file tersebut.

➜ kubectl apply -f postgres-backup-cronjob.yaml 
cronjob.batch/postgres-backup created

Validasi bahwa CronJob kamu berhasil dibuat.

➜ kubectl get cronjob                          
NAME              SCHEDULE    TIMEZONE   SUSPEND   ACTIVE   LAST SCHEDULE   AGE
postgres-backup   0 0 * * *   <none>     False     0        <none>          3s

Seperti yang bisa kita lihat di atas, sekarang kita memiliki CronJob yang akan membuat Job setiap tengah malam untuk menjalankan pg_dump. Kita juga bisa secara eksplisit menentukan timezone atau jika dibiarkan kosong akan menggunakan timezone lokal.

Untuk CronJobs tanpa zona waktu yang ditentukan, kube-controller-manager menafsirkan jadwal relatif terhadap zona waktu lokalnya.

Manually Trigger Job

Menunggu job berjalan di tengah malam tidak ideal ketika kita ingin menguji apakah CronJob kita akan berjalan dengan baik atau tidak. Dalam hal ini, kita bisa memicu scheduled job secara manual menggunakan perintah di bawah.

➜ kubectl create job --from=cronjob/postgres-backup backup-manual
job.batch/backup-manual created

Mari lihat daftar job dan kamu akan melihat job yang dipicu secara manual. Seperti sebelumnya, kita bisa mendapatkan log job untuk memastikan bahwa job berjalan dengan sukses.

➜ kubectl get jobs
NAME            STATUS     COMPLETIONS   DURATION   AGE
backup-manual   Complete   1/1           4s         5s
➜ kubectl logs jobs/backup-manual 
Starting PostgreSQL backup...
Backup completed!

References


Edit on GitHub

Last updated on

CronJob | Faisal Affan