Integrate KEDA into milner #96

Merged
tepichord merged 6 commits from feat/85-integrate-keda into main 2026-09-25 21:19:58 -07:00
Owner

Closes #85

Automated PR created by forgejo-done adapter.

Closes #85 Automated PR created by forgejo-done adapter.
Installs KEDA 2.20.2 as an infrastructure-layer Flux component in a new
keda namespace with restricted PSA enforcement. CRDs ship in
templates/crds/ (not the chart's crds/ dir), so helm-controller's
install/upgrade.crds policy never runs — they ride the release manifest.

The CRD_PROVIDERS row in tests/test_gitops.py is deferred to issue #25
step 10 (annia's ScaledJob), which is the first consumer of these CRDs.

Refs: #85
Adds namespaces/keda.yaml in the namespaces block and keda in the
component list after rabbitmq-operator.

Refs: #85
Covers: what KEDA is for here, namespace PSA level, reading ScaledJob
state, pause/resume via autoscaling.keda.sh/paused annotation, and
debugging the external.metrics.k8s.io API service.

Refs: #85
docs(keda): correct ScaledJob state and metrics-server scope
All checks were successful
ci/woodpecker/pr/gates Pipeline was successful
be535ccd80
§17c read the ScaledJob's `ScalingActive` condition, but that is an HPA
condition: a ScaledJob has no HPA. KEDA's ScaledJob conditions are `Ready`,
`Active`, `Fallback` and `Paused` (upstream condition_types.go calls
ConditionHPAActive "ScaledObject-specific (ScaledJob has no HPA)"), so the
command returned nothing. Query `Ready`, which is what says the triggers
resolved and the scale loop started.

§17e then attributed a stalled ScaledJob to `v1beta1.external.metrics.k8s.io`.
That API service is the HPA's external-metrics path for a ScaledObject; the
ScaledJob operator drives its jobs directly from the scaler and never reads it.
Scope the check to ScaledObjects so the section does not send an operator to
the wrong component when annia's ScaledJob is quiet.
tepichord added this to the MVP project 2026-09-25 20:33:55 -07:00
docs(keda): number the KEDA runbook §18, because IRC took §17
All checks were successful
ci/woodpecker/pr/gates Pipeline was successful
ci/woodpecker/pull_request_closed/cleanup Pipeline was successful
6e731610f1
The branch was written when §17 was the next free section — issue #85 says as
much — and the IRC runbook (docs/irc.md, merged as #105) claimed §17 first.
Two documents cannot share an address: §17 appears dozens of times across
tests, manifests and scripts, every one of them meaning docs/irc.md §17x, so
KEDA moves instead of IRC. §18 is the next free number, and the sequence is
not meant to be contiguous — §1, §3, §6 and §8 are all skipped.

OPERATIONS.md is the only file that names KEDA's number, so this is the whole
change: the heading and five subsections in docs/keda.md, and the two rows in
OPERATIONS.md.

Refs: #85
tepichord deleted branch feat/85-integrate-keda 2026-09-25 21:19:58 -07:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tepichord/milner!96
No description provided.