Kubernetes mempunyai cara yang serupa untuk menjalankan proses sekali sahaja Pekerjaan dan proses berkala seperti pekerjaan cron.
Kami akan memulakan dengan contoh biasa mengenai Pekerjaan dan menunjukkan contoh standard dari Dokumen rasmi. Dari contoh ini akan mudah difahami maksudnya dengan menjalankan Pekerjaan dengan jayanya dalam konteks Kubernetes.
Untuk mengikuti, saya akan mengesyorkan anda menggunakan Kataconda Playground untuk Kubernetes yang akan menyediakan kluster Kubernetes di luar kotak tanpa anda perlu mengkonfigurasinya secara manual atau mempertaruhkan kluster pengeluaran untuk eksperimen.
Pekerjaan Kubernetes
Pekerjaan adalah abstraksi Kubernetes tahap lebih tinggi, serupa dengan ReplikaSet dan Deployment. Tetapi tidak seperti pod yang dikendalikan oleh penyebaran dan ReplicaSet, pod yang menjalankan Job menyelesaikan tugasnya dan keluar.
Apabila bilangan pod tertentu selesai, Pekerjaan dikatakan berjaya diselesaikan. Apa kriteria yang menentukan penamatan pod yang berjaya adalah sesuatu yang akan kita tentukan dalam fail YAML Job. Kemudian pengawal Pekerjaan akan memastikan bahawa sebilangan pod berjaya ditamatkan dan Pekerjaan dikatakan lengkap.
Mari buat pekerjaan yang mencetak digit pi hingga 2000 tempat di lognya yang akan kami kaji. Buat fail dan panggilnya tugas saya.keladi dan simpan kandungan berikut di dalamnya;
apiVersion: kumpulan / v1baik: Pekerjaan
metadata:
nama: pi
spesifikasi:
templat:
spesifikasi:
bekas:
- nama: pi
gambar: perl
arahan: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
mulakan semula Dasar: Tidak pernah
backoffLimit: 4
Buat pekerjaan, menggunakan fail ini:
$ kubectl buat -f ./ pekerjaan.keladiAnda akan melihat bahawa kerja dengan mengambil masa beberapa saat hingga beberapa minit untuk dijalankan dan setelah selesai. Apabila anda mencuba menyenaraikan semua pod menggunakan:
$ kubectl dapatkan podNAMA READY STATUS RESTARTS UMUR
pi-wg6zp 0/1 Selesai 0 50-an
Anda akan melihat bahawa Status pod berkaitan pi adalah Selesai tidak berjalan atau ditamatkan.Anda juga boleh menyalin nama pod sehingga kami dapat mengesahkan bahawa pi memang telah dikira hingga 2000 digit. Nama khusus pod mungkin berbeza mengikut kes anda.
$ kubectl log pi-wg6zpCukup menarik, pod belum Ditamatkan ia masih aktif, tidak ada aplikasi yang berjalan di dalamnya. Sama seperti menghidupkan komputer anda dan tidak menggunakannya. Sekiranya pod ditamatkan, kita tidak akan dapat mencabut log daripadanya.
Untuk membersihkan tugas dan semua pod yang dibuat, jalankan arahan:
$ kubectl delete -f my-jobs.keladiAnda boleh mengetahui lebih lanjut mengenai spesifikasi Pekerjaan dan cara menulis spesifikasi anda dalam dokumentasi rasmi.
Pekerjaan Cron
Pekerjaan Cron serupa dengan utiliti Cron di Unix yang berjalan secara berkala mengikut jadual yang kami mahukan. Ini bukan perkara takhayul di Kubernetes, pada masa penulisan ini, jadi anda mungkin ingin berhati-hati menggunakan. Untuk memetik dokumen rasmi:
"Pekerjaan cron membuat objek pekerjaan mengenai sekali setiap masa pelaksanaan jadualnya. Kami mengatakan "tentang" kerana ada keadaan tertentu di mana dua pekerjaan mungkin dibuat, atau tidak ada pekerjaan yang mungkin dibuat. Kami berusaha menjadikannya jarang, tetapi tidak menghalangnya sepenuhnya. Oleh itu, pekerjaan semestinya tidak berkemampuan"
Istilah idempoten bermaksud bahawa Pekerjaan Cron sama ada dilakukan sekali atau dua kali atau sebilangan masa akan memberi kesan yang sama pada sistem. Memeriksa kemas kini, memantau operasi seperti itu boleh dianggap tidak sesuai. Tetapi mengubah data, atau menulis ke pangkalan data tidak termasuk di antaranya.
Mari tulis pekerjaan cron yang akan menulis "Hello, World!"Mesej di lognya bersama dengan cap waktu ketika mesej itu ditulis. Buat fail yang dipanggil my-cronjob.yaml dan untuk itu tuliskan kandungan berikut:
apiVersion: batch / v1beta1baik: CronJob
metadata:
nama: my-cronjob
spesifikasi:
jadual: "* / 1 * * * *"
templat pekerjaan:
spesifikasi:
templat:
spesifikasi:
bekas:
- nama: hello
gambar: busybox
berhujah:
- / tong / sh
- -c
- Tarikh; gema Hello dari kelompok Kubernetes
mulakan semulaPolicy: OnFailure
Bahagian jadual tugas adalah yang paling penting. Ia mengikuti konvensi Cron standard, terdapat senarai nombor yang dipisahkan dengan spasi. Lima nombor tersebut mewakili,
- Minit (0-59)
- Jam (0-23)
- Hari Bulan (1-31)
- Bulan (1-12)
- Hari dalam seminggu (0-6) bermula dari hari Ahad
Menggunakan tanda bintang (*) untuk medan bermaksud apa-apa nilai yang tersedia dari bidang itu (seperti wildcard) dan entri pertama dalam jadual kami "* / 1 * * * *" menunjukkan bahawa tugas mesti dijalankan setiap minit tanpa mengira jam, hari atau bulan tahun. Menggunakan * / 5 akan mencetak mesej setiap 5 minit.
Anda boleh mengetahui lebih lanjut mengenai spesifikasi cramjob yaml dalam dokumen rasmi. Mari lihat semua pod berjalan untuk pekerjaan itu, yang kami namakan my-cronjob.
$ kubectl dapatkan podNAMA READY STATUS RESTARTS UMUR
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 57s
Menggali log setiap pod akan mendedahkan satu mesej dengan cap waktu, kerana semuanya dibuat pada masa yang berlainan, mereka semua akan mempunyai cap waktu yang berbeza.
$ kubectl log my-cronjob-1534457100-hfhzfUntuk memadam cronjob, jalankan:
$ kubectl delete -f my-cronjob.keladiIni juga akan menghapus sebarang pod yang dibuat dalam proses yang sewajarnya.
Rujukan
Anda boleh mengetahui lebih lanjut mengenai Pekerjaan Kubernetes di sini dan untuk pekerjaan Cron anda boleh mengunjungi bahagian dokumentasi berstruktur mereka yang baik ini.