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: NeverBeri nama file tersebut postgres-backup-cronjob.yaml lalu apply file tersebut.
β kubectl apply -f postgres-backup-cronjob.yaml
cronjob.batch/postgres-backup createdValidasi bahwa CronJob kamu berhasil dibuat.
β kubectl get cronjob
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
postgres-backup 0 0 * * * <none> False 0 <none> 3sSeperti 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 createdMari 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
- https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
- https://en.wikipedia.org/wiki/Cron
Last updated on