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:

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:

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