Lavori di Kubernetes e lavori Cron

Lavori di Kubernetes e lavori Cron
La maggior parte delle applicazioni eseguite su un sistema distribuito come Kubernetes sono sempre live come server Web o database o server API. Ma ci sono una classe separata di oggetti che dovrebbero correre una volta o solo svegliarsi ogni tanto e seguire il loro corso. Lavori periodici come i rinnovi del certificato TLS con agenti come Certbot sono un classico esempio di tali lavori in esecuzione sui server tradizionali. Questi vengono fatti utilizzando l'utilità Cron nei sistemi UNIX.

Kubernetes ha un modo analogo di eseguire processi un tempo Lavori e processi periodici come lavori cron.

Inizieremo con un tipico esempio di quali sono i lavori e dimostreremo un esempio standard dei documenti ufficiali. Da questo esempio sarà facile capire cosa significa eseguendo un lavoro con successo nel contesto di Kubernetes.

Per seguire, ti consiglierei di utilizzare Kataconda Playground per Kubernetes che fornirà un cluster di Kubernetes Out Of Oly senza che tu debba configurarne uno o rischiare un cluster di produzione per esperimenti.

Lavori di Kubernetes

I lavori sono di livello superiore astrazioni di Kubernetes, simili a replicase e distribuzioni. Ma a differenza dei pod gestiti da distribuzioni e repliche, i pod che svolgono un lavoro completano il loro lavoro e l'uscita.

Quando un numero specifico di pod raggiunge il completamento, si dice che il lavoro sia stato completato con successo. Quali sono i criteri che definiscono una risoluzione riuscita di un baccello è qualcosa che definiremo nel file yaml del lavoro. Quindi il controllore del lavoro assicurerà che un certo numero di pod sia terminato con successo e si dice che il lavoro sia completo.

Creiamo un lavoro che stampa cifre di PI fino a 2000 posti nei suoi registri che esamineremo. Crea un file e chiamalo il mio lavoro.Yaml e salva i seguenti contenuti in esso;

Apiversion: batch/v1
GIOCO: lavoro
Metadati:
Nome: pi
Spec:
modello:
Spec:
Contenitori:
- Nome: pi
Immagine: Perl
Comando: ["Perl", "-Mbignum = BPI", "-wle", "Print BPI (2000)"]
RestartPolicy: mai
Backofflimit: 4

Crea il lavoro, usando questo file:

$ kubectl crea -f ./lavoro.Yaml

Noterai che il lavoro prenderà qualche secondo per un paio di minuti per correre e una volta fatto. Quando provi a elencare tutti i baccelli usando:

$ kubectl ottieni baccelli
Nome Ready Status Riavvia l'età
PI-WG6ZP 0/1 Completato 0 50s

Vedrai che lo stato del pod relativo a PI è Completato non in esecuzione o terminato.Puoi anche copiare il nome del pod in modo da poter verificare che PI sia stato effettivamente calcolato a 2000 cifre. Il nome specifico del pod può differire nel tuo caso.

$ kubectl logs pi-wg6zp

È interessante notare che il baccello no Terminato È ancora molto attivo, solo che non ci sono applicazioni in esecuzione al suo interno. Simile a semplicemente accendere il computer e non usarlo. Se il pod fosse terminato non saremmo stati in grado di estrarre i tronchi da esso, in primo luogo.

Per ripulire il lavoro e tutti i baccelli creati, eseguire il comando:

$ kubectl elimina -f my -jobs.Yaml

Puoi saperne di più sulle specifiche del lavoro e su come scrivere le tue specifiche nella documentazione ufficiale.

Lavori cron

I lavori di Cron sono simili all'utilità Cron in Unix che funziona periodicamente secondo un programma che desideriamo. Non è una cosa superstabile in Kubernetes, al momento di questa scrittura, quindi potresti voler stare attento a usare. Per citare i documenti ufficiali:

“Un lavoro Cron crea un oggetto di lavoro Di Una volta per il tempo di esecuzione del suo programma. Diciamo "circa" perché ci sono alcune circostanze in cui potrebbero essere creati due lavori o non si potrebbe creare alcun lavoro. Cerchiamo di renderli rari, ma non li impediamo completamente. Pertanto, i lavori dovrebbero essere Idempotenti"

Il termine Idempotent significa che il lavoro cron sia eseguito una o due volte o qualsiasi numero di tempo avrebbe lo stesso effetto sul sistema. Verificare gli aggiornamenti, il monitoraggio di questo tipo di operazioni può essere considerato IDEMPOTENT. Ma modificare i dati o scrivere in un database non sono tra questi.

Scriviamo un lavoro cron che scriverebbe un "ciao, mondo!"Messaggio nei suoi registri insieme a un timestamp di quando è stato scritto quel messaggio. Crea file chiamato my-cronjob.Yaml e scrivi i seguenti contenuti:

Apiversion: batch/v1beta1
Titolo: Cronjob
Metadati:
Nome: my-cronjob
Spec:
Programma: " */1 * * * *"
JobTemplate:
Spec:
modello:
Spec:
Contenitori:
- Nome: ciao
Immagine: Busybox
Args:
- /bin/sh
- -C
- data; Echo Hello dal cluster Kubernetes
RestartPolicy: Onfailure

La parte del programma del lavoro è la più cruciale. Segue la Convenzione Cron standard, esiste un elenco di numeri separati dagli spazi. I cinque numeri rappresentano,

  1. Minuto (0-59)
  2. Ora (0-23)
  3. Giorno del mese (1-31)
  4. Mese (1-12)
  5. Giorno della settimana (0-6) a partire da domenica

Usando asterisk (*) per un campo indica qualsiasi valore disponibile di quel campo (come un jolly) e la prima voce nel nostro programma “ */1 * * * *” indicava che il lavoro deve essere eseguito ogni minuto indipendentemente dall'ora, da giorno o dal mese di l'anno. L'uso */5 stamperà il messaggio ogni 5 minuti.

Puoi saperne di più sulle specifiche di Cronjob Yaml nei documenti ufficiali. Vediamo tutti i baccelli in esecuzione per il lavoro, che abbiamo chiamato My-Cronjob.

$ kubectl ottieni baccelli
Nome Ready Status Riavvia l'età
my-cronjob-1534457100-hfhzf 0/1 completato 0 2m
my-cronjob-1534457160-gk85l 0/1 completato 0 1m
my-cronjob-1534457220-bj22x 0/1 completato 0 57s

Scavare nei registri di ciascuno dei baccelli rivelerebbe un singolo messaggio con un timestamp, poiché sono stati tutti creati in momenti diversi, avranno tutti diversi timestamp.

$ kubectl log my-cronjob-1534457100-hfhzf

Per eliminare il cronjob semplicemente correre:

$ kubectl elimina -f my -cronjob.Yaml

Ciò eliminerà anche tutti i pod creati nel giusto processo.

Riferimenti

Puoi saperne di più sui lavori di Kubernetes qui e per i lavori Cron puoi visitare questa sezione della loro documentazione ben strutturata.