vps cluster docs

0007. Scale-to-zero with KEDA and the KEDA HTTP add-on

Context

One node with a fixed amount of RAM, running a long tail of apps that are genuinely idle most of the time — a portfolio site, demo apps, a couple of services with a handful of users. Left always-on they consume memory permanently to answer perhaps a few requests a day, and on a single node the memory they hold is the memory the important workloads cannot use. The node runs close to its limits as it is.

The constraint that rules out the obvious answer: HorizontalPodAutoscaler cannot scale from zero. It needs a running pod to measure, so the smallest state it can reach still costs memory.

Decision

KEDA, pinned at 2.21.0, with the KEDA HTTP add-on for request-driven scaling, drives idle apps between zero and one replica.

Alternatives rejected

Consequences

Evidence

k8s/argocd/applications/platform/{keda,keda-add-ons-http,keda-add-ons-http-routes}.yaml, k8s/platform/keda-add-ons-http-routes/ingress.yaml (the scaled hosts), k8s/platform/priority-classes/priorityclass.yaml, the ignoreDifferences block in k8s/argocd/applicationsets/apps.yaml, and the namespace-wedge entries in changelog/2026-09.md.