Files
Artista-Filmcamp/k8s/07-worker-cronjob.yaml
T
Nick SzaunigandClaude Opus 5.5 c3fdfbdc77
Docker-Images bauen und veroeffentlichen / build-and-push (push) Canceled after 0s
fix(worker): endgueltig abgelehnte Mails nicht wiederholen, Adressen nicht loggen
Eine Mail an eine Adresse ohne Mailserver (SMTP 556, nullMX) wurde bis zu
8-mal erneut versendet und liess jeden Worker-Lauf mit Exit-Code 1 enden;
das SMTP-Fehlerlog enthielt dabei die Empfaengeradresse.

- SMTP-Antworten 5xx markieren die Mail sofort als FAILED, 4xx und
  Verbindungsfehler bleiben wiederholbar.
- Adressen werden aus Log und lastError entfernt.
- Worker-CronJob: backoffLimit 0 (kein zweiter Pod je Fehlschlag) und
  ttlSecondsAfterFinished 1 Tag, damit Fehler-Pods nicht stehen bleiben.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-12 09:24:28 +02:00

46 lines
1.7 KiB
YAML

# Alle 10 Minuten: faellige Raten einziehen, abgelaufene Reservierungen
# freigeben, E-Mails nachsenden. Ohne ihn funktioniert Ratenzahlung nicht.
apiVersion: batch/v1
kind: CronJob
metadata:
name: artista-modelcamp-worker
namespace: artista
spec:
schedule: "*/10 * * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
# Kein Sofort-Neustart: der naechste Lauf kommt nach 10 Minuten ohnehin,
# ein zweiter Pod je Fehlschlag verdoppelt nur Fehler-Pods und Versuche.
backoffLimit: 0
activeDeadlineSeconds: 900
# Beendete Jobs samt Pods nach einem Tag entfernen; fehlgeschlagene
# blieben sonst bis zum naechsten Fehlschlag stehen (failedJobsHistoryLimit 3).
ttlSecondsAfterFinished: 86400
template:
metadata:
labels:
db-client: "true"
spec:
restartPolicy: Never
automountServiceAccountToken: false
securityContext:
runAsNonRoot: true
runAsUser: 1001
seccompProfile: { type: RuntimeDefault }
containers:
- name: worker
# Gepinnt auf einen CI-Build (sha-<commit>), nicht :latest. Ausrollen siehe README.
image: git.encry.de/nick.rosenloecher/artista-modelcamp-tools:sha-REPLACE_ME
imagePullPolicy: IfNotPresent
command: ["tsx", "scripts/worker.ts"]
envFrom:
- configMapRef: { name: artista-modelcamp-config }
- secretRef: { name: artista-modelcamp-secrets }
resources:
requests: { cpu: "0", memory: "0" }
limits: { memory: 512Mi }
securityContext:
allowPrivilegeEscalation: false
capabilities: { drop: ["ALL"] }