Kubernetes memiliki cara analog menjalankan proses satu kali Pekerjaan dan proses periodik seperti pekerjaan cron.
Kami akan mulai dengan contoh khas tentang apa itu Jobs dan mendemonstrasikan contoh standar dari Dokumen resmi. Dari contoh ini akan mudah untuk memahami apa artinya menjalankan Pekerjaan dengan sukses dalam konteks Kubernetes.
Untuk mengikuti, saya akan merekomendasikan Anda untuk menggunakan Kataconda Playground for Kubernetes yang akan menyediakan cluster Kubernetes yang tidak biasa tanpa Anda harus mengonfigurasinya secara manual atau mempertaruhkan cluster produksi untuk eksperimen.
Pekerjaan Kubernetes
Pekerjaan adalah abstraksi Kubernetes tingkat tinggi, mirip dengan ReplicaSets dan Deployment. Namun tidak seperti pod yang dikelola oleh penerapan dan ReplicaSet, pod yang menjalankan Pekerjaan menyelesaikan pekerjaannya dan keluar.
Ketika jumlah pod yang ditentukan mencapai selesai, Pekerjaan dikatakan telah berhasil diselesaikan. Apa kriteria yang menentukan penghentian pod yang berhasil adalah sesuatu yang akan kita definisikan di file YAML Job. Kemudian pengontrol Pekerjaan akan memastikan bahwa sejumlah pod telah berhasil dihentikan dan Pekerjaan dikatakan selesai.
Mari kita buat pekerjaan yang mencetak digit pi hingga 2000 tempat di lognya yang akan kita periksa. Buat file dan beri nama pekerjaan saya.yaml dan simpan konten berikut di dalamnya;
apiVersi: batch/v1jenis: Pekerjaan
metadata:
nama: pi
spesifikasi:
pola:
spesifikasi:
wadah:
- nama: pi
gambar: perl
perintah: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Tidak pernah
batas mundur: 4
Buat pekerjaan, menggunakan file ini:
$ kubectl buat -f ./pekerjaan.yamlAnda akan melihat bahwa pekerjaan membutuhkan beberapa detik hingga beberapa menit untuk dijalankan dan setelah selesai. Saat Anda mencoba membuat daftar semua pod menggunakan:
$ kubectl dapatkan podNAMA SIAP STATUS MULAI ULANG USIA
pi-wg6zp 0/1 Selesai 0 50-an
Anda akan melihat bahwa Status pod terkait pi adalah Lengkap tidak berjalan atau dihentikan.Anda juga dapat menyalin nama pod sehingga kami dapat memverifikasi bahwa pi memang telah dihitung hingga 2000 digit. Nama spesifik pod mungkin berbeda dalam kasus Anda.
$ kubectl log pi-wg6zpYang cukup menarik, podnya tidak Dihentikan masih sangat aktif, hanya saja tidak ada aplikasi yang berjalan di dalamnya. Mirip dengan hanya menyalakan komputer Anda dan tidak menggunakannya. Jika pod dihentikan, kami tidak akan bisa menarik log darinya, sejak awal.
Untuk membersihkan job dan semua pod yang telah dibuat, jalankan perintah:
$ kubectl delete -f my-jobs.yamlAnda dapat mempelajari lebih lanjut tentang spesifikasi Pekerjaan dan cara menulis spesifikasi Anda di dokumentasi resmi.
Pekerjaan Cron
Cron Jobs mirip dengan utilitas Cron di Unix yang berjalan secara berkala sesuai jadwal yang kita inginkan. Ini bukan hal yang superstabil di Kubernetes, pada saat penulisan ini, jadi Anda mungkin ingin berhati-hati menggunakan. Mengutip dokumen resmi:
“Tugas cron menciptakan objek pekerjaan tentang sekali per waktu pelaksanaan dari jadwalnya. Kami mengatakan "tentang" karena ada keadaan tertentu di mana dua pekerjaan mungkin dibuat, atau tidak ada pekerjaan yang mungkin dibuat. Kami berusaha membuat ini langka, tetapi tidak sepenuhnya mencegahnya. Oleh karena itu, pekerjaan harus idempoten”
Istilah idempoten berarti bahwa Cron Job apakah dilakukan sekali atau dua kali atau beberapa kali akan memiliki efek yang sama pada sistem. Memeriksa pembaruan, memantau operasi semacam itu dapat dianggap idempoten. Tetapi memodifikasi data, atau menulis ke database tidak termasuk di antaranya.
Mari kita menulis pekerjaan cron yang akan menulis "Halo, Dunia"!” pesan di lognya bersama dengan stempel waktu kapan pesan itu ditulis. Buat file bernama my-cronjob.yaml dan untuk itu tulis konten berikut:
apiVersi: batch/v1beta1jenis: CronJob
metadata:
nama: my-cronjob
spesifikasi:
Jadwal 1 * * * *"
pekerjaanTemplat:
spesifikasi:
pola:
spesifikasi:
wadah:
- nama: halo
gambar: busybox
argumen:
- /bin/sh
- -c
- tanggal; echo Halo dari kluster Kubernetes
restartPolicy: OnFailure
Bagian jadwal pekerjaan adalah yang paling penting crucial. Ini mengikuti konvensi Cron standar, ada daftar angka yang dipisahkan oleh spasi. Lima angka mewakili,
- Menit (0-59)
- Jam (0-23)
- Hari dalam Bulan (1-31)
- Bulan (1-12)
- Hari dalam seminggu (0-6) mulai dari hari Minggu
Menggunakan tanda bintang (*) untuk bidang berarti nilai apa pun yang tersedia dari bidang itu (seperti wildcard) dan entri pertama dalam jadwal kami “*/1 * * * *” menunjukkan bahwa pekerjaan harus dijalankan setiap menit terlepas dari jam, hari, atau bulan tahun. Menggunakan */5 akan mencetak pesan setiap 5 menit.
Anda dapat mempelajari lebih lanjut tentang spesifikasi cronjob yaml di dokumen resmi. Mari kita lihat semua pod yang menjalankan pekerjaan, yang kami beri nama my-cronjob.
$ kubectl dapatkan podNAMA SIAP STATUS MULAI ULANG USIA
my-cronjob-1534457100-hfhzf 0/1 Selesai 0 2m
my-cronjob-1534457160-gk85l 0/1 Selesai 0 1m
my-cronjob-1534457220-bj22x 0/1 Selesai 0 57 detik
Menggali log masing-masing pod akan mengungkapkan satu pesan dengan stempel waktu, karena semuanya dibuat pada waktu yang berbeda, mereka semua akan memiliki stempel waktu yang berbeda.
$ kubectl log my-cronjob-1534457100-hfhzfUntuk menghapus cronjob cukup jalankan:
$ kubectl delete -f my-cronjob.yamlIni juga akan menghapus semua pod yang dibuat dalam proses yang seharusnya.
Referensi
Anda dapat mempelajari lebih lanjut tentang Pekerjaan Kubernetes di sini dan untuk pekerjaan Cron Anda dapat mengunjungi bagian ini dari dokumentasi mereka yang terstruktur dengan baik.