chp:concepten:cronjobs

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

chp:concepten:cronjobs [2020/05/20 05:30] (current)
Line 1: Line 1:
 +====== 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:​
 +<code yaml>
 +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 ​
 +</​code>​
 +
 +Zoals gebruikelijk kun je via een yaml file (resource definition) de resource aanmaken die beschreven staat, in dit geval dus een cron job via:
 +<code bash>
 +oc create -f cronjob.yaml
 +</​code>​
 +Het bekijken van de status van cronjobs kan op een dezelfde manier als voor andere resources:
 +<code bash>
 +# 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</​code>​
 +
 +==== 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.
 +<code bash>oc get pods</​code>​
 +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 [[ https://​docs.openshift.com/​container-platform/​3.11/​dev_guide/​cron_jobs.html | de officiele openshift documentatie ]]
  
  • chp/concepten/cronjobs.txt
  • Last modified: 2020/05/20 05:30
  • (external edit)