Seidor
Kubernetes con CronJobs

25 de març de 2024

CronJobs al teu entorn Kubernetes

Gestió de càrregues de treball amb Cronjobs en Kubernetes

Kubernetes s'ha convertit ràpidament en l'eina estàndard per a la gestió d'infraestructures containeritzades. Kubernetes compta amb varietat de recursos de càrrega de treball disponibles per controlar i administrar pods i contenidors, els més comuns sent:

  • Deployments
  • ReplicaSets
  • StatefulSets

Aquests s'utilitzen tant per crear sistemes com per controlar el comportament desitjat de les diferents parts. Encara que aquests recursos tenen diferents propòsits i funcionalitats, tots comparteixen l'operativa de mantenir els sistemes aixecats en cas de fallada, avaluant l'estat de contenidors, i reiniciant o reprogramant (“rescheduling”) les parts rellevants en cas necessari.

No obstant això, hi ha altres recursos de càrrega de treball disponibles:

  • Job
  • Cronjobs
  • Work queues

En aquesta entrada de blog, ens centrem en els Cronjobs: la seva funció i les opcions de personalització disponibles.

Què és un cron?

Els “crons” són una utilitat comuna de Linux / UNIX que s'utilitza per programar tasques (generalment scripts o comandes) perquè s'executin periòdicament en hores, dates o intervals fixos. Són útils per a tasques periòdiques i recurrents, tals com sondejos, enviament de correus electrònics, recollida d'estadístiques o crear còpies de seguretat de bases de dades.

Què és un Job (en Kubernetes)?

Un Job crea un Pod, el qual anirà fent seguiment per assegurar que acabi exitosament. Si el pod fallés, el Job continuarà creant Pods fins que el/(els) Pod(s) acabin exitosament. En el corresponent fitxer YAML, es designa un nombre específic de finalitzacions exitoses. El Job farà seguiment de les finalitzacions exitoses fins que es completi la quantitat designada de Pods, després del qual el Job quedarà complet.

Què és un CronJob (en Kubernetes)?

Un CronJob és una tasca que garanteix que es creï un Job en hores, dates o intervals específics. Ofereixen la possibilitat de:

Containeritzar crons:

Això assegura una millorada fiabilitat pel que fa a l'execució de crons. Sent crons executats de manera serverless, si un servidor pertinent cau, els CronJobs continuen executant-se

Amplies opcions de personalització:

Permet una àmplia personalització de la tasca en qüestió, la qual cosa garanteix la flexibilitat de la tasca inherent. En la següent secció, juntament amb un exemple, avaluarem el manifest d'un recurs CronJob.

Aquí teniu un job exemple:

CronJob

Com amb tots els altres recursos Aquests valors s'hauran d'estipular:

  • ApiVersion: versió utilitzada pel clúster
  • Kind: CronJob
  • Metadata: informació pertinent al CronJob, com són: (hi ha més variables disponibles en aquest bloc, si bé no són necessàries)
  • Name: $${nom desitjat per a CronJob}
  • Namespace: ${namespace on allotjaràs el CronJob}
  • Spec: dins d'aquest bloc necessari, alguns valors són necessaris i altres opcionals:

Necessaris

  • Schedule: especifica la data, hores o intervals en què executar el Job

(Per a més informació sobre la transcripció a expressions cron, hi ha múltiples enllaços, tal com crontab

  • JobTemplate: Aquí es crea el patró del Job que el CronJob generarà

Opcional:

  • StartingDeadlineSeconds: Termini permès de temps (segons) en què començar un Job després que hagi passat el seu moment designat d'execució.

És a dir, en el cas que un Job no s'executés en el seu moment designat i es sobrepassés el termini permès de temps, el Job serà acabat i se'n programarà un de nou. El Job fallit es marcarà com un Missed Schedule.
Dada: El Controller del CronJob manté el compte sobre quants Missed Schedules li hagin passat a un CronJob. Quan un CronJob té més de 100 Missed Schedules, deixarà d'executar-se.
Valor per defecte=Sense termini de temps

  • ConcurrencyPolicy: Especifica el comportament respecte l'execució de Jobs concurrents. Només una de les següents opcions pot ser seleccionada:
  • Allow: Permet l'execució de Jobs concurrents
  • Forbid: No permet l'execució de Jobs concurrents. És a dir, si hi ha un Job programat, però l'anterior segueix en execució, el nou serà saltat.
  • Replace: No permet l'execució de Jobs concurrents. És a dir, si hi ha un Job programat, però l'anterior segueix en execució, el nou Job substituirà el vell. Valor per defecte=Allow
  • Suspend: Suspèn totes les subseqüents execucions del CronJob. (No s'aplica a Jobs ja començats) Valor per defecte=false.
  • SuccessfulJobsHistoryLimit: Estipula quants Jobs completats exitosament es conserven. (Assignar un valor de 0 indica que no es manté cap Job completat exitosament) Valor per defecte=3
  • FailedJobsHistoryLimit: Estipula quants Jobs fallits es conserven. (Assignar un valor de 0 indica que no es manté cap Job fallit) Valor per defecte=1