CronJobs è disponibile in versione generale (GA) in Google Kubernetes Engine (GKE) 1.21 e versioni successive. Questo documento spiega come eseguire i CronJob in GKE. I cron job sono una funzionalità integrata di Kubernetes. Per ulteriori dettagli, consulta la documentazione di Kubernetes sui cron job.
Panoramica
I CronJob creano job Kubernetes su una pianificazione ricorrente. I CronJob ti consentono di automatizzare attività regolari come eseguire backup, creare report, inviare email o attività di pulizia.
I CronJob vengono creati, gestiti, scalati e eliminati nello stesso modo dei job. Il numero esatto di oggetti Job creati dipende da diversi fattori. Per ulteriori informazioni, consulta Limitazioni di CronJob.
Per ulteriori informazioni sui job, consulta Eseguire un job.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Creazione di un CronJob
Puoi creare un CronJob utilizzando un file manifest. Ad esempio, il seguente manifest YAML stampa l'ora corrente e una stringa una volta ogni minuto, mantenendo i valori predefiniti per i parametri CronJob:
# cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Allow
startingDeadlineSeconds: 100
suspend: false
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo "Hello, World!"
restartPolicy: OnFailure
Per creare questo CronJob, salva il manifest YAML in un file e applicalo al cluster:
kubectl apply -f PATH_TO_FILE
Sostituisci PATH_TO_FILE
con il percorso del manifest YAML.
Configurazione di un CronJob
Quando crei un CronJob, puoi specificare i seguenti parametri:
- Quando viene eseguito il CronJob
- Che cosa fa il CronJob
- La scadenza per l'avvio del CronJob
- Se sono consentiti job simultanei per il CronJob
- Se i nuovi job sono sospesi
- Quante esecuzioni vengono salvate dal CronJob nella cronologia
Specificare quando viene eseguito il CronJob
Il campo spec.schedule
definisce quando e con quale frequenza viene eseguito il CronJob utilizzando il formato crontab
standard di Unix. Tutti gli orari di CronJob sono in UTC. Sono presenti cinque campi separati da spazi.
Questi campi rappresentano quanto segue:
- Minuti (tra 0 e 59)
- Ore (tra 0 e 23)
- Giorno del mese (tra 1 e 31)
- Mese (tra 1 e 12)
- Giorno della settimana (tra 0 e 6 a partire da domenica)
Puoi utilizzare i seguenti caratteri speciali in uno dei campi spec.schedule
:
?
è un valore jolly che corrisponde a un singolo carattere.*
è un valore jolly che corrisponde a zero o più caratteri./
ti consente di specificare un intervallo per un campo. Ad esempio, se il primo campo (il campo dei minuti) ha un valore*/5
, significa "ogni 5 minuti". Se il quinto campo (il campo del giorno della settimana) è impostato su0/5
, significa "ogni quinta domenica".
Specifica cosa deve eseguire il CronJob
spec.jobTemplate
descrive cosa fa il CronJob, incluse le sue immagini dei container, i comandi eseguiti dai container e il criterio di riavvio per il CronJob. Per ulteriori dettagli su cosa includere in spec.jobTemplate
, consulta la documentazione di CronJob Kubernetes.
Specifica di una scadenza
Il campo facoltativo startingDeadlineSeconds
indica il numero massimo di secondi che il CronJob può impiegare per l'avvio se non rispetta l'ora pianificata per qualsiasi motivo. I CronJob mancati sono considerati errori.
Per specificare una scadenza, aggiungi il valore startingDeadlineSeconds
al campo spec
del CronJob nel file manifest. Ad esempio, il seguente
manifesto specifica che il CronJob ha 100 secondi di tempo per iniziare:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
jobTemplate:
spec:
...
Specifica di un criterio di concorrenza
Il campo facoltativo spec.concurrencyPolicy
specifica come trattare le esecuzioni contemporaneamente di un job creato dal controller CronJob. Se non imposti un valore, per impostazione predefinita sono consentiti più job simultanei.
concurrencyPolicy
accetta i seguenti valori:
Valore | Significato |
---|---|
Allow |
I job simultanei sono consentiti. Questa è l'impostazione predefinita. |
Forbid |
I job simultanei sono vietati e i nuovi job non possono essere avviati finché quelli precedenti non sono stati completati o non è scaduto il relativo timer. |
Replace |
I job simultanei sono vietati e i job precedenti vengono annullati a favore di quelli nuovi. |
Sospensione delle esecuzioni successive
Il campo facoltativo spec.suspend
, se impostato su true
, impedisce l'esecuzione di nuovi job, ma consente il completamento delle esecuzioni in corso.
Specifica dei limiti della cronologia
Un CronJob crea un pod ogni volta che viene eseguito. La visualizzazione dello stato di terminazione delle esecuzioni recenti di un CronJob, nonché dei log di un singolo pod, è discussa in Visualizzazione della cronologia di CronJob.
Puoi configurare il numero di esecuzioni di CronJob riuscite e non riuscite che vengono salvate specificando i valori per spec.successfulJobsHistoryLimit
e spec.failedJobsHistoryLimit
. Per impostazione predefinita, successfulJobsHistoryLimit
è impostato su 3 e failedJobsHistoryLimit
su 1.
Ad esempio, il seguente manifest indica a GKE di salvare un massimo di cinque esecuzioni di CronJob riuscite e un massimo di 10 esecuzioni di CronJob non riuscite:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 10
jobTemplate:
spec:
...
Puoi disattivare la conservazione della cronologia di esecuzione di CronJob riuscita o non riuscita impostando il rispettivo valore su 0
. La disattivazione della conservazione della cronologia potrebbe rendere più difficile il debugging degli errori. Ad esempio, il seguente manifest
incarica GKE di salvare solo le esecuzioni di CronJob non riuscite:
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 10
jobTemplate:
spec:
...
Ispezione di un CronJob
Per controllare la configurazione di un CronJob, utilizza kubectl describe
:
kubectl describe cronjob CRONJOB_NAME
Sostituisci CRONJOB_NAME
con il nome del CronJob da esaminare.
Visualizzazione della cronologia dei CronJob
Un CronJob viene eseguito all'interno di un pod. Per impostazione predefinita, Kubernetes conserva i log per i pod terminati che rappresentano le ultime tre esecuzioni riuscite di un CronJob e il job non riuscito più recente. Puoi modificare o disattivare questi valori predefiniti modificando i limiti della cronologia di CronJob.
Per visualizzare la cronologia di un CronJob, elenca prima tutti i pod. I CronJob completati vengono visualizzati con stato Completed
, mentre i job non riusciti hanno stato RunContainerError
, CrashLoopBackOff
o un altro stato che indica un errore.
NAME READY STATUS RESTARTS AGE
hello-1556555640-9bc5r 0/1 Completed 0 3m6s
hello-1556555700-cm6wk 0/1 Completed 0 2m6s
hello-1556555760-62wf5 0/1 Completed 0 66s
hello-1556555820-rl8kl 0/1 Completed 0 5s
hello-failed-1556555820-wrvt2 0/1 RunContainerError 1 5s
Per visualizzare i log di un CronJob specifico, esegui il seguente comando:
kubectl logs POD_NAME
Sostituisci POD_NAME
con il nome del pod da esaminare.
L'output è simile al seguente:
container_linux.go:247: starting container process caused
"exec: \"/in/sh\": stat /in/sh: no such file or directory"
Eliminazione di un CronJob
Per eliminare un CronJob, esegui il seguente comando:
kubectl delete cronjob CRONJOB_NAME
Quando elimini un CronJob, il garbage collector di Kubernetes elimina i job associati e impedisce l'avvio di nuovi job.
Passaggi successivi
- Leggi la documentazione di Kubernetes per i CronJob.
- Scopri come eseguire un job una tantum.