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.
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.YamlNoterai 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.YamlPuoi 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/v1beta1La 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,
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.