arrstack: add kids backend tier (sonarr/radarr/nzbget-kids)
ci/woodpecker/pr/vector-test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful

Split the arrstack media pipeline into an adult and a kids tier so kids
content lives in its own libraries, databases, and downloader while
reusing the shared prowlarr, CNPG cluster, Valkey, media PVCs, and S3
buckets. Backend workloads only — no routing/ingress or arrproxy changes
in this PR; the adult instances are untouched.

- sonarr-kids/radarr-kids: mirror the adult -unkin fork Deployments
  (same images/tags, 3 active-active replicas), pointed at their own
  Postgres DBs (sonarr-kids-main/radarr-kids-main), UrlBase
  /3df803/sonarr and /3df803/radarr, and kids MediaCover/Backup S3
  prefixes; media mounts use the tvshows/kids and movies/kids subPaths
  of the shared media-tv/media-movies PVCs.
- nzbget-kids: second downloader on its own RWO config PVC, writing
  completed downloads into the kids media subtrees for same-filesystem
  hardlink imports.
- postgres: two managed roles + Database CRDs (sonarr-kids/radarr-kids)
  and their VSO-synced <app>-kids-db credential secrets.
- per-app VMPodScrape for each kids exportarr sidecar; register the
  three new apps in the base kustomization.
This commit is contained in:
2026-08-24 22:06:22 +10:00
parent a064d9a3c4
commit 0eddf060c2
22 changed files with 946 additions and 0 deletions
@@ -86,6 +86,30 @@ spec:
connectionLimit: -1
passwordSecret:
name: prowlarr-db
- name: sonarr-kids
ensure: present
comment: Sonarr (kids) application role (owns sonarr-kids-main)
login: true
superuser: false
createdb: false
createrole: false
inherit: true
replication: false
connectionLimit: -1
passwordSecret:
name: sonarr-kids-db
- name: radarr-kids
ensure: present
comment: Radarr (kids) application role (owns radarr-kids-main)
login: true
superuser: false
createdb: false
createrole: false
inherit: true
replication: false
connectionLimit: -1
passwordSecret:
name: radarr-kids-db
enablePDB: true
enableSuperuserAccess: false
failoverDelay: 0
@@ -0,0 +1,15 @@
---
# Per-app database owned by the radarr-kids managed role. The fork's provider
# runs its own schema migrations on first start (advisory-locked, so only one
# replica migrates). retain: the database survives a Database CRD delete.
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: radarr-kids-main
namespace: arrstack
spec:
cluster:
name: arrstack-postgres
name: radarr-kids-main
owner: radarr-kids
databaseReclaimPolicy: retain
@@ -0,0 +1,15 @@
---
# Per-app database owned by the sonarr-kids managed role. The fork's provider
# runs its own schema migrations on first start (advisory-locked, so only one
# replica migrates). retain: the database survives a Database CRD delete.
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: sonarr-kids-main
namespace: arrstack
spec:
cluster:
name: arrstack-postgres
name: sonarr-kids-main
owner: sonarr-kids
databaseReclaimPolicy: retain
@@ -9,3 +9,5 @@ resources:
- database-sonarr.yaml
- database-radarr.yaml
- database-prowlarr.yaml
- database-sonarr-kids.yaml
- database-radarr-kids.yaml
@@ -58,3 +58,37 @@ spec:
refreshAfter: 5m
type: kv-v2
vaultAuthRef: default
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: sonarr-kids-db
namespace: arrstack
spec:
destination:
create: true
name: sonarr-kids-db
overwrite: true
hmacSecretData: true
mount: kv
path: kubernetes/namespace/arrstack/default/sonarr-kids-db
refreshAfter: 5m
type: kv-v2
vaultAuthRef: default
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: radarr-kids-db
namespace: arrstack
spec:
destination:
create: true
name: radarr-kids-db
overwrite: true
hmacSecretData: true
mount: kv
path: kubernetes/namespace/arrstack/default/radarr-kids-db
refreshAfter: 5m
type: kv-v2
vaultAuthRef: default