Kubernetes har en analog måde at køre engangsprocesser på Job og periodiske processer som cron job.
Vi starter med et typisk eksempel på, hvad Jobs er, og demonstrerer et standardeksempel fra de officielle Docs. Fra dette eksempel vil det være let at forstå, hvad det betyder ved at køre et job med succes i Kubernetes 'sammenhæng.
For at følge med vil jeg anbefale dig at bruge Kataconda Playground for Kubernetes, som giver en ud af boksen Kubernetes-klynge uden at du behøver at konfigurere en manuelt eller risikere en produktionsklynge til eksperimenter.
Kubernetes Jobs
Job er Kubernetes-abstraktioner på højere niveau, svarende til ReplicaSets og Deployments. Men i modsætning til bælg, der administreres af implementeringer og ReplicaSets, fuldfører bælg, der udfører et job, deres arbejde og afslutter.
Når et specificeret antal bælg når færdig, siges det, at jobbet er gennemført. Hvilke kriterier definerer en vellykket afslutning af en pod er noget, vi definerer i Jobs YAML-fil. Derefter vil jobcontrolleren sikre, at et bestemt antal bælg med succes er afsluttet, og jobbet siges at være komplet.
Lad os oprette et job, der udskriver cifre på pi op til 2000 steder i dets logfiler, som vi vil undersøge. Opret en fil, og kald den mit job.yaml og gem følgende indhold i det;
apiVersion: batch / v1art: Job
metadata:
navn: pi
spec:
skabelon:
spec:
containere:
- navn: pi
billede: perl
kommando: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Aldrig
backoffLimit: 4
Opret jobbet ved hjælp af denne fil:
$ kubectl oprette -f ./job.yamlDu vil bemærke, at jobbet tager et par sekunder til et par minutter at køre, og når det er gjort. Når du prøver at liste alle bælgene ved hjælp af:
$ kubectl få bælgNAVN KLAR STATUS OMSTARTER ALDER
pi-wg6zp 0/1 Færdiggjort 0 50s
Du vil se, at status for den pi-relaterede pod er Afsluttet kører ikke eller afsluttes.Du kan også kopiere navnet på pod'en, så vi kan kontrollere, at pi faktisk er beregnet til 2000 cifre. Podens specifikke navn kan variere i dit tilfælde.
$ kubectl logs pi-wg6zpInteressant nok har pod'en ikke Afsluttet det er stadig meget aktivt, bare at der ikke er nogen applikationer, der kører inde i det. Svarende til bare at tænde din computer og ikke bruge den. Hvis bælgen blev afsluttet, ville vi ikke have kunnet trække stammerne fra den i første omgang.
For at rydde op i jobbet og alle de bælg, der blev oprettet, skal du køre kommandoen:
$ kubectl slet -f mine job.yamlDu kan lære mere om jobspecifikationerne og hvordan du skriver din specifikation i den officielle dokumentation.
Cron Jobs
Cron Jobs ligner Cron-værktøjet i Unix, der kører med jævne mellemrum efter en tidsplan, som vi ønsker. Det er ikke en superstabil ting i Kubernetes på tidspunktet for denne skrivning, så du vil måske være forsigtig med at bruge. For at citere de officielle dokumenter:
”Et cron-job skaber et jobobjekt om en gang pr. udførelsestidspunkt i sin tidsplan. Vi siger "om", fordi der er visse omstændigheder, hvor der kan oprettes to job, eller der kan ikke oprettes noget job. Vi forsøger at gøre disse sjældne, men forhindrer dem ikke fuldstændigt. Derfor skal job være idempotent”
Udtrykket idempotent betyder, at Cron Job, uanset om det udføres en eller to gange eller et hvilket som helst antal tid, ville have den samme effekt på systemet. Hvis der kontrolleres for opdateringer, kan overvågning af den slags operationer betragtes som ubegrænset. Men at ændre data eller skrive til en database er ikke blandt disse.
Lad os skrive et cron-job, der skriver "Hello, World!”-Besked i sine logfiler sammen med en tidsstempel for, hvornår den blev skrevet. Opret fil kaldet my-cronjob.yaml og til det skrive følgende indhold:
apiVersion: batch / v1beta1art: CronJob
metadata:
navn: min-cronjob
spec:
tidsplan: "* / 1 * * * *"
jobTemplate:
spec:
skabelon:
spec:
containere:
- navn: hej
billede: busybox
argumenterer:
- / bin / sh
- -c
- dato; ekko Hej fra Kubernetes-klyngen
restartPolicy: OnFailure
Tidsplanen for jobbet er den mest afgørende. Det følger standard Cron-konventionen, der er en liste over tal adskilt af mellemrum. De fem tal repræsenterer,
- Minut (0-59)
- Time (0-23)
- Månedens dag (1-31)
- Måned (1-12)
- Ugedag (0-6) startende fra søndag
Brug af stjerne (*) for et felt betyder enhver tilgængelig værdi af dette felt (som et jokertegn) og den første post i vores tidsplan "* / 1 * * * *" angav, at jobbet skal køres hvert minut uanset time, dag eller måned året. Brug af * / 5 udskriver beskeden hvert 5. minut.
Du kan lære mere om cronjob yaml-specifikationen i de officielle dokumenter. Lad os se alle bælgene, der kører til jobbet, som vi kaldte my-cronjob.
$ kubectl få bælgNAVN KLAR STATUS OMSTARTER ALDER
my-cronjob-1534457100-hfhzf 0/1 Færdiggjort 0 2m
my-cronjob-1534457160-gk85l 0/1 Færdig 0 1m
my-cronjob-1534457220-bj22x 0/1 Færdiggjort 0 57s
At grave i logfiler på hver af bælgene ville afsløre en enkelt besked med et tidsstempel, da de alle blev oprettet på forskellige tidspunkter, vil de alle have forskellige tidsstempler.
$ kubectl log my-cronjob-1534457100-hfhzfFor at slette cronjob skal du blot køre:
$ kubectl slet -f my-cronjob.yamlDette sletter også eventuelle bælg, der blev oprettet i den rette proces.
Referencer
Du kan lære mere om Kubernetes Jobs her, og for Cron-job kan du besøge dette afsnit af deres velstrukturerede dokumentation.