Add shared arrstack Valkey and wire arr apps' Redis features #394

Merged
benvin merged 2 commits from benvin/arrstack-valkey into main 2026-08-23 12:37:42 +10:00
Member

Activates the arr forks (sonarr/radarr/prowlarr) #14 Redis features — SignalR backplane, cross-replica cache-invalidation bus, and distributed rate limiter — which ship deployed but inert because no Valkey exists in arrstack and nothing is wired to it.

Changes

  • Adds a single shared ValkeyCluster (arrstack-valkey) under apps/base/arrstack/valkey/, modeled on jellyfin-valkey: shards:1/replicas:2 HA (one primary + two replicas, automatic failover), image via artifactapi (artifactapi.k8s.syd1.au.unkin.net/dockerhub/valkey/valkey:9.0.0), operator-default passwordless default user, node spread across hosts, cluster-aware PDB, ephemeral /data.
  • Registers the valkey component in the arrstack base kustomization.
  • Wires <App>__Redis__Host + <App>__Redis__Port into the sonarr-env / radarr-env / prowlarr-env ConfigMaps, all pointing at the shared service valkey-arrstack-valkey.arrstack.svc.cluster.local:6379.

Notes

  • Setting Host is the activation switch: the fork's RedisOptions.IsConfigured gates purely on a non-empty Host, so there is no separate Enabled flag.
  • Passwordless (jellyfin parity — the operator leaves the default user without auth), so no Password/Ssl is wired and there is no secret to reference.
  • One cluster is safe for all three: each fork namespaces its keys and pub/sub channels by a per-app prefix (sonarr:ratelimit: / radarr:ratelimit: / prowlarr:ratelimit:), so their state never collides.
  • App image: (-unkin5), the waitfordb initContainer, and S3 buckets are untouched.
  • Validated: kubectl kustomize renders clean for both apps/base/arrstack and apps/overlays/au-syd1/arrstack.

Follow-up: after merge, Valkey must come up and the three apps must roll (pick up the new env) before the #14 features can be validated live.

Activates the arr forks (sonarr/radarr/prowlarr) #14 Redis features — SignalR backplane, cross-replica cache-invalidation bus, and distributed rate limiter — which ship deployed but inert because no Valkey exists in arrstack and nothing is wired to it. ## Changes - Adds a single shared `ValkeyCluster` (`arrstack-valkey`) under `apps/base/arrstack/valkey/`, modeled on `jellyfin-valkey`: `shards:1`/`replicas:2` HA (one primary + two replicas, automatic failover), image via artifactapi (`artifactapi.k8s.syd1.au.unkin.net/dockerhub/valkey/valkey:9.0.0`), operator-default passwordless `default` user, node spread across hosts, cluster-aware PDB, ephemeral `/data`. - Registers the `valkey` component in the arrstack base kustomization. - Wires `<App>__Redis__Host` + `<App>__Redis__Port` into the `sonarr-env` / `radarr-env` / `prowlarr-env` ConfigMaps, all pointing at the shared service `valkey-arrstack-valkey.arrstack.svc.cluster.local:6379`. ## Notes - Setting `Host` is the activation switch: the fork's `RedisOptions.IsConfigured` gates purely on a non-empty `Host`, so there is no separate Enabled flag. - Passwordless (jellyfin parity — the operator leaves the `default` user without auth), so no `Password`/`Ssl` is wired and there is no secret to reference. - One cluster is safe for all three: each fork namespaces its keys and pub/sub channels by a per-app prefix (`sonarr:ratelimit:` / `radarr:ratelimit:` / `prowlarr:ratelimit:`), so their state never collides. - App `image:` (-unkin5), the waitfordb initContainer, and S3 buckets are untouched. - Validated: `kubectl kustomize` renders clean for both `apps/base/arrstack` and `apps/overlays/au-syd1/arrstack`. Follow-up: after merge, Valkey must come up and the three apps must roll (pick up the new env) before the #14 features can be validated live.
unkin-agent added 1 commit 2026-08-23 12:28:41 +10:00
Add shared arrstack Valkey and wire arr apps' Redis features
ci/woodpecker/pr/vector-test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful
256bfbd80d
Activate the arr forks' #14 Redis features (SignalR backplane, cross-replica
cache-invalidation bus, distributed rate limiter), which ship deployed but inert
because no Valkey exists and nothing is wired.

- Add a single shared ValkeyCluster (arrstack-valkey) under apps/base/arrstack/valkey,
  modeled on jellyfin-valkey: shards:1/replicas:2 HA, image via artifactapi,
  passwordless default user, node spread + cluster PDB, ephemeral storage.
- Register the valkey component in the arrstack base kustomization.
- Wire <App>__Redis__Host/Port into the sonarr/radarr/prowlarr env ConfigMaps,
  all pointing at the shared service valkey-arrstack-valkey:6379. Host is the
  activation switch (RedisOptions.IsConfigured gates on Host; no Enabled flag).
  Passwordless (jellyfin parity) so no Password/Ssl. Per-app key/channel prefixes
  keep the three apps isolated on one cluster.
unkinben added 1 commit 2026-08-23 12:32:18 +10:00
Auto-roll arr apps on Redis env change via Reloader
ci/woodpecker/pr/vector-test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful
f2ab2dff67
The *-env ConfigMaps are plain (unhashed) resources consumed by fixed-name
envFrom, so adding the Redis env would not restart the running pods and #14 would
stay inert until a manual rollout. Annotate the sonarr/radarr/prowlarr
Deployments with configmap.reloader.stakater.com/auto:"true" (repo convention;
Reloader is deployed in reloader-system) so ArgoCD sync + Reloader roll the apps
automatically when the ConfigMap changes.
benvin merged commit 19f7afac92 into main 2026-08-23 12:37:42 +10:00
benvin deleted branch benvin/arrstack-valkey 2026-08-23 12:37:42 +10:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unkin/argocd-apps#394