Sync the self-hosting stack

This commit is contained in:
2026-10-22 08:56:35 +02:00
parent 6a2b67364b
commit b1fa205ebf
7 changed files with 105 additions and 110 deletions
+11 -22
View File
@@ -14,21 +14,13 @@ spec:
matchLabels:
app.kubernetes.io/name: jarvis
app.kubernetes.io/component: api
# RECREATED, FOR api 1.0.0 ONLY — the release that crosses from the TypeScript images. A rolling
# update would keep a TypeScript pod and a .NET pod serving side by side behind one Service, and
# their realtime protocols differ under /socket.io/ (Socket.IO against SignalR): every old pod stops
# before the first new one starts, a gap of about thirty seconds, once. The next release puts the
# rolling update back:
#
# type: RollingUpdate
# rollingUpdate:
# maxUnavailable: 0 # never fewer pods than are being served now
# maxSurge: 1
#
# With `kubectl apply` or Argo's default client-side apply this switches both ways. Under
# server-side apply, a field manager that owns `rollingUpdate` makes the API server refuse it.
strategy:
type: Recreate
type: RollingUpdate
rollingUpdate:
# Never fewer pods than are being served now. A run holds its conversation through a unique
# index, so a surge pod cannot double-answer anything.
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
@@ -156,14 +148,11 @@ spec:
# `Files/PdfTextWorker.cs`) that is killed past its own limits, so a hostile file costs
# that process and not this one.
#
# MEASURED on this image, in a cgroup like this pod's (lot 11 P, proof 2j): every upload
# slot of two pods busy with a 10 MB, 500-page PDF — the most pages the worker reads —
# peaked at 619 MiB and 740 MiB of `memory.current`, the API and its workers together,
# from 446 and 496 MiB before. The TypeScript image sized this limit: Prisma's JSON
# protocol copied an upload's bytes several times over (~1.1 GiB for three at once)
# and a PDF worker's buffers could reach ~500 MB, ~2.75 GiB with every holder full.
# None of that is in this process; the 3Gi limit stands until it is lowered on purpose
# (docs/dotnet/PLAN.md, "Left to Antoine after lot 11"). The request is what the
# MEASURED on this image, in a cgroup like this pod's: every upload slot of two pods
# busy with a 10 MB, 500-page PDF — the most pages the worker reads — peaked at 619 MiB
# and 740 MiB of `memory.current`, the API and its workers together, from 446 and
# 496 MiB before. The 3Gi limit was sized generously and sits well above that
# 0.6–0.75 GiB peak; it stands until it is lowered on purpose. The request is what the
# scheduler sets aside for an ordinary day, not for the worst minute.
memory: 1Gi
limits: