Kubernetes ima analogan način izvođenja jednokratnih procesa Poslovi i periodični procesi poput cron poslovi.
Započet ćemo s tipičnim primjerom onoga što su Jobs i demonstrirat ćemo standardni primjer iz službenih dokumenata. Iz ovog primjera bit će lako razumjeti što znači uspješno pokretanje posla u Kubernetesovom kontekstu.
Da biste nastavili dalje, preporučio bih vam da koristite igralište Kataconda za Kubernetes koje će pružiti Kubernetes klaster bez potrebe da ga ručno konfigurirate ili riskirate proizvodni klaster za eksperimente.
Kubernetes Jobs
Poslovi su apstrakcije Kubernetesa više razine, slične ReplicaSets i Deployments. No, za razliku od mahuna kojima upravljaju implementacije i ReplicaSets, mahune koje izvršavaju posao dovršavaju svoj posao i izlaze.
Kada se određeni broj mahuna završi, posao se uspješno dovršio. Koji su kriteriji koji definiraju uspješan završetak mahune, nešto ćemo definirati u Job's YAML datoteci. Tada će kontrolor posla osigurati da je određeni broj mahuna uspješno okončan i da je posao završen.
Stvorimo posao koji u svoje zapisnike ispisuje znamenke pi do 2000 mjesta koje ćemo ispitati. Stvorite datoteku i pozovite je moj posao.yaml i spremite u njega sljedeći sadržaj;
apiVersion: batch / v1vrsta: Posao
metapodaci:
naziv: pi
specifikacija:
predložak:
specifikacija:
spremnici:
- naziv: pi
slika: perl
naredba: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Nikad
backoffLimit: 4
Stvorite posao pomoću ove datoteke:
$ kubectl stvori -f ./posao.yamlPrimijetit ćete da posao traje nekoliko sekundi do nekoliko minuta i nakon što završi. Kada pokušate navesti sve mahune pomoću:
$ kubectl dobiti mahuneIME SPREMNI STATUS VRAĆA DOBU
pi-wg6zp 0/1 Završeno 0 50-ih
Vidjet ćete da je status mahune povezane s pi Dovršeno ne radi ili nije ukinut.Također možete kopirati naziv mahune kako bismo mogli provjeriti je li pi doista izračunata na 2000 znamenki. Određeni naziv mahune može se razlikovati u vašem slučaju.
$ kubectl zapisnici pi-wg6zpZanimljivo je da mahuna nije Prekinuta još uvijek je vrlo aktivan, samo što u njemu nema pokrenutih aplikacija. Slično kao kad samo uključite računalo i ne koristite ga. Da je mahuna prekinuta, prije svega ne bismo mogli izvući trupce s nje.
Da biste očistili posao i sve stvorene mahune, pokrenite naredbu:
$ kubectl delete -f my-jobs.yamlMožete saznati više o specifikacijama posla i kako ih napisati u službenoj dokumentaciji.
Cron Jobs
Cron Jobs sličan je uslužnom programu Cron u Unixu koji se povremeno izvodi prema rasporedu koji želimo. To nije superstabilna stvar u Kubernetesu, u vrijeme pisanja ovog članka, pa biste možda trebali biti oprezni pri korištenju. Da citiramo službene dokumente:
“Cron posao stvara objekt posla oko jednom za vrijeme izvršenja svog rasporeda. Kažemo "otprilike", jer postoje određene okolnosti u kojima se mogu stvoriti dva radna mjesta ili se ne može stvoriti nikakvo radno mjesto. Nastojimo to učiniti rijetkim, ali ih ne sprječavamo u potpunosti. Prema tome, poslovi bi trebali biti idempotentan"
Izraz idempotent znači da bi Cron Job, bilo da se izvodi jednom ili dva puta ili bilo koji broj vremena, imao isti učinak na sustav. Provjera ažuriranja, nadgledanje takvih operacija može se smatrati neimpotentnim. No, izmjena podataka ili upisivanje u bazu podataka nisu među njima.
Napišimo cron posao koji bi napisao „Zdravo, svijete!”U svojim zapisnicima, zajedno s vremenskom oznakom kada je ta poruka napisana. Stvori datoteku nazvanu my-cronjob.yaml i na njega napiši sljedeći sadržaj:
apiVersion: batch / v1beta1vrsta: CronJob
metapodaci:
ime: moj-cronjob
specifikacija:
raspored: "* / 1 * * * *"
predložak posla:
specifikacija:
predložak:
specifikacija:
spremnici:
- ime: zdravo
slika: zauzeto
argumenti:
- / bin / sh
- -c
- datum; eho Hello iz klastera Kubernetes
restartPolicy: OnFailure
Rasporedni dio posla je najvažniji. Slijedi standardnu konvenciju Cron, postoji popis brojeva odvojenih razmacima. Pet brojeva predstavljaju,
- Minuta (0-59)
- Sat (0-23)
- Dan u mjesecu (1-31)
- Mjesec (1-12)
- Dan u tjednu (0-6) počevši od nedjelje
Korištenje zvjezdice (*) za polje znači bilo koju raspoloživu vrijednost tog polja (poput zamjenskog znaka) i prvi unos u našem rasporedu “* / 1 * * * *” označavao je da se posao mora izvoditi svake minute bez obzira na sat, dan ili mjesec godina. Korištenje * / 5 ispisat će poruku svakih 5 minuta.
Više o specifikaciji cronjob yaml možete saznati u službenim dokumentima. Pogledajmo sve mahune koje se kandidiraju za posao koji smo nazvali my-cronjob.
$ kubectl dobiti mahuneIME SPREMNI STATUS VRAĆA DOBU
my-cronjob-1534457100-hfhzf 0/1 Završeno 0 2m
my-cronjob-1534457160-gk85l 0/1 Završeno 0 1m
my-cronjob-1534457220-bj22x 0/1 Završeno 0 57s
Ukopavanjem u zapisnike svake mahune otkrila bi se jedna poruka s vremenskom oznakom, budući da su svi stvoreni u različito vrijeme, svi će imati različite vremenske oznake.
$ kubectl log my-cronjob-1534457100-hfhzfDa biste izbrisali cronjob, jednostavno pokrenite:
$ kubectl delete -f my-cronjob.yamlOvim ćete također izbrisati sve mahune stvorene u odgovarajućem postupku.
Reference
Ovdje možete saznati više o Kubernetesovim poslovima, a za Cron poslove možete posjetiti ovaj odjeljak njihove dobro strukturirane dokumentacije.