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 |
|
| 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. |
Contoh gambar yang digunakan dalam topik ini adalah gambar publik. Kluster atau node Anda harus memiliki akses jaringan publik untuk menariknya:
Aktifkan kluster ACK yang ada untuk mengakses Internet (direkomendasikan): Buat gateway NAT publik untuk virtual private cloud (VPC) yang menampung kluster. Semua sumber daya kluster akan mendapatkan akses publik.
Tetapkan alamat IP publik statis ke node: Node dengan IP publik dapat menarik gambar publik, namun setiap node yang menjalankan beban kerja harus diberi alamat IP publik.
Buat Pekerjaan
Konsol ACK
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih .
Di halaman Jobs, klik Create from Image di pojok kanan atas.
Di langkah Basic Information, konfigurasikan pengaturan dasar aplikasi. Lalu, klik Next untuk melanjutkan ke langkah Container.
Di bagian General, masukkan
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latestpada bidang Image Name. Di bagian Lifecycle, pilih dan masukkan/bin/shserta["-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.PentingSebelum 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.
Di langkah Advanced, konfigurasikan parameter
CompletionsdanParallelism. 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.
Bagian
Parameter
Deskripsi
Job Settings
Completions
Jumlah pod yang harus dihentikan dengan sukses. Parameter ini sesuai dengan parameter
spec.completionsdari konfigurasi Pekerjaan.Parallelism
Jumlah pod yang dapat berjalan secara paralel. Parameter ini sesuai dengan parameter
spec.parallelismdari konfigurasi Pekerjaan.Timeout
Periode timeout eksekusi Pekerjaan. Parameter ini sesuai dengan parameter
spec.activeDeadlineSecondsdari 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.backoffLimitdari konfigurasi Pekerjaan. Nilai default:6.Restart
Kebijakan restart pod. Parameter ini sesuai dengan parameter
template.spec.restartPolicydari 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.
Setelah Pekerjaan dibuat, Anda dapat melihat log Pekerjaan di konsol ACK. Log menunjukkan bahwa dua pod yang dibuat oleh Pekerjaan mengembalikan output yang sama.

kubectl
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.
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.Jalankan perintah berikut untuk membuat Pekerjaan:
kubectl apply -f job.yamlOutput yang diharapkan:
job.batch/example-job createdSetelah Pekerjaan dibuat, tunggu 15 detik dan jalankan perintah berikut untuk memeriksa status Pekerjaan:
kubectl get job example-jobOutput 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 16sSetelah Pekerjaan dibuat, tunggu 40 detik dan jalankan perintah berikut untuk memeriksa status Pekerjaan:
kubectl get job example-jobOutput berikut menunjukkan bahwa Pekerjaan selesai.
NAME STATUS COMPLETIONS DURATION AGE example-job Complete 2/2 27s 37sJalankan perintah berikut untuk memeriksa log Pekerjaan:
kubectl logs -l job-name=example-jobOutput 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.