CronJob in Kubernetes: automazione delle attività
Kubernetes è in grado di monitorare attivamente l’esecuzione dei CronJob e di eseguire azioni personalizzate dall’utente in caso di errori. La configurazione dei CronJob in Kubernetes è facile grazie ai file YAML.
Che cos’è un CronJob?
Un CronJob è un modo per automatizzare le attività. È come una sveglia che suona a una certa ora: ad esempio, puoi configurare un CronJob per eseguire automaticamente attività specifiche a orari predefiniti. Un CronJob ti permette di automatizzare vari tipi di attività, come l’aggiornamento dei database, il backup dei file, l’esecuzione di script o l’invio di e-mail a intervalli regolari. Grazie alla sua integrazione in Kubernetes, è possibile monitorare le attività e controllarle nei container isolandole.
Managed Kubernetes di IONOS mette a tua disposizione un’infrastruttura ad alte prestazioni in cui configurare i nodi di lavoro in base alle tue esigenze personali. Questa soluzione completa di gestione cloud di IONOS offre un funzionamento ottimale del tuo cluster Kubernetes.
Kubernetes: configurazione del CronJob
La creazione di un CronJob è molto simile alla creazione di un normale job in Kubernetes. A tal fine devi creare un file manifest YAML. Questo file è una descrizione strutturata che contiene tutti i dettagli rilevanti per il CronJob. Nel file sono impostati parametri importanti come la pianificazione dei tempi di esecuzione del job, i container e i comandi esatti da eseguire in tali container.
Creazione di un file YAML
Apri un editor di testo a tua scelta per creare il file di configurazione YAML per il CronJob. Assicurati di definire la pianificazione dei tempi nel formato Cron. Aggiungi la definizione del job, inclusa l’attività da eseguire. Quindi salva il file con l’estensione .yaml
.
apiVersion: batch/v1
kind: CronJob
metadata:
name: new_cronjob
spec:
schedule: "0 ** ** "
jobTemplate:
spec:
template:
spec:
containers:
- name: container
image: image:latest
command:
- /bin/sh
yamlSe necessario, aggiungi i requisiti delle risorse e altre impostazioni alle specifiche del pod:
spec:
containers:
- name: container
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
yamlAttivazione del CronJob
Esegui questo comando in un terminale per creare il CronJob nel cluster Kubernetes:
kubectl apply -f [filename].yaml
shellMonitoraggio del CronJob
Se esegui il comando seguente, ottieni un elenco dei CronJob di Kubernetes esistenti. La modalità Watch garantisce quindi l’aggiornamento automatico dell’output al cambiare dello stato dei CronJob.
kubectl get cronjob --watch
shellSintassi di schedulazione per CronJob
La sintassi di schedulazione per i CronJob in Kubernetes si basa sul classico formato cron con cinque campi disposti in quest’ordine: minuto, ora, giorno del mese, mese e giorno della settimana. Di seguito trovi una breve panoramica:
- Minuto (0–59)
- Ora (0–23)
- Giorno del mese (1–31)
- Mese (1–12 oppure Gen–Dic)
- Giorno della settimana (0–7 oppure Domenica–Sabato)
Caratteri speciali:
*
: ogni valore valido per il campo,
: indicazione di più valori/
: indicazione di passi
Esempi:
0 ** **
: ogni ora
15 2 ** *
: ogni giorno alle ore 2:15
0 0 1 **
: il primo giorno di ogni mese a mezzanotte
0 0 *3*
: tutti i giorni a mezzanotte nel mese di marzo
0 2 ** 1
: ogni lunedì alle 2 del mattino
Concurrency policy del CronJob
La “concurrency policy” nella configurazione di un CronJob influisce sul modo in cui vengono gestiti i job paralleli all’interno dello stesso CronJob di Kubernetes.
- Allow (standard): se la concurrency policy è impostata su
__Allow__
, viene avviato un nuovo job anche se quello precedente non è stato ancora completato. In pratica è possibile eseguire contemporaneamente più istanze dello stesso job. - Forbid: con questa impostazione, non viene avviato un nuovo job se quello precedente non è ancora stato completato. In questo modo si garantisce che venga eseguita una sola istanza del job per volta.
- Replace: i job non completati vengono interrotti per permettere a quelli nuovi di proseguire. Non è consentita l’esecuzione contemporanea di più istanze dello stesso job.
Definizione del termine per l’esecuzione
Il campo startingDeadlineSeconds
in un CronJob di Kubernetes specifica quanti secondi dopo l’orario di esecuzione pianificato è possibile avviare un job. Se il job non viene eseguito entro questo limite di tempo, viene considerato non riuscito.
apiVersion: batch/v1
kind: CronJob
metadata:
name: new_cronjob
spec:
schedule: "0 ** ** "
startingDeadlineSeconds: 300
jobTemplate:
spec:
template:
spec:
containers:
- name: container
image: image:latest
command:
- /bin/sh
yamlIn questo esempio, il job definito dal CronJob deve essere avviato entro 300 secondi (5 minuti) dopo l’orario pianificato, altrimenti viene considerato non riuscito.
Limitazione della cronologia del job
Le impostazioni spec.successfulJobsHistoryLimit
e spec.failedJobsHistoryLimit
dei CronJob in Kubernetes permettono di limitare il numero di job conservati nella cronologia del CronJob. Il campo spec.successfulJobsHistoryLimit
è facoltativo e specifica il numero di job completati con successo che devono essere salvati nella cronologia. Questa possibilità è utile per controllare l’utilizzo delle risorse ed evitare di sovraccaricare la cronologia con un numero eccessivo di job completati correttamente. Analogamente, il campo spec.failedJobsHistoryLimit
consente di gestire il numero di job non riusciti.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: new_cronjob
spec:
schedule: "0 ** ** "
successfulJobsHistoryLimit: 3 # Keep only the last 3 successfully completed jobs in history.
failedJobsHistoryLimit: 1 # Keep only the last failed job in history.
jobTemplate:
spec:
template:
spec:
containers:
- name: container
image: image:latest
command:
- /bin/sh
yamlCon questo codice specifichiamo di conservare solo gli ultimi tre lavori completati correttamente e l’ultimo lavoro non riuscito nella cronologia del CronJob di Kubernetes new_cronjob
.
Errori e risoluzione dei problemi dei CronJob in Kubernetes
Nei CronJob in Kubernetes possono verificarsi diversi errori e quindi è consigliabile conoscere alcune efficaci tecniche per la risoluzione dei problemi. A seguire trovi alcune comuni fonti di errori e le possibili soluzioni.
Il job non parte
Se un CronJob in Kubernetes non si avvia, le cause possono essere diverse. Il problema può essere un’immagine del container non disponibile o non valida oppure la mancanza di autorizzazioni sull’account di servizio del pod. Per diagnosticare il problema, esamina i log del container con kubectl logs <nome-pod>
, gli eventi del CronJob con kubectl describe cronjob <nome-cronjob>
e gli eventi del pod con kubectl describe pod < nome-pod>
. Assicurati che l’account di servizio disponga delle autorizzazioni necessarie verificandone il ruolo e l’associazione del ruolo.
Configurazione CronJob errata
Un’errata configurazione del CronJob può essere dovuta a errori nella sintassi del file YAML oppure a impostazioni di schedulazione e RestartPolicy non valide. Per individuare problemi di questo tipo, controlla che la sintassi e le impostazioni nel file YAML siano corrette. Puoi utilizzare kubectl describe cronjob <nome-cronjob>
per ottenere informazioni dettagliate sulla configurazione e identificare eventuali errori o imprecisioni.
Superamento dei limiti delle risorse
Il superamento dei limiti delle risorse può causare un funzionamento non corretto dei CronJob. Per risolvere il problema, controlla i limiti delle risorse nel CronJob e nei suoi pod utilizzando kubectl describe cronjob <nome-cronjob>
e kubectl describe pod <nome-pod>
. Anche il monitoraggio dell’utilizzo delle risorse del cluster con kubectl top nodes
e kubectl top pods
può fornire informazioni preziose. Se necessario, modifica i limiti delle risorse nel file YAML.
Per iniziare a lavorare con la gestione dei cluster in Kubernetes ti consigliamo di seguire il tutorial di Kubernetes nella nostra Digital Guide.
- Configurazione automatica dei cluster Kubernetes
- Archiviazione persistente completamente integrata
- Assistenza clienti 24/7