Kubernetes ima analogen način vodenja časovnih procesov Službe in periodični procesi, kot so cron delovna mesta.
Začeli bomo s tipičnim primerom, kaj so Jobs, in prikazali bomo standardni primer iz uradnih dokumentov. Iz tega primera bo enostavno razumeti, kaj to pomeni z uspešnim izvajanjem opravila v kontekstu Kubernetesa.
Če želite nadaljevati, vam priporočam, da uporabite igrišče Kataconda za Kubernetes, ki bo zagotovo zagotovilo gručo Kubernetes, ne da bi jo bilo treba ročno konfigurirati ali tvegati proizvodno gručo za poskuse.
Kubernetes Jobs
Opravila so abstrakcije Kubernetes na višji ravni, podobno kot ReplicaSets in Deployments. Toda za razliko od strokov, ki jih upravljajo razmestitve in ReplicaSets, stroki, ki opravijo opravilo, dokončajo svoje delo in izstopijo.
Ko določeno število strokov doseže dokončanje, naj bi se opravilo uspešno zaključilo. Kateri kriteriji opredeljujejo uspešno zaključitev stroka, bomo določili v datoteki YAML Job's. Nato bo nadzornik opravila zagotovil, da je bilo določeno število pods uspešno zaključenih in da bo opravilo končano.
Ustvarimo delo, ki v svoje dnevnike natisne številke pi do 2000 mest, ki jih bomo preučili. Ustvarite datoteko in jo pokličite moje delo.yaml in vanjo shranite naslednjo vsebino;
apiVersion: batch / v1vrsta: Job
metapodatki:
ime: pi
specifikacija:
predloga:
specifikacija:
posode:
- ime: pi
slika: perl
ukaz: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Nikoli
backoffLimit: 4
Ustvarite opravilo s to datoteko:
$ kubectl ustvari -f ./ služba.yamlOpazili boste, da delo traja nekaj sekund do nekaj minut in ko je končano. Ko poskusite navesti vse stroke z uporabo:
$ kubectl dobite strokeIME PRIPRAVLJENO STANJE ZAVARUJE STAROST
pi-wg6zp 0/1 Dokončano 0 50s
Videli boste, da je stanje povezanega pi-ja pod Dokončano se ne izvaja ali ukine.Lahko tudi kopirate ime stroja, da lahko preverimo, ali je pi res izračunan na 2000 števk. Določeno ime stroka se lahko v vašem primeru razlikuje.
$ kubectl beleži pi-wg6zpZanimivo je, da stroka ni Prenehala še vedno je zelo aktiven, le da v njem ni zagnanih nobenih aplikacij. Podobno kot samo vklopiti računalnik in ga ne uporabljati. Če bi bil strok končan, sploh ne bi mogli potegniti hlodov z njega.
Če želite očistiti opravilo in vse ustvarjene pods, zaženite ukaz:
$ kubectl delete -f my-jobs.yamlV uradni dokumentaciji lahko izveste več o specifikacijah delovnih mest in o tem, kako napisati specifikacijo.
Cron Jobs
Cron Jobs je podoben pripomočku Cron v Unixu, ki se občasno izvaja po urniku, ki ga želimo. V času pisanja tega dokumenta Kubernetes ni nadstandardna stvar, zato boste morda želeli biti previdni pri uporabi. Če citiram uradne dokumente:
»Opravilo cron ustvari predmet opravila približno enkrat na čas izvedbe svojega urnika. Pravimo "približno", ker obstajajo določene okoliščine, ko bi lahko ustvarili dve zaposlitvi ali nobeno. Te poskušamo narediti redke, vendar jih ne preprečujemo popolnoma. Zato bi morala biti delovna mesta idempotenten"
Izraz idempotent pomeni, da bi opravilo Cron, bodisi enkrat ali dvakrat ali poljubno število časa, imelo enak učinek na sistem. Preverjanje posodobitev in spremljanje tovrstnih operacij se lahko štejejo za nepomembne. Toda spreminjanje podatkov ali zapisovanje v bazo podatkov ni med temi.
Napišemo cron opravilo, ki bi napisalo »Zdravo, svet!”V dnevnikih skupaj s časovnim žigom, kdaj je bilo to sporočilo napisano. Ustvari datoteko z imenom my-cronjob.yaml in vanj napišite naslednjo vsebino:
apiVersion: batch / v1beta1vrsta: CronJob
metapodatki:
ime: my-cronjob
specifikacija:
urnik: "* / 1 * * * *"
jobTemplate:
specifikacija:
predloga:
specifikacija:
posode:
- ime: zdravo
slika: busybox
argumenti:
- / bin / sh
- -c
- datum; echo Hello iz gruče Kubernetes
restartPolicy: OnFailure
Urnik dela je najpomembnejši. Sledi običajni konvenciji Cron, seznam števil je ločen s presledki. Pet številk predstavlja,
- Minuta (0-59)
- Ura (0-23)
- Dan v mesecu (1-31)
- Mesec (1–12)
- Dan v tednu (0-6) od nedelje
Uporaba zvezdice (*) za polje pomeni katero koli razpoložljivo vrednost tega polja (na primer nadomestni znak) in prvi vnos v našem urniku »* / 1 * * * *« je označeval, da je treba delo izvajati vsako minuto, ne glede na uro, dan ali mesec leto. Če uporabite * / 5, se sporočilo natisne vsakih 5 minut.
Več o specifikaciji cronjob yaml lahko izveste v uradnih dokumentih. Oglejmo si vse stroje, ki tečejo za to nalogo, ki smo jo poimenovali my-cronjob.
$ kubectl dobite strokeIME PRIPRAVLJENO STANJE ZAVARUJE STAROST
my-cronjob-1534457100-hfhzf 0/1 Dokončano 0 2m
my-cronjob-1534457160-gk85l 0/1 Dokončano 0 1m
my-cronjob-1534457220-bj22x 0/1 Dokončano 0 57s
Kopanje v dnevnike vsakega stroka bi razkrilo eno sporočilo s časovnim žigom, saj so bili vsi ustvarjeni ob različnem času, vsi bodo imeli različne časovne žige.
$ kubectl log my-cronjob-1534457100-hfhzfČe želite izbrisati cronjob, preprosto zaženite:
$ kubectl delete -f my-cronjob.yamlS tem bodo izbrisani tudi vsi stroki, ki so bili ustvarjeni v ustreznem postopku.
Reference
Tu lahko izveste več o Kubernetes Jobs, za Cron pa v tem oddelku njihove dobro strukturirane dokumentacije.