Cronjobs in OpenShift

Cronjobs zijn alleen in te stellen vanaf de command-line, voor het instellen van een cronjob is het belangrijk om bekend te zijn met:

  • YAML syntax
  • (basiskennis van) de openshift/kubernetes command-line.
  • Hoe images werken binnen OpenShift

Een cronjob is een pod die wordt opgestart door openshift (ongeveer) volgens het tijdschema wat je hebt opgegeven onder schedule:. De cron-daemon draait zelf niet in deze container.
Een belangrijke kanttekening bij de scheduling van deze cron jobs is wat in het geval dat een job niet gestart kan worden. Standaard worden er uiteindelijk twee jobs gestart. Dit kun je anders inregelen door middel van deadlines, ConcurrencyPolicy en history limits. Het is sowieso erg wenselijk dat cron jobs die je aanmaakt in OpenShift idempotent zijn.

Voorbeeld-cronjob.yaml

Een cron job configuratie bestaat uit de volgende onderdelen:

  • Een schedule volgens een standaard cron scheduling format
  • ConcurrencyPolicy: Deze policy bepaald of cronjobs tegelijk naast elkaar mogen draaien. Als je niets op geeft staat het standaard ingesteld dat jobs tegelijkertijd naast elkaar mogen draaien (allow). De beschikbare policy's zijn:
    • Allow, Cron jobs mogen naast elkaar draaien.
    • Forbid, Cron jobs mogen niet naast elkaar draaien. Als een lopende job nog niet afgerond bij de volgende ronde, dan wordt de nieuwe uit te voeren job overgeslagen.
    • Replace, Cron jobs mogen niet naast elkaar draaien. Als er een lopende job nog niet is afgerond wordt deze afgebroken en wordt er een nieuwe job gestart.

Voorbeeld-code met toelichting:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: voorbeeld
spec:
  suspend: false
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 1
# De schedule van de cron job, in dit voorbeeld wordt deze elke minuut uitgevoerd
  schedule: "*/1 * * * *"  
  jobTemplate:             
    spec:
      template:
        metadata:
          labels:          
            parent: "cronjobvoorbeeld"
        spec:
          containers:
          - name: $image-php
            image: 
            command: 
            - php artisan schedule:run
          restartPolicy: OnFailure 

Zoals gebruikelijk kun je via een yaml file (resource definition) de resource aanmaken die beschreven staat, in dit geval dus een cron job via:

oc create -f cronjob.yaml

Het bekijken van de status van cronjobs kan op een dezelfde manier als voor andere resources:

# bestaande cron jobs binnen een project opvragen
oc get cronjob
# de complete resource definition op vragen van een bestaande cron job in yaml-formaat
oc get cronjob/$cron-job -o yaml
# Eigenschappen opvragen van een bestaande cron job
oc describe cronjob/$cron-job

Troubleshooten en log-files bekijken van cronjobs

Om logs te lezen moeten we weten wat de naam is van de pod welke de cronjob-taak heeft uitgevoerd.

oc get pods

Vervolgens kun je met: oc logs <naam van de cronjob die als laatste gedraaid heeft> de logs terugzien van de cronjob. bijvoorbeeld:
oc logs cronjob-php-1234567-abc


Verder troubleshooten van de cronjob-container kan met oc debug of met oc rsh.


Verdere uitleg staat in de officiele openshift documentatie

  • chp/concepten/cronjobs.txt
  • Last modified: 2020/03/06 07:53
  • (external edit)