Ku­ber­ne­tes è in grado di mo­ni­to­ra­re at­ti­va­men­te l’ese­cu­zio­ne dei CronJob e di eseguire azioni per­so­na­liz­za­te dall’utente in caso di errori. La con­fi­gu­ra­zio­ne dei CronJob in Ku­ber­ne­tes è facile grazie ai file YAML.

Che cos’è un CronJob?

Un CronJob è un modo per au­to­ma­tiz­za­re le attività. È come una sveglia che suona a una certa ora: ad esempio, puoi con­fi­gu­ra­re un CronJob per eseguire au­to­ma­ti­ca­men­te attività spe­ci­fi­che a orari pre­de­fi­ni­ti. Un CronJob ti permette di au­to­ma­tiz­za­re vari tipi di attività, come l’ag­gior­na­men­to dei database, il backup dei file, l’ese­cu­zio­ne di script o l’invio di e-mail a in­ter­val­li regolari. Grazie alla sua in­te­gra­zio­ne in Ku­ber­ne­tes, è possibile mo­ni­to­ra­re le attività e con­trol­lar­le nei container iso­lan­do­le.

Consiglio

Managed Ku­ber­ne­tes di IONOS mette a tua di­spo­si­zio­ne un’in­fra­strut­tu­ra ad alte pre­sta­zio­ni in cui con­fi­gu­ra­re i nodi di lavoro in base alle tue esigenze personali. Questa soluzione completa di gestione cloud di IONOS offre un fun­zio­na­men­to ottimale del tuo cluster Ku­ber­ne­tes.

Ku­ber­ne­tes: con­fi­gu­ra­zio­ne del CronJob

La creazione di un CronJob è molto simile alla creazione di un normale job in Ku­ber­ne­tes. A tal fine devi creare un file manifest YAML. Questo file è una de­scri­zio­ne strut­tu­ra­ta che contiene tutti i dettagli rilevanti per il CronJob. Nel file sono impostati parametri im­por­tan­ti come la pia­ni­fi­ca­zio­ne dei tempi di ese­cu­zio­ne 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 con­fi­gu­ra­zio­ne YAML per il CronJob. As­si­cu­ra­ti di definire la pia­ni­fi­ca­zio­ne dei tempi nel formato Cron. Aggiungi la de­fi­ni­zio­ne del job, inclusa l’attività da eseguire. Quindi salva il file con l’esten­sio­ne .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
yaml

Se ne­ces­sa­rio, aggiungi i requisiti delle risorse e altre im­po­sta­zio­ni alle spe­ci­fi­che del pod:

spec:
    containers:
    - name: container
        resources:
            requests:
                memory: "64Mi"
                cpu: "250m"
            limits:
                memory: "128Mi"
                cpu: "500m"
yaml

At­ti­va­zio­ne del CronJob

Esegui questo comando in un terminale per creare il CronJob nel cluster Ku­ber­ne­tes:

kubectl apply -f [filename].yaml
shell

Mo­ni­to­rag­gio del CronJob

Se esegui il comando seguente, ottieni un elenco dei CronJob di Ku­ber­ne­tes esistenti. La modalità Watch ga­ran­ti­sce quindi l’ag­gior­na­men­to au­to­ma­ti­co dell’output al cambiare dello stato dei CronJob.

kubectl get cronjob --watch
shell

Sintassi di sche­du­la­zio­ne per CronJob

La sintassi di sche­du­la­zio­ne per i CronJob in Ku­ber­ne­tes 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 pa­no­ra­mi­ca:

  • 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
  • ,: in­di­ca­zio­ne di più valori
  • /: in­di­ca­zio­ne di passi

Esempi:

0 ** **: ogni ora 15 2 ** *: ogni giorno alle ore 2:15 0 0 1 **: il primo giorno di ogni mese a mez­za­not­te 0 0 *3*: tutti i giorni a mez­za­not­te nel mese di marzo 0 2 ** 1: ogni lunedì alle 2 del mattino

Con­cur­ren­cy policy del CronJob

La “con­cur­ren­cy policy” nella con­fi­gu­ra­zio­ne di un CronJob influisce sul modo in cui vengono gestiti i job paralleli all’interno dello stesso CronJob di Ku­ber­ne­tes.

  • Allow (standard): se la con­cur­ren­cy policy è impostata su __Allow__, viene avviato un nuovo job anche se quello pre­ce­den­te non è stato ancora com­ple­ta­to. In pratica è possibile eseguire con­tem­po­ra­nea­men­te più istanze dello stesso job.
  • Forbid: con questa im­po­sta­zio­ne, non viene avviato un nuovo job se quello pre­ce­den­te non è ancora stato com­ple­ta­to. In questo modo si ga­ran­ti­sce che venga eseguita una sola istanza del job per volta.
  • Replace: i job non com­ple­ta­ti vengono in­ter­rot­ti per per­met­te­re a quelli nuovi di pro­se­gui­re. Non è con­sen­ti­ta l’ese­cu­zio­ne con­tem­po­ra­nea di più istanze dello stesso job.

De­fi­ni­zio­ne del termine per l’ese­cu­zio­ne

Il campo startingDeadlineSeconds in un CronJob di Ku­ber­ne­tes specifica quanti secondi dopo l’orario di ese­cu­zio­ne pia­ni­fi­ca­to è possibile avviare un job. Se il job non viene eseguito entro questo limite di tempo, viene con­si­de­ra­to 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
yaml

In questo esempio, il job definito dal CronJob deve essere avviato entro 300 secondi (5 minuti) dopo l’orario pia­ni­fi­ca­to, al­tri­men­ti viene con­si­de­ra­to non riuscito.

Li­mi­ta­zio­ne della cro­no­lo­gia del job

Le im­po­sta­zio­ni spec.successfulJobsHistoryLimit e spec.failedJobsHistoryLimit dei CronJob in Ku­ber­ne­tes per­met­to­no di limitare il numero di job con­ser­va­ti nella cro­no­lo­gia del CronJob. Il campo spec.successfulJobsHistoryLimit è fa­col­ta­ti­vo e specifica il numero di job com­ple­ta­ti con successo che devono essere salvati nella cro­no­lo­gia. Questa pos­si­bi­li­tà è utile per con­trol­la­re l’utilizzo delle risorse ed evitare di so­vrac­ca­ri­ca­re la cro­no­lo­gia con un numero eccessivo di job com­ple­ta­ti cor­ret­ta­men­te. Ana­lo­ga­men­te, 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
yaml

Con questo codice spe­ci­fi­chia­mo di con­ser­va­re solo gli ultimi tre lavori com­ple­ta­ti cor­ret­ta­men­te e l’ultimo lavoro non riuscito nella cro­no­lo­gia del CronJob di Ku­ber­ne­tes new_cronjob.

Errori e ri­so­lu­zio­ne dei problemi dei CronJob in Ku­ber­ne­tes

Nei CronJob in Ku­ber­ne­tes possono ve­ri­fi­car­si diversi errori e quindi è con­si­glia­bi­le conoscere alcune efficaci tecniche per la ri­so­lu­zio­ne dei problemi. A seguire trovi alcune comuni fonti di errori e le possibili soluzioni.

Il job non parte

Se un CronJob in Ku­ber­ne­tes non si avvia, le cause possono essere diverse. Il problema può essere un’immagine del container non di­spo­ni­bi­le o non valida oppure la mancanza di au­to­riz­za­zio­ni sull’account di servizio del pod. Per dia­gno­sti­ca­re 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>. As­si­cu­ra­ti che l’account di servizio disponga delle au­to­riz­za­zio­ni ne­ces­sa­rie ve­ri­fi­can­do­ne il ruolo e l’as­so­cia­zio­ne del ruolo.

Con­fi­gu­ra­zio­ne CronJob errata

Un’errata con­fi­gu­ra­zio­ne del CronJob può essere dovuta a errori nella sintassi del file YAML oppure a im­po­sta­zio­ni di sche­du­la­zio­ne e Re­start­Po­li­cy non valide. Per in­di­vi­dua­re problemi di questo tipo, controlla che la sintassi e le im­po­sta­zio­ni nel file YAML siano corrette. Puoi uti­liz­za­re kubectl describe cronjob <nome-cronjob> per ottenere in­for­ma­zio­ni det­ta­glia­te sulla con­fi­gu­ra­zio­ne e iden­ti­fi­ca­re eventuali errori o im­pre­ci­sio­ni.

Su­pe­ra­men­to dei limiti delle risorse

Il su­pe­ra­men­to dei limiti delle risorse può causare un fun­zio­na­men­to non corretto dei CronJob. Per risolvere il problema, controlla i limiti delle risorse nel CronJob e nei suoi pod uti­liz­zan­do kubectl describe cronjob <nome-cronjob> e kubectl describe pod <nome-pod>. Anche il mo­ni­to­rag­gio dell’utilizzo delle risorse del cluster con kubectl top nodes e kubectl top pods può fornire in­for­ma­zio­ni preziose. Se ne­ces­sa­rio, modifica i limiti delle risorse nel file YAML.

Per iniziare a lavorare con la gestione dei cluster in Ku­ber­ne­tes ti con­si­glia­mo di seguire il tutorial di Ku­ber­ne­tes nella nostra Digital Guide.

Managed Ku­ber­ne­tes
Or­che­stra­zio­ne sicura dei carichi di lavoro dei container
  • Con­fi­gu­ra­zio­ne au­to­ma­ti­ca dei cluster Ku­ber­ne­tes
  • Ar­chi­via­zio­ne per­si­sten­te com­ple­ta­men­te integrata
  • As­si­sten­za clienti 24/7
Vai al menu prin­ci­pa­le