CronJobs tersedia secara umum di Google Kubernetes Engine (GKE) versi 1.21 dan yang lebih baru. Dokumen ini menjelaskan cara menjalankan CronJobs di GKE. CronJobs merupakan fitur bawaan Kubernetes. Untuk mengetahui detail selengkapnya, baca dokumentasi Kubernetes tentang CronJobs.
Ringkasan
CronJobs membuat Tugas Kubernetes dengan jadwal yang berulang. Dengan CronJobs, Anda dapat mengotomatiskan tugas rutin, seperti membuat pencadangan, membuat laporan, mengirim email, atau tugas pembersihan.
CronJobs dibuat, dikelola, diskalakan, dan dihapus dengan cara yang sama seperti Tugas. Jumlah objek Tugas secara pasti yang dibuat bergantung pada beberapa faktor. Untuk informasi selengkapnya, lihat Batasan CronJob.
Untuk mengetahui informasi Tugas selengkapnya, lihat Menjalankan Tugas.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Membuat CronJob
Anda dapat membuat CronJob menggunakan file manifes. Misalnya, manifes YAML berikut mencetak waktu saat ini dan string satu kali setiap menit sembari tetap mempertahankan nilai default untuk parameter CronJob:
# cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Allow
startingDeadlineSeconds: 100
suspend: false
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo "Hello, World!"
restartPolicy: OnFailure
Untuk membuat CronJob ini, simpan manifes YAML ke file lalu terapkan ke cluster:
kubectl apply -f PATH_TO_FILE
Ganti PATH_TO_FILE
dengan jalur ke manifes YAML.
Mengonfigurasi CronJob
Anda dapat menentukan parameter berikut saat membuat CronJob:
- Saat CronJob berjalan
- Yang dilakukan CronJob
- Batas waktu untuk memulai CronJob
- Apakah Tugas serentak diizinkan untuk CronJob
- Apakah Tugas baru ditangguhkan
- Jumlah eksekusi yang disimpan CronJob dalam historinya
Menentukan waktu eksekusi CronJob
Kolom spec.schedule
menentukan waktu dan frekuensi eksekusi CronJob menggunakan format crontab
standar Unix. Semua waktu CronJob menggunakan zona waktu UTC. Ada lima kolom yang dipisahkan oleh spasi.
Kolom ini mewakili unit berikut:
- Menit (antara 0 dan 59)
- Jam (antara 0 dan 23)
- Hari dalam sebulan (antara 1 dan 31)
- Bulan (antara 1 dan 12)
- Hari dalam seminggu (antara 0 dan 6 mulai hari Minggu)
Anda dapat menggunakan karakter khusus berikut di salah satu kolom
spec.schedule
:
?
adalah nilai karakter pengganti yang cocok dengan satu karakter.*
adalah nilai karakter pengganti yang cocok dengan nol atau beberapa karakter./
memungkinkan Anda menentukan interval untuk suatu kolom. Misalnya, jika kolom pertama (kolom menit) memiliki nilai*/5
, artinya "setiap 5 menit". Jika kolom kelima (kolom hari dalam seminggu) ditetapkan ke0/5
, artinya "setiap hari Minggu kelima".
Menentukan apa yang dijalankan CronJob
spec.jobTemplate
menjelaskan fungsi CronJob, seperti image
container-nya, perintah yang dijalankan container, dan kebijakan mulai ulang untuk
CronJob. Untuk mengetahui detail selengkapnya tentang apa saja yang harus disertakan dalam spec.jobTemplate
, lihat
dokumentasi Kubernetes CronJob.
Menentukan tenggat waktu
Kolom startingDeadlineSeconds
opsional menunjukkan jumlah detik maksimum
yang diperlukan CronJob untuk memulai jika melewatkan waktu yang dijadwalkan karena
alasan apa pun. CronJobs yang terlewat dianggap gagal.
Untuk menentukan batas waktu, tambahkan nilai startingDeadlineSeconds
ke kolom
spec
CronJob dalam file manifes. Misalnya, manifes
berikut menetapkan bahwa CronJob memiliki waktu 100 detik untuk memulai:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
jobTemplate:
spec:
...
Menentukan kebijakan serentak
Kolom spec.concurrencyPolicy
opsional menentukan cara menangani eksekusi serentak
Tugas yang dibuat oleh pengontrol CronJob. Jika Anda tidak menetapkan nilai,
beberapa Tugas serentak akan diizinkan secara default.
concurrencyPolicy
menerima nilai berikut:
Nilai | Arti |
---|---|
Allow |
Tugas Serentak diizinkan. Ini adalah setelan default-nya. |
Forbid |
Tugas Serentak dilarang, dan Tugas baru tidak dapat dimulai hingga Tugas sebelumnya selesai atau waktu habis. |
Replace |
Tugas Serentak dilarang, dan Tugas lama dibatalkan dan diganti dengan Tugas baru. |
Menangguhkan eksekusi berikutnya
Kolom spec.suspend
opsional, jika ditetapkan ke true
, akan mencegah Tugas baru
dijalankan, tetapi memungkinkan eksekusi saat ini selesai.
Menentukan batas histori
CronJob membuat Pod setiap kali dijalankan. Informasi melihat status penghentian eksekusi terbaru CronJob dan log setiap Pod dibahas dalam Melihat histori CronJob.
Anda dapat mengonfigurasi jumlah eksekusi CronJob yang berhasil dan gagal yang
disimpan dengan menentukan nilai spec.successfulJobsHistoryLimit
dan
spec.failedJobsHistoryLimit
. Secara default, successfulJobsHistoryLimit
ditetapkan ke
3 dan failedJobsHistoryLimit
ditetapkan ke 1.
Misalnya, manifes berikut memerintahkan GKE untuk menyimpan maksimum lima eksekusi CronJob yang berhasil dan maksimum 10 eksekusi CronJob yang gagal:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 10
jobTemplate:
spec:
...
Anda dapat menonaktifkan retensi histori eksekusi CronJob yang berhasil atau gagal dengan
menetapkan nilai masing-masing ke 0
. Menonaktifkan retensi histori dapat makin mempersulit
kegagalan proses debug. Misalnya, manifes berikut
memerintahkan GKE untuk hanya menyimpan eksekusi CronJob yang gagal:
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 10
jobTemplate:
spec:
...
Memeriksa CronJob
Untuk memeriksa konfigurasi CronJob, gunakan kubectl describe
:
kubectl describe cronjob CRONJOB_NAME
Ganti CRONJOB_NAME
dengan nama CronJob yang akan
diperiksa.
Melihat histori CronJob
CronJob berjalan di dalam Pod. Secara default, Kubernetes menyimpan log untuk Pod yang dihentikan dan mewakili tiga peristiwa terakhir yang berhasil dijalankan dari CronJob dan Tugas terakhir yang gagal. Anda dapat mengubah atau menonaktifkan setelan default ini dengan mengubah batas histori CronJob.
Untuk melihat histori CronJob, buat daftar semua Pod terlebih dahulu. CronJobs yang sudah selesai ditampilkan
dengan status Completed
, dan Tugas yang gagal memiliki status
RunContainerError
, CrashLoopBackOff
, atau status lain yang menunjukkan kegagalan.
NAME READY STATUS RESTARTS AGE
hello-1556555640-9bc5r 0/1 Completed 0 3m6s
hello-1556555700-cm6wk 0/1 Completed 0 2m6s
hello-1556555760-62wf5 0/1 Completed 0 66s
hello-1556555820-rl8kl 0/1 Completed 0 5s
hello-failed-1556555820-wrvt2 0/1 RunContainerError 1 5s
Untuk melihat log CronJob tertentu, jalankan perintah berikut:
kubectl logs POD_NAME
Ganti POD_NAME
dengan nama Pod yang ingin
Anda periksa.
Outputnya mirip dengan hal berikut ini:
container_linux.go:247: starting container process caused
"exec: \"/in/sh\": stat /in/sh: no such file or directory"
Menghapus CronJob
Untuk menghapus CronJob, jalankan perintah berikut:
kubectl delete cronjob CRONJOB_NAME
Saat Anda menghapus CronJob, pembersih sampah memori Kubernetes akan menghapus Tugas terkait dan mencegah Tugas baru dimulai.
Langkah selanjutnya
- Baca dokumentasi Kubernetes untuk CronJobs.
- Pelajari cara menjalankan Tugas satu kali.