Kubernetes

Kubernetes Jobs og Cron Jobs

Kubernetes Jobs og Cron Jobs
De fleste applikationer, der kører på et distribueret system som Kubernetes, lever altid som webservere eller databaser eller API-servere. Men der er en separat klasse af objekter, der er beregnet til at løbe en gang eller kun vågne op en gang imellem og køre deres kurs. Periodiske job som TLS-certifikatfornyelser med agenter som Certbot er et klassisk eksempel på sådanne job, der kører på traditionelle servere. Disse udføres ved hjælp af Cron-værktøjet i Unix-systemer.

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 / v1
art: 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.yaml

Du 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ælg
NAVN 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-wg6zp

Interessant 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.yaml

Du 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 / v1beta1
art: 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,

  1. Minut (0-59)
  2. Time (0-23)
  3. Månedens dag (1-31)
  4. Måned (1-12)
  5. 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ælg
NAVN 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-hfhzf

For at slette cronjob skal du blot køre:

$ kubectl slet -f my-cronjob.yaml

Dette 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.

Sådan vises FPS-tæller i Linux-spil
Linux-spil fik et stort skub, da Valve annoncerede Linux-support til Steam-klient og deres spil i 2012. Siden da har mange AAA- og indiespil fundet ve...
Sådan downloades og afspilles Sid Meiers Civilization VI på Linux
Introduktion til spillet Civilization 6 er et moderne udtryk for det klassiske koncept, der blev introduceret i serien af ​​Age of Empires-spil. Ideen...
Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...