All Products
Search
Document Center

Container Service for Kubernetes:Buat beban kerja CronJob untuk tugas terjadwal

Last Updated:Jun 27, 2025

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.

Penting

Contoh gambar yang digunakan dalam topik ini adalah gambar publik. Klaster atau node Anda harus memiliki akses jaringan publik untuk menariknya:

Buat Cronjob

Gunakan konsol

  1. Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan klaster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih Workloads > CronJobs.

  3. Di halaman CronJobs, klik Create from Image.

  4. Di halaman wizard Basic Information, konfigurasikan parameter dasar aplikasi. Lalu, klik Next untuk menuju ke halaman wizard Container.

  5. Di bagian General, masukkan registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest sebagai Image Name. Di bagian Lifecycle, masukkan /bin/sh di 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.

    Penting

    Sebelum 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.

    image.png

  6. 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.

    image.png

    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 adalah 600 detik (s).

    BackoffLimit

    jobTemplate.spec.backoffLimit: Jumlah maksimum percobaan ulang setelah pod gagal, yaitu total kegagalan untuk semua pod. Nilai default adalah 6.

    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.

  7. Setelah CronJob dibuat, Anda dapat melihat pekerjaan yang dibuat pada interval 2 menit di konsol.

    image.png

Gunakan kubectl

Penting

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.

  1. Salin file YAML berikut dan simpan sebagai cronjob.yaml. Bagian jobTemplate.spec dari CronJob memiliki format yang sama dengan bagian spec dari 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 pod
  1. Jalankan perintah berikut untuk membuat CronJob:

    kubectl apply -f cronjob.yaml

    Keluaran yang diharapkan:

    cronjob.batch/example-cronjob created
  2. Tunggu sekitar 10 menit dan jalankan perintah berikut untuk memeriksa status eksekusi pekerjaan:

    kubectl get job

    Keluaran 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