Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

k8s-app-seerr

Seerr (https://github.com/seerr-team/seerr) — media request management, migrated from the orphaned overseerr deployment.

Layout

seerr/
  namespace.yml         # seerr namespace
  pvc.yml               # standalone Longhorn PVC (seerr-pvc, 5Gi)
  deployment.yml        # Deployment, strategy: Recreate, image :latest, /app/config
  services.yml          # ClusterIP service (seerr ns)
  ingressroute.yml      # IngressRoute -> seerr.stuffsclub.net, direct cross-ns to seerr-service
migrate-from-overseerr.sh   # one-time cross-namespace volume clone

Why a Deployment (not a StatefulSet)

The old overseerr ran as a StatefulSet, which forced the PVC name config-overseerr-0 and ordered identity it never needed. Seerr is a single web app with one config volume — a Deployment + standalone PVC is simpler and lets us name/clone the volume freely. Because it is one replica on a ReadWriteOnce Longhorn volume, the Deployment uses strategy: Recreate; the default RollingUpdate would deadlock trying to attach the RWO volume to a second (surge) pod.

Migration runbook (overseerr -> seerr)

Back up first. The clone is non-destructive (overseerr keeps its own volume), so leaving overseerr scaled to 0 is your rollback.

  1. Create the shell so ArgoCD will adopt (not recreate) what we pre-make:
    kubectl apply -f seerr/namespace.yml -f seerr/pvc.yml
  2. Clone the data (scales overseerr down, tar-pipes the volume across):
    ./migrate-from-overseerr.sh
  3. Start seerr: sync the seerr ArgoCD app (Deployment, services, ingress). Seerr boots on the migrated config and runs the in-place overseerr->seerr migration automatically.
  4. Verify:
    kubectl -n seerr logs deploy/seerr -f      # watch for migration success
    Then open https://seerr.stuffsclub.net and confirm your users/requests/settings.
  5. Cut over DNS/ingress is already handled (the IngressRoute points at seerr). Once happy, you can retire overseerr:
    kubectl delete namespace overseerr   # only after you're confident
    Until then overseerr stays at replicas=0 as a rollback. Its Service still holds LoadBalancer IP 192.168.0.54 — deleting the overseerr namespace frees it.

Notes

  • Config path changed: linuxserver/overseerr used /config; the official seerr image uses /app/config and runs as UID 1000 (node). No PUID/PGID env needed.
  • Image pinned to :latest (matches house convention; diun.enable annotation tracks updates).

About

Seerr (media request management) — ArgoCD-managed k8s app, migrated from overseerr

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages