Differences

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

Link to this comparison view

chp:concepten:jobs [2020/03/06 07:53] (current)
Line 1: Line 1:
 +====== Queue worker instellen voor Laravel ======
 +
 +Queue workers binnen Laravel en vergelijkbare php workers binnen andere frameworks, zijn php processen die los staan van het uitserveren van de website. Het beste is als deze php processen dezelfde configuratie hebben en dezelfde versie zijn als de PHP-fpm containers die je gebruikt om de website uit te serveren. Daarom staat de configuratie hiervan in twee delen beschreven. ​
 +
 +==== Eerste helft van de job configuratie-file ====
 +Jobs worden gestart door een job-controller,​ deze controller houdt bij of een job klaar is en of er een nieuwe job gestart moet worden. Ook geef je aan welk commando er gestart moet worden, deze wijkt af van je bestaande php-fpm pods. 
 +<code yaml>
 +apiVersion: batch/v1
 +kind: Job
 +metadata:
 +  labels:
 +    job-name: queueworker-php
 +  name: queueworker-php
 +spec:
 +  backoffLimit:​ 6
 +  completions:​ 1
 +  parallelism:​ 1
 +  template:
 +    metadata:
 +      labels:
 +        job-name: queueworker-php
 +      name: queueworker-php
 +    spec:
 +      containers:
 +      - args:
 +        - echo running queue worker; cd /tmp/src; php artisan queue:work
 +        command:
 +        - /bin/sh
 +        - -c
 +      restartPolicy:​ OnFailure ​
 +#/eerste helft
 +</​code>​
 +
 +  * **Parallelism:​** (optioneel) Hoeveel pod replicas er parallel mogen draaien. Met andere woorden hoeveel worker processen mogen er tegelijkertijd draaien? Standaard-waarde is hetzelfde als ''​completions'',​ dus 1.
 +  * completions:​ (optioneel) Hoeveel pods moeten klaar zijn met hun worker proces voordat een job als "​completed"​ gemarkeerd kan worden. Standaard-waard is 1. 
 +  * **Template:​** geef hier de metadata op voor de pod controller.
 +  * De restart policy geeft aan waneer een pod herstart moet worden. ​
 +
 +Let op! Zoals vermeld: met een job start je een ander proces binnen dezelfde php-image, in plaats van run.sh start je bijvoorbeeld ''​php artisan queue:​work''​. Doordat run.sh de code verplaatst en je run.sh niet uitvoert staat je code nog in de ''/​tmp/​src/''​ folder. ​
 +
 +==== Tweede helft van de job configuratie-file ====
 +Dit gedeelte is vooral een copy-paste van de deployment-configuratie van je php-fpm pods. \\
 +Meestal wil je het volgende overnemen van de php-fpm pods die al zijn uitgerold via het template:
 +  * De image; zo heb je dezelfde php-versie
 +  * Config-maps;​ zo heb je dezelfde configuratie
 +  * Secrets; bijvoorbeeld voor connecties naar S3, redis, databases etc. 
 +
 +
 +<code yaml>
 +# tweede helft        ​
 +        env:
 +        - name: DB_DATABASE
 +          valueFrom:
 +            secretKeyRef:​
 +              key: DB_NAME
 +              name: $name-database-configmap
 +        - name: DB_USERNAME
 +          valueFrom:
 +            secretKeyRef:​
 +              key: DB_USER
 +              name: $name-database-configmap
 +        - name: DB_PASSWORD
 +          valueFrom:
 +            secretKeyRef:​
 +              key: DB_PASS
 +              name: $name-database-configmap
 +        - name: DB_HOST
 +          valueFrom:
 +            secretKeyRef:​
 +              key: DB_HOST
 +              name: $name-database-configmap
 +        image: docker-registry.default.svc:​5000/​$site-phpfpm
 +        imagePullPolicy:​ Always
 +        name: $site-phpfpm
 +        resources: {}
 +        terminationMessagePath:​ /​dev/​termination-log
 +        terminationMessagePolicy:​ File
 +        volumeMounts:​
 +        - mountPath: /​usr/​local/​etc/​php/​conf.d
 +          name: $site-phpfpm-config
 +      dnsPolicy: ClusterFirst
 +      restartPolicy:​ OnFailure
 +      schedulerName:​ default-scheduler
 +      securityContext:​ {}
 +      terminationGracePeriodSeconds:​ 30
 +      volumes:
 +      - configMap:
 +          defaultMode:​ 420
 +          name: $site-phpfpm-config
 +        name: $site-phpfpm-config
 +</​code>​
 +Uiteraard moet je de job uitrollen als 1 yaml-file
 +
 +<code bash>oc apply -f queueworker-php.yaml
 +</​code>​
 +\\
 +
 +{{ :​chp:​concepten:​npohosting_template.png |}}
 +
 +==== Troubleshooten en log-files bekijken van de queue-worker ====
 +Om logs te lezen moeten we weten wat de naam is van de queueworker-php-pod.
 +<code bash>oc get pods</​code>​
 +Vervolgens kun je met: oc logs //<naam van de queueworker-php-pod>// ​
 +de logs terugzien van de queue-worker. bijvoorbeeld:​
 +\\
 +''​oc logs queueworker-php-abc123''​
 +
 +\\
 +Als de queue-worker-pod niet wil starten kan het zijn dat het ''​command''​ wat je hebt opgegeven in je yaml-file niet klopt. Je kan een debug-shell starten met met ''​oc debug''​ <naam van de pod>. Als je er achter bent wat het juiste commando is, kun je de job aanpassen met oc edit jobs/<​naam-van-de-job>​ \\
 +Als de pod wel wil starten kun je troubleshooten met ''​oc rsh''​ <naam van de pod>​. ​
 +
 +
 +
 +[[https://​docs.openshift.com/​container-platform/​3.11/​dev_guide/​jobs.html|Officiele documentatie,​ Openshift jobs]]
 +[[https://​kubernetes.io/​docs/​concepts/​workloads/​controllers/​jobs-run-to-completion/​|Officiele documentatie,​ Kubernetes jobs]]
  
  • chp/concepten/jobs.txt
  • Last modified: 2020/03/06 07:53
  • (external edit)