Helm Chart
The Helm chart deploys a complete media automation stack including PostgreSQL, qBittorrent, Prowlarr, Sonarr, and Radarr with PrepArr init and sidecar containers.
Prerequisites
Section titled “Prerequisites”- Kubernetes 1.19+
- Helm 3.8+
- kubectl configured for your cluster
Quick Start
Section titled “Quick Start”# Install with default valueshelm install my-media-stack oci://ghcr.io/robbeverhelst/charts/preparr --version <version>
# Or install with custom valueshelm install my-media-stack oci://ghcr.io/robbeverhelst/charts/preparr --version <version> -f custom-values.yamlThe chart is also available on ArtifactHub.
What Gets Deployed
Section titled “What Gets Deployed”For each enabled Servarr application, the chart creates:
- Init container — One-time database setup and config.xml generation
- Application container — The Servarr app (Sonarr, Radarr, etc.)
- Sidecar container — Continuous configuration reconciliation
- Service — Kubernetes service for network access
- ConfigMap — Configuration file from Helm values
- Health endpoints — Kubernetes-ready liveness and readiness probes
Configuration Examples
Section titled “Configuration Examples”Minimal
Section titled “Minimal”global: namespace: my-media
postgresql: auth: password: "my-secure-password"
qbittorrent: auth: password: "qbit-password"
sonarr: adminPassword: "sonarr-password"
radarr: adminPassword: "radarr-password"
prowlarr: adminPassword: "prowlarr-password"Selective Deployment
Section titled “Selective Deployment”Deploy only Sonarr:
radarr: enabled: falseprowlarr: enabled: false
sonarr: enabled: true adminPassword: "secure-password" config: rootFolders: - path: "/tv" downloadClients: - name: "qBittorrent" implementation: "QBittorrent" fields: - name: "host" value: "qbittorrent" - name: "port" value: 8080Production
Section titled “Production”global: namespace: media-prod
preparr: image: tag: "0.15.0" pullPolicy: IfNotPresent logLevel: info
postgresql: persistence: enabled: true size: 20Gi storageClass: "fast-ssd" resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1Gi" cpu: "1000m"
sonarr: service: type: ClusterIP storage: tv: enabled: true size: 200Gi storageClass: "bulk-storage" resources: requests: memory: "512Mi" limits: memory: "1Gi"Advanced Usage
Section titled “Advanced Usage”External PostgreSQL
Section titled “External PostgreSQL”postgresql: enabled: false externalHost: "postgres.database.svc.cluster.local" service: port: 5432 auth: username: "servarr_user" password: "external-db-password" database: "servarr"Custom API Keys
Section titled “Custom API Keys”sonarr: apiKey: "your-custom-sonarr-api-key"radarr: apiKey: "your-custom-radarr-api-key"prowlarr: apiKey: "your-custom-prowlarr-api-key"Operations
Section titled “Operations”# Upgrade with new valueshelm upgrade media-stack oci://ghcr.io/robbeverhelst/charts/preparr --version <version> -f values.yaml
# Uninstallhelm uninstall media-stack
# Dry run to previewhelm install test ./preparr --dry-run --debug
# Template outputhelm template test ./preparr > rendered.yamlAccess Services
Section titled “Access Services”# Port forwardkubectl port-forward -n preparr svc/sonarr 8989:8989kubectl port-forward -n preparr svc/radarr 7878:7878kubectl port-forward -n preparr svc/prowlarr 9696:9696For the full list of configurable parameters, see the Helm Values Reference.