CronJobs è disponibile a livello generale (GA) in Google Kubernetes Engine (GKE) versione 1.21 e successive. Questo documento spiega come eseguire CronJob in GKE. I cron job sono una funzionalità integrata di Kubernetes. Per ulteriori dettagli, consulta la documentazione di Kubernetes sui CronJob.
Panoramica
I CronJob creano job Kubernetes in base a una pianificazione ripetuta. I CronJob ti consentono di automatizzare attività regolari come l'esecuzione di backup, la creazione di report, l'invio di email o le attività di pulizia.
I CronJob vengono creati, gestiti, scalati ed eliminati nello stesso modo dei job. Il numero esatto di oggetti Job creati dipende da diversi fattori. Per ulteriori informazioni, vedi Limitazioni di CronJob.
Per saperne di più sui job, vedi Esecuzione di 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à,
installala e poi
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione 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 al 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
- 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 salva CronJob nella sua cronologia
Specificare quando viene eseguito il CronJob
Il campo spec.schedule
definisce quando e con quale frequenza viene eseguito il CronJob, utilizzando
il formato standard crontab
di Unix. Tutti gli orari di CronJob sono in UTC. Sono presenti cinque campi, separati da spazi.
Questi campi rappresentano quanto segue:
- Minuti (compresi 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 qualsiasi 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 di*/5
, significa "ogni 5 minuti". Se il quinto campo (il campo del giorno della settimana) è impostato su0/5
, significa "ogni quinta domenica".
Specificare cosa esegue il CronJob
Il file spec.jobTemplate
descrive cosa fa CronJob, incluse le immagini dei container, i comandi eseguiti dai container e la norma di riavvio per CronJob. Per ulteriori dettagli su cosa includere in spec.jobTemplate
, consulta la
documentazione di Kubernetes CronJob.
Specifica di una scadenza
Il campo facoltativo startingDeadlineSeconds
indica il numero massimo di
secondi che CronJob può impiegare per avviarsi se non viene avviato all'ora pianificata per qualsiasi
motivo. I CronJob non riusciti vengono considerati errori.
Per specificare una scadenza, aggiungi il valore startingDeadlineSeconds
al campo spec
di CronJob nel file manifest. Ad esempio, il seguente
manifest specifica che il CronJob ha 100 secondi per iniziare:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 100
jobTemplate:
spec:
...
Specificare una policy di concorrenza
Il campo facoltativo spec.concurrencyPolicy
specifica come trattare le esecuzioni simultanee 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 |
Sono consentiti job simultanei. 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 timeout. |
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 correnti.
Specificare i 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, è trattata in Visualizzare la cronologia di CronJob.
Puoi configurare il numero di esecuzioni di CronJob riuscite e non riuscite salvate specificando i valori per spec.successfulJobsHistoryLimit
e spec.failedJobsHistoryLimit
. Per impostazione predefinita, successfulJobsHistoryLimit
è impostato
su 3 e failedJobsHistoryLimit
è impostato 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 riusciti o non riusciti
impostando il valore corrispondente su 0
. La disattivazione della conservazione della cronologia potrebbe rendere
più difficile il debug degli errori. Ad esempio, il seguente manifest
indica a 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
ispezionare.
Visualizzazione della cronologia di CronJob
Un CronJob viene eseguito all'interno di un pod. Per impostazione predefinita, Kubernetes conserva i log dei 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 lo stato Completed
, mentre i job non riusciti hanno lo 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 questo comando:
kubectl logs POD_NAME
Sostituisci POD_NAME
con il nome del pod che vuoi
ispezionare.
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 questo 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 relativa a CronJob.
- Scopri come eseguire un job una tantum.