# Overlay fuer den RKE2-Cluster von EnCry (Namespace apicore, Traefik mit # Middleware cloudflare-only). Vor jedem Rollout zeigt # kubectl diff -k deploy/k8s/overlays/encry # was sich aendert; nach dem Rollout ist der Diff leer. # # Keine Platzhalter mehr (Runbook Schritte 0 und 1, 2026-10-16): Image-Digests # (unten), Hosts und TLS-Secrets in ingress-*.yaml und die Werte in # configmap-*.yaml entsprechen dem Live-Stand. # # Backend-Digest: Das neue Image (CMD nur `node dist/main.js`) geht erst # zusammen mit components/backend-roles live (Runbook Schritt 3). Bis dahin # bleibt hier der Digest des laufenden Images. Ohne APICORE_ROLE bricht das # neue Image den Start in Produktion absichtlich ab. APICORE_ROLE nicht von # Hand setzen: ohne die initContainer von backend-roles liefe dann keine # Migration. # # Postgres: Bis 2026-10-13 wichen die Repo-Manifeste vom Cluster ab (Repo # app: apicore-postgres, ohne Haertung, volumeClaimTemplates; Cluster # app.kubernetes.io/name, gehaertet, statisches PVC apicore-postgres-data). # Seit 2026-10-13 ist base/postgres der Live-Stand (StatefulSet, Service, # PVC), nur das Image-Digest kommt von hier. Selektor und Volumes sind # unveraenderlich: Aenderungen an Postgres immer zuerst gegen den Cluster # pruefen (kubectl diff), nie die Live-Haertung zuruecknehmen. Das PV # pv-apicore-postgres und sein SMB-Secret liegen nicht in diesem Repo. apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: apicore resources: - ../../base - configmap-backend.yaml - configmap-frontend.yaml - ingress-backend.yaml - ingress-frontend.yaml # Zielstand. Je Runbook-Schritt nur die bis dahin freigegebenen Komponenten # aktivieren (Schritt 1: keine). Das Auskommentieren ist nur lokal fuer # kubectl diff/apply - nicht committen. Die CI rendert und prueft jeden # Schritt (deploy/k8s/tests/render-stages.mjs). components: - ../../components/network-policies # Schritt 2 - ../../components/pod-hardening # Schritt 3 - ../../components/backend-roles # Schritt 3 - ../../components/api-hpa # Schritt 5 - ../../components/voice # Sprachnotizen (T7), erst nach VOICE_ENCRYPTION_KEY im Secret # Stand 2026-10-19: Runbook Schritt 3 live (pod-hardening + backend-roles, # 30 Migrationen ueber den initContainer migrate, Backup vorher). Noch NICHT # angewendet: network-policies (Schritt 2), api-hpa (Schritt 5). Von voice ist # seit 2026-10-19 nur der Worker-Patch live (ANTHROPIC_API_KEY aus Secret # apicore-anthropic); der CronJob apicore-voice-transcribe noch nicht (Aufnahme # aus). Fuer kubectl apply die beiden Zeilen lokal auskommentieren und den # Transcribe-CronJob herausfiltern (nicht committen). images: - name: git.encry.de/nick.rosenloecher/apicore-backend digest: sha256:ff53fe8d41c45e33279b8ab405e28f02767bf48001b893bcd88fec8e1a514bf9 # sha-1688e77 - name: git.encry.de/nick.rosenloecher/apicore-frontend digest: sha256:ee91b26c8cb3e47eb9f64bd0cbf8819db6543602eabef97f30c864e4393950a0 # sha-d8efbc3 # Abschreib-Image (.gitea/workflows/whisper-image.yml), erster CI-Build # sha-c53810b. Nur in components/voice, laeuft noch nicht live. - name: git.encry.de/nick.rosenloecher/apicore-whisper digest: sha256:bb0eb6cd0168d0acb79a220699d0c8e254df4616d6dae78c109501566e100cd1 # Live laeuft postgres:18.6-alpine weiter nur per Tag (am 2026-10-19 bewusst # ohne Digest angewendet, um einen Neustart auf SMB zu vermeiden). Der Digest # ist der gezogene Index-Digest; mit ihm startet Postgres beim apply einmal neu. - name: postgres newTag: 18.6-alpine digest: sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873