From f2b548cb98557c085a682942ce0ca20287c0bbaa Mon Sep 17 00:00:00 2001 From: Nick Szaunig Date: Mon, 12 Oct 2026 05:27:47 +0200 Subject: [PATCH] chore(k8s): Images auf CI-Build pinnen statt :latest App, Migration und Worker zeigen auf sha- mit imagePullPolicy IfNotPresent. Damit gibt es ein Rollback per rollout undo, und ein Neustart zieht nicht mehr ungeprueft das neueste Image (oder scheitert, wenn Gitea gerade nicht laeuft). README beschreibt das Ausrollen mit kubectl set image. Co-Authored-By: Claude Opus 5.5 (1M context) --- k8s/05-app-deployment.yaml | 9 +++++---- k8s/07-worker-cronjob.yaml | 5 +++-- k8s/README.md | 12 +++++++++++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/k8s/05-app-deployment.yaml b/k8s/05-app-deployment.yaml index 57a98f2..1b82bdf 100644 --- a/k8s/05-app-deployment.yaml +++ b/k8s/05-app-deployment.yaml @@ -24,8 +24,9 @@ spec: seccompProfile: { type: RuntimeDefault } initContainers: - name: migrate - image: git.encry.de/nick.rosenloecher/artista-modelcamp-tools:latest - imagePullPolicy: Always + # Gepinnt auf einen CI-Build (sha-), nicht :latest. Ausrollen siehe README. + image: git.encry.de/nick.rosenloecher/artista-modelcamp-tools:sha-REPLACE_ME + imagePullPolicy: IfNotPresent command: ["prisma", "migrate", "deploy"] envFrom: - secretRef: { name: artista-modelcamp-secrets } @@ -37,8 +38,8 @@ spec: capabilities: { drop: ["ALL"] } containers: - name: app - image: git.encry.de/nick.rosenloecher/artista-modelcamp:latest - imagePullPolicy: Always + image: git.encry.de/nick.rosenloecher/artista-modelcamp:sha-REPLACE_ME + imagePullPolicy: IfNotPresent ports: - name: http containerPort: 3000 diff --git a/k8s/07-worker-cronjob.yaml b/k8s/07-worker-cronjob.yaml index dcd8b72..b9aa2bd 100644 --- a/k8s/07-worker-cronjob.yaml +++ b/k8s/07-worker-cronjob.yaml @@ -25,8 +25,9 @@ spec: seccompProfile: { type: RuntimeDefault } containers: - name: worker - image: git.encry.de/nick.rosenloecher/artista-modelcamp-tools:latest - imagePullPolicy: Always + # Gepinnt auf einen CI-Build (sha-), 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 } diff --git a/k8s/README.md b/k8s/README.md index bda6031..b73841b 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -68,10 +68,20 @@ kubectl -n artista run admin-create --rm -i --restart=Never \ ## Bei einem neuen Image (Redeploy) +Die Manifeste sind auf einen Build gepinnt, nicht auf `:latest`. Den Tag `sha-` (7 Zeichen) zeigt der CI-Lauf in der Zusammenfassung. App und Werkzeuge immer mit demselben Tag ausrollen: + ```bash -kubectl rollout restart deployment/artista-modelcamp-app -n artista +TAG=sha- +kubectl -n artista set image deployment/artista-modelcamp-app \ + migrate=git.encry.de/nick.rosenloecher/artista-modelcamp-tools:$TAG \ + app=git.encry.de/nick.rosenloecher/artista-modelcamp:$TAG +kubectl -n artista set image cronjob/artista-modelcamp-worker \ + worker=git.encry.de/nick.rosenloecher/artista-modelcamp-tools:$TAG +kubectl -n artista rollout status deployment/artista-modelcamp-app ``` +Zurueck auf den vorherigen Stand: `kubectl -n artista rollout undo deployment/artista-modelcamp-app` (den CronJob dann wieder auf den alten Tag setzen). + ## Fehlersuche ```bash