Kubernetes

Kubernetes jobb och Cron jobb

Kubernetes jobb och Cron jobb
De flesta applikationer som körs på ett distribuerat system som Kubernetes lever alltid som webbservrar eller databaser eller API-servrar. Men det finns en separat klass av föremål som är avsedda att springa en gång eller bara vakna upp en gång en gång och köra sin kurs. Periodiska jobb som TLS-certifikatförnyelser med agenter som Certbot är klassiska exempel på sådana jobb som körs på traditionella servrar. Dessa görs med hjälp av Cron-verktyget i Unix-system.

Kubernetes har ett analogt sätt att köra engångsprocesser Jobb och periodiska processer som cron jobb.

Vi börjar med ett typiskt exempel på vad Jobb är och visar ett standardexempel från de officiella Docs. Från det här exemplet kommer det att vara lätt att förstå vad det innebär genom att köra ett jobb framgångsrikt i Kubernetes sammanhang.

För att följa med skulle jag rekommendera att du använder Kataconda Playground för Kubernetes vilket ger ett out of the box Kubernetes-kluster utan att du behöver konfigurera ett manuellt eller riskera ett produktionskluster för experiment.

Kubernetes jobb

Jobb är Kubernetes-abstraktioner på högre nivå, liknar ReplicaSets och Deployments. Men till skillnad från pods som hanteras av distributioner och ReplicaSets slutför pods som utför ett jobb sitt arbete och avslutar.

När ett visst antal pods når slut, sägs jobbet ha slutförts. Vilka är kriterierna som definierar en lyckad avslutning av en pod är något vi kommer att definiera i Jobs YAML-fil. Då kommer Job Controller att se till att ett visst antal pods har avslutats framgångsrikt och Jobben sägs vara komplett.

Låt oss skapa ett jobb som skriver ut siffror på pi upp till 2000 platser i loggarna som vi kommer att undersöka. Skapa en fil och ring den mitt jobb.yaml och spara följande innehåll i den;

apiVersion: batch / v1
snäll: Job
metadata:
namn: pi
spec:
mall:
spec:
behållare:
- namn: pi
bild: perl
kommando: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Aldrig
backoffLimit: 4

Skapa jobbet med den här filen:

$ kubectl skapa -f ./jobb.yaml

Du kommer att märka att jobbet tar några sekunder att köra och när det är klart. När du försöker lista alla kapslar med:

$ kubectl få skida
NAMN KLAR STATUS ÅTERSTART ÅLDER
pi-wg6zp 0/1 Slutförd 0 50-talet

Du ser att statusen för den pi-relaterade podden är Avslutad inte körs eller avslutas.Du kan också kopiera namnet på podden så att vi kan verifiera att pi verkligen har beräknats till 2000 siffror. Podens specifika namn kan skilja sig åt i ditt fall.

$ kubectl loggar pi-wg6zp

Intressant nog har inte podden det Avslutad det är fortfarande mycket aktivt, bara att det inte finns några applikationer som körs inuti det. Liknar att bara slå på din dator och inte använda den. Om podden avslutades hade vi inte kunnat dra stockarna från den, i första hand.

För att städa upp jobbet och alla pods som skapades kör du kommandot:

$ kubectl radera -f mina jobb.yaml

Du kan lära dig mer om jobbspecifikationerna och hur du skriver din specifikation i den officiella dokumentationen.

Cron Jobb

Cron Jobs liknar Cron-verktyget i Unix som körs regelbundet enligt ett schema som vi önskar. Det är inte en superstabil sak i Kubernetes när detta skrivs, så du kanske vill vara försiktig med att använda. För att citera de officiella dokumenten:

”Ett cron-jobb skapar ett jobbobjekt handla om en gång per exekveringstid av sitt schema. Vi säger "om" eftersom det finns vissa omständigheter där två jobb kan skapas eller inget jobb kan skapas. Vi försöker göra dessa sällsynta, men förhindrar dem inte helt. Därför bör jobb vara idempotent

Uttrycket idempotent betyder att Cron-jobbet, oavsett om det utförs en eller två gånger eller någon tid, skulle ha samma effekt på systemet. Kontroll av uppdateringar, övervakning av den typen av åtgärder kan anses vara obetydlig. Men att ändra data eller skriva till en databas är inte bland dessa.

Låt oss skriva ett cron-jobb som skulle skriva ett “Hello, World!”I sina loggar tillsammans med en tidsstämpel för när meddelandet skrevs. Skapa fil som heter my-cronjob.yaml och skriv följande innehåll till den:

apiVersion: batch / v1beta1
snäll: CronJob
metadata:
namn: min-cronjob
spec:
schema: "* / 1 * * * *"
jobTemplate:
spec:
mall:
spec:
behållare:
- namn: hej
bild: upptagen låda
argumenterar:
- / bin / sh
- -c
- datum; eko Hej från Kubernetes-klustret
restartPolicy: OnFailure

Schemaläggningsdelen av jobbet är den mest avgörande. Det följer Cron-konventionens standard, det finns en lista med siffror åtskilda av mellanslag. De fem siffrorna representerar,

  1. Minutt (0-59)
  2. Timme (0-23)
  3. Månadens dag (1-31)
  4. Månad (1-12)
  5. Veckodag (0-6) från söndag

Använda asterisk (*) för ett fält betyder alla tillgängliga värden för det fältet (som ett jokertecken) och den första posten i vårt schema "* / 1 * * * *" indikerade att jobbet måste köras varje minut oavsett timme, dag eller månad året. Med * / 5 skrivs meddelandet ut var femte minut.

Du kan lära dig mer om cronjob yaml-specifikationen i de officiella dokumenten. Låt oss se alla skida som körs för jobbet, som vi kallade my-cronjob.

$ kubectl få skida
NAMN KLAR STATUS ÅTERSTART Åldern
my-cronjob-1534457100-hfhzf 0/1 Färdig 0 2m
my-cronjob-1534457160-gk85l 0/1 Färdig 0 1m
my-cronjob-1534457220-bj22x 0/1 Färdig 0 57s

Om du gräver i loggarna på var och en av bälgena skulle ett enda meddelande avslöjas med en tidsstämpel, eftersom de alla skapades vid olika tidpunkter, kommer de alla att ha olika tidsstämplar.

$ kubectl logga my-cronjob-1534457100-hfhzf

För att radera cronjob kör du helt enkelt:

$ kubectl ta bort -f my-cronjob.yaml

Detta kommer också att ta bort alla pods som skapades i vederbörlig process.

Referenser

Du kan lära dig mer om Kubernetes-jobb här och för Cron-jobb kan du besöka detta avsnitt i deras välstrukturerade dokumentation.

Användbara verktyg för Linux-spelare
Om du gillar att spela spel på Linux är chansen att du kan ha använt appar och verktyg som Wine, Lutris och OBS Studio för att förbättra spelupplevels...
HD Remastered Games för Linux som aldrig tidigare hade en Linux-version
Många spelutvecklare och utgivare kommer med HD-remaster av gamla spel för att förlänga livstiden för franchisen, snälla fans som begär kompatibilitet...
Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...