CronJob adalah jenis beban kerja khusus yang tidak mengelola pod secara langsung. Sebagai gantinya, ia secara berkala membuat beberapa pekerjaan independen berdasarkan kebijakan tertentu dan memantau statusnya. CronJob cocok untuk operasi periodik dan berulang, seperti melakukan pencadangan atau mengirim email. Topik ini menjelaskan cara membuat CronJob menggunakan konsol atau kubectl.
Contoh gambar yang digunakan dalam topik ini adalah gambar publik. Klaster atau node Anda harus memiliki akses jaringan publik untuk menariknya:
Aktifkan klaster ACK yang ada untuk mengakses Internet (direkomendasikan): Buat gateway NAT publik untuk virtual private cloud (VPC) yang menampung klaster. Semua sumber daya klaster akan mendapatkan akses publik.
Tetapkan alamat IP publik statis ke node: Node dengan IP publik dapat menarik gambar publik, tetapi setiap node yang menjalankan beban kerja harus diberi IP publik.
Buat Cronjob
Gunakan konsol
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di halaman CronJobs, klik Create from Image.
Di halaman wizard Basic Information, konfigurasikan parameter dasar aplikasi. Lalu, klik Next untuk menuju ke halaman wizard Container.
Di bagian General, masukkan
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latestsebagai Image Name. Di bagian Lifecycle, masukkan/bin/shdi kotak Command parameter Start, dan masukkan["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"]di kotak Parameter. Klik Next untuk menuju ke halaman wizard Lanjutan.PentingSebelum Anda menarik gambar
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest, Anda harus mengaktifkan akses Internet untuk klaster. Jika Anda memilih Configure SNAT for VPC saat membuat klaster, klaster tersebut memiliki akses Internet. Jika Anda tidak memilih opsi ini, lihat Aktifkan klaster ACK yang ada untuk mengakses Internet.
Di halaman wizard Advanced, Anda dapat mengonfigurasi penjadwalan dan pengaturan pekerjaan untuk CronJob. Dalam contoh ini, atur aturan penjadwalan untuk berjalan setiap 2 menit dan biarkan opsi lainnya sebagai default. Lalu, klik Create di bagian bawah halaman.

Kategori
Parameter
Deskripsi
CronJob
Schedule
Anda dapat menentukan jadwal berdasarkan jam, harian, mingguan, atau bulanan. Anda juga dapat menentukan ekspresi cron.
Untuk informasi lebih lanjut tentang ekspresi Cron, lihat Ekspresi Cron.
Concurrency Policy
Menentukan apakah pekerjaan baru dapat dibuat ketika pekerjaan saat ini belum selesai.
Forbid: Lewati pembuatan pekerjaan baru. Opsi ini cocok untuk skenario di mana pekerjaan harus dijalankan dalam urutan tertentu atau saling bergantung.Allow: Mengizinkan eksekusi konkuren dan langsung membuat pekerjaan baru. Opsi ini cocok untuk skenario di mana pekerjaan tidak saling memengaruhi.Replace: Menghentikan pekerjaan saat ini dan membuat pekerjaan baru. Opsi ini cocok untuk skenario di mana hasil eksekusi terbaru diperlukan.
Job History
Jumlah pekerjaan sukses dan gagal yang disimpan oleh CronJob untuk menghindari catatan historis yang berlebihan menghabiskan sumber daya.
Successful Jobs History Limit: Jumlah pekerjaan sukses terbaru yang disimpan.
Failed Jobs History Limit: Jumlah pekerjaan gagal terbaru yang disimpan.
Job Settings
Completions
jobTemplate.spec.completions, yang menentukan jumlah pod yang memasuki status selesai.Parallelism
jobTemplate.spec.parallelism, yang menentukan jumlah pod yang dapat berjalan secara bersamaan.Timeout
jobTemplate.spec.activeDeadlineSeconds, yang menentukan waktu proses maksimum untuk satu pekerjaan. Pekerjaan dihentikan segera setelah waktu proses melebihi nilai ini, terlepas dari apakah pekerjaan selesai. Opsi ini cocok untuk pekerjaan yang memiliki persyaratan waktu ketat atau mungkin masuk ke loop tak terbatas. Nilai default adalah600detik (s).BackoffLimit
jobTemplate.spec.backoffLimit: Jumlah maksimum percobaan ulang setelah pod gagal, yaitu total kegagalan untuk semua pod. Nilai default adalah6.Restart
jobTemplate.spec.template.spec.restartPolicy, yang menentukan kebijakan mulai ulang setelah pod gagal.Never: Jika sebuah container dalam pod keluar secara tidak normal, sistem akan mencoba memulai ulang pod di tempat (tanpa membuat pod baru). Restart ini tidak termasuk dalam hitungan
spec.backoffLimit.On Failure: Setelah pod gagal, sistem membuat pod baru untuk menggantikannya.
Labels, Annotations
Pod Labels
Tambahkan label ke setiap pod yang termasuk dalam beban kerja. Semua sumber daya di klaster, termasuk beban kerja dan layanan, dipasangkan dengan pod menggunakan label. ACK menambahkan label dalam format
app:(nama aplikasi)ke pod secara default.Pod Annotations
Tambahkan anotasi ke setiap pod yang termasuk dalam beban kerja. Beberapa fitur di ACK menggunakan anotasi. Anda dapat mengonfigurasi anotasi saat menggunakan fitur-fitur ini.
Setelah CronJob dibuat, Anda dapat melihat pekerjaan yang dibuat pada interval 2 menit di konsol.

Gunakan kubectl
Sebelum Anda membuat beban kerja, pastikan bahwa Anda telah terhubung ke klaster menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig klaster dan gunakan kubectl untuk terhubung ke klaster.
Salin file YAML berikut dan simpan sebagai cronjob.yaml. Bagian
jobTemplate.specdari CronJob memiliki format yang sama dengan bagianspecdari pekerjaan. Contoh berikut menggunakan contoh pekerjaan di Buat Pekerjaan.
apiVersion: batch/v1
kind: CronJob
metadata:
name: example-cronjob
labels:
app: cronjob
spec:
schedule: "*/2 * * * *" # Jalankan setiap 2 menit
concurrencyPolicy: Forbid # Larang eksekusi konkuren
successfulJobsHistoryLimit: 3 # Simpan 3 pekerjaan sukses terbaru
failedJobsHistoryLimit: 2 # Simpan 2 pekerjaan gagal terbaru
jobTemplate:
spec:
completions: 1 # Hentikan pekerjaan setelah dua pod selesai
parallelism: 1 # Jalankan hanya satu pod pada satu waktu
template:
spec:
containers:
- name: counter
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
command:
- /bin/sh
- -c
- |
echo "memulai...";
COUNTER=0;
while [ $COUNTER -lt 5 ]; do
sleep 2;
COUNTER=$((COUNTER+1));
echo "${COUNTER}";
done;
echo "selesai";
exit 0
restartPolicy: Never # Jangan mulai ulang podJalankan perintah berikut untuk membuat CronJob:
kubectl apply -f cronjob.yamlKeluaran yang diharapkan:
cronjob.batch/example-cronjob createdTunggu sekitar 10 menit dan jalankan perintah berikut untuk memeriksa status eksekusi pekerjaan:
kubectl get jobKeluaran yang diharapkan:
NAME STATUS COMPLETIONS DURATION AGE example-cronjob-2901**22 Complete 2/2 31s 5m13s example-cronjob-2901**23 Complete 2/2 31s 3m13s example-cronjob-2901**24 Complete 2/2 26s 73s
Referensi
Untuk informasi lebih lanjut tentang masalah yang mungkin Anda temui saat membuat beban kerja, lihat FAQ tentang beban kerja.
Untuk informasi lebih lanjut tentang pengecualian pod, lihat Pemecahan Masalah Pod.