全部产品
Search
文档中心

Container Service for Kubernetes:Buat Pekerjaan

更新时间:Jul 09, 2025

Pekerjaan memproses tugas-tugas satu kali untuk memastikan bahwa pod dalam tugas tersebut dihentikan dengan sukses. Topik ini menjelaskan konsep Pekerjaan dan cara membuatnya di konsol Container Service for Kubernetes (ACK) atau menggunakan kubectl.

Pengenalan Pekerjaan

Deployment, StatefulSet, dan DaemonSet dirancang untuk memastikan sejumlah pod berjalan untuk sebuah aplikasi. Pekerjaan menciptakan pod dan memastikan sejumlah pod tertentu dihentikan dengan sukses. Anda dapat mengonfigurasi parameter spec.completions untuk menentukan jumlah penyelesaian pod yang sukses. Parameter spec.parallelism dapat dikonfigurasi untuk menentukan jumlah pod yang dapat berjalan secara paralel selama eksekusi Pekerjaan.

Skenario

completions

parallelism

Perilaku Pekerjaan

Anda ingin menjalankan tugas satu kali, seperti inisialisasi database.

1

1

Hanya menjalankan satu pod pada satu waktu hingga pod tersebut dihentikan dengan sukses.

Anda ingin menjalankan beberapa pod secara paralel, tetapi hanya sejumlah pod tertentu yang diperlukan untuk dihentikan dengan sukses. Misalnya, Anda dapat menjalankan tugas di beberapa zona untuk memastikan ketersediaan tinggi. Namun, hanya satu tugas yang diperlukan untuk mengembalikan output.

M (M < N)

N

Menjalankan N pod secara paralel hingga M pod dihentikan dengan sukses.

Sumber daya komputasi tidak mencukupi untuk menjalankan jumlah pod yang ditentukan secara paralel.

N

M (M < N)

Menjalankan M pod secara paralel hingga N pod dihentikan dengan sukses.

Sumber daya komputasi cukup untuk menjalankan tugas, seperti tugas pemrosesan data, secara paralel.

N

N

Menjalankan N pod secara paralel hingga N pod dihentikan dengan sukses.

Penting

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

Buat Pekerjaan

Konsol ACK

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

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih Workloads > Jobs.

  3. Di halaman Jobs, klik Create from Image di pojok kanan atas.

  4. Di langkah Basic Information, konfigurasikan pengaturan dasar aplikasi. Lalu, klik Next untuk melanjutkan ke langkah Container.

  5. Di bagian General, masukkan registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest pada bidang Image Name. Di bagian Lifecycle, pilih Start > Command dan masukkan /bin/sh serta ["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"] pada bidang Parameter, seperti yang ditunjukkan pada gambar berikut. Lalu, klik Next untuk melanjutkan ke langkah Lanjutan.

    Penting

    Sebelum menarik gambar registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest, pastikan kluster telah diaktifkan untuk akses Internet. Jika Anda mempertahankan nilai default untuk parameter Configure SNAT for VPC saat membuat kluster, kluster dapat mengakses Internet. Untuk informasi lebih lanjut tentang cara mengaktifkan akses Internet untuk kluster yang ada, lihat Aktifkan kluster ACK yang ada untuk mengakses Internet.

    image.png

  6. Di langkah Advanced, konfigurasikan parameter Completions dan Parallelism. Dalam contoh ini, Completions disetel ke 2. Untuk informasi lebih lanjut tentang parameter-parameter ini, lihat Pengenalan Pekerjaan. Lalu, klik Create di bagian bawah halaman.

    image.png

    Bagian

    Parameter

    Deskripsi

    Job Settings

    Completions

    Jumlah pod yang harus dihentikan dengan sukses. Parameter ini sesuai dengan parameter spec.completions dari konfigurasi Pekerjaan.

    Parallelism

    Jumlah pod yang dapat berjalan secara paralel. Parameter ini sesuai dengan parameter spec.parallelism dari konfigurasi Pekerjaan.

    Timeout

    Periode timeout eksekusi Pekerjaan. Parameter ini sesuai dengan parameter spec.activeDeadlineSeconds dari konfigurasi Pekerjaan. Jika eksekusi Pekerjaan timeout, Pekerjaan dihentikan, terlepas dari apakah jumlah pod yang dihentikan dengan sukses mencapai nilai yang ditentukan. Parameter ini cocok untuk tugas yang sangat sensitif terhadap waktu atau mungkin mengalami eksekusi loop tak terbatas. Nilai default: 600. Satuan: detik.

    BackoffLimit

    Jumlah maksimum percobaan ulang yang dilakukan oleh Pekerjaan saat pod gagal. Parameter ini sesuai dengan parameter spec.backoffLimit dari konfigurasi Pekerjaan. Nilai default: 6.

    Restart

    Kebijakan restart pod. Parameter ini sesuai dengan parameter template.spec.restartPolicy dari konfigurasi Pekerjaan. Nilai valid:

    • Never: Saat sebuah kontainer dalam pod keluar secara tidak normal, sistem mencoba memulai ulang pod. Dalam kasus ini, sistem tidak membuat pod baru. Restart tidak dihitung sebagai batas percobaan ulang yang ditentukan oleh parameter spec.backoffLimit.

    • On Failure: Saat sebuah pod gagal, sistem membuat yang baru untuk menggantikan pod yang gagal.

    Labels, Annotations

    Pod Labels

    Tambahkan label ke setiap pod yang termasuk dalam beban kerja. Semua sumber daya di kluster, termasuk beban kerja dan layanan, dicocokkan dengan pod menggunakan label. Secara default, ACK menambahkan label dalam format app:(nama aplikasi) ke pod.

    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 Pekerjaan dibuat, Anda dapat melihat log Pekerjaan di konsol ACK. Log menunjukkan bahwa dua pod yang dibuat oleh Pekerjaan mengembalikan output yang sama.

    image

kubectl

Penting

Sebelum membuat beban kerja, pastikan Anda telah terhubung ke kluster menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.

  1. Buat file bernama job.yaml dan salin template YAML berikut ke file:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: example-job
    spec:
      completions: 2 # Hentikan Pekerjaan setelah dua pod dihentikan dengan sukses.
      parallelism: 1 # Jalankan hanya satu pod pada satu waktu.
      template:
        spec:
          containers:
          - name: counter
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            command: 
            - /bin/sh
            - -c
            - |
              echo "starting...";
              COUNTER=0;
              while [ $COUNTER -lt 5 ]; do
                sleep 2;
                COUNTER=$((COUNTER+1));
                echo "${COUNTER}";
              done;
              echo "finished";
              exit 0
          restartPolicy: Never # Gunakan kebijakan restart pod Never.
  2. Jalankan perintah berikut untuk membuat Pekerjaan:

    kubectl apply -f job.yaml

    Output yang diharapkan:

    job.batch/example-job created
  3. Setelah Pekerjaan dibuat, tunggu 15 detik dan jalankan perintah berikut untuk memeriksa status Pekerjaan:

    kubectl get job example-job

    Output berikut menunjukkan bahwa satu pod telah dihentikan dengan sukses dan Pekerjaan berada dalam keadaan Running.

    NAME          STATUS    COMPLETIONS   DURATION   AGE
    example-job   Running   1/2           16s        16s
  4. Setelah Pekerjaan dibuat, tunggu 40 detik dan jalankan perintah berikut untuk memeriksa status Pekerjaan:

    kubectl get job example-job

    Output berikut menunjukkan bahwa Pekerjaan selesai.

    NAME          STATUS     COMPLETIONS   DURATION   AGE
    example-job   Complete   2/2           27s        37s
  5. Jalankan perintah berikut untuk memeriksa log Pekerjaan:

    kubectl logs -l job-name=example-job

    Output yang diharapkan:

    starting...
    1
    2
    3
    4
    5
    finished
    starting...
    1
    2
    3
    4
    5
    finished

Referensi

  • CronJob membuat Pekerjaan berdasarkan jadwal yang ditentukan. CronJob cocok untuk menjalankan tugas terjadwal. Untuk informasi lebih lanjut, lihat Buat CronJob.

  • Untuk informasi lebih lanjut tentang cara menyelesaikan masalah yang terjadi saat membuat beban kerja, lihat FAQ tentang beban kerja.

  • Untuk informasi lebih lanjut tentang cara menyelesaikan masalah pengecualian pod, lihat Pemecahan masalah pod.