Media Services
Relevant source files
- .taskfiles/Kubernetes/Taskfile.yaml
- .taskfiles/Talos/Taskfile.yaml
- Taskfile.yaml
- docs/cilium-ipam.md
- docs/services-list.md
- infrastructure/terraform/proxmox/proxmox.tfvars.example
- kubernetes/apps/downloads/autobangumi/ks.yaml
- kubernetes/apps/downloads/bazarr/ks.yaml
- kubernetes/apps/downloads/flaresolverr/app/helmrelease.yaml
- kubernetes/apps/downloads/flaresolverr/app/kustomization.yaml
- kubernetes/apps/downloads/flaresolverr/ks.yaml
- kubernetes/apps/downloads/lidarr/ks.yaml
- kubernetes/apps/downloads/metube/ks.yaml
- kubernetes/apps/downloads/radarr/ks.yaml
- kubernetes/apps/downloads/sonarr/ks.yaml
- kubernetes/apps/home-automation/frigate/ks.yaml
- kubernetes/apps/home-automation/home-assistant/app/externalsecret.yaml
- kubernetes/apps/home-automation/home-assistant/app/kustomization.yaml
- kubernetes/apps/home-automation/home-assistant/app/pvc.yaml
- kubernetes/apps/media/calibre-web-automated/app/helmrelease.yaml
- kubernetes/apps/media/calibre-web-automated/app/kustomization.yaml
- kubernetes/apps/media/calibre-web-automated/ks.yaml
- kubernetes/apps/media/filebrowser/app/helmrelease.yaml
- kubernetes/apps/media/filebrowser/app/kustomization.yaml
- kubernetes/apps/media/filebrowser/ks.yaml
- kubernetes/apps/media/jellyfin/app/helmrelease.yaml
- kubernetes/apps/media/jellyfin/app/kustomization.yaml
- kubernetes/apps/media/jellyfin/ks.yaml
- kubernetes/apps/media/kavita/app/helmrelease.yaml
- kubernetes/apps/media/kavita/app/kustomization.yaml
- kubernetes/apps/media/kavita/ks.yaml
- kubernetes/apps/media/komga/app/helmrelease.yaml
- kubernetes/apps/media/komga/app/kustomization.yaml
- kubernetes/apps/media/komga/ks.yaml
- kubernetes/apps/media/neko/app/configmap.yaml
- kubernetes/apps/media/neko/app/externalsecret.yaml
- kubernetes/apps/media/neko/app/helmrelease.yaml
- kubernetes/apps/media/neko/app/kustomization.yaml
- kubernetes/apps/media/neko/ks.yaml
- kubernetes/apps/media/opencloud/app/config/csp.yaml
- kubernetes/apps/media/opencloud/app/config/kustomizeconfig.yaml
- kubernetes/apps/media/opencloud/app/config/proxy.yaml
- kubernetes/apps/media/opencloud/app/externalsecret.yaml
- kubernetes/apps/media/opencloud/app/helmrelease.yaml
- kubernetes/apps/media/opencloud/app/kustomization.yaml
- kubernetes/apps/media/opencloud/ks.yaml
- kubernetes/apps/media/plex/app/externalsecret.yaml
- kubernetes/apps/media/plex/app/helmrelease.yaml
- kubernetes/apps/media/plex/app/kustomization.yaml
- kubernetes/apps/media/plex/app/pvc.yaml
- kubernetes/apps/media/plex/kometa/helmrelease.yaml
- kubernetes/apps/media/plex/plex-auto-languages/helmrelease.yaml
- kubernetes/apps/media/seerr/app/externalsecret.yaml
- kubernetes/apps/media/seerr/app/helmrelease.yaml
- kubernetes/apps/media/seerr/app/kustomization.yaml
- kubernetes/apps/media/seerr/app/pvc.yaml
- kubernetes/apps/media/seerr/ks.yaml
- kubernetes/apps/media/slskd/app/externalsecret.yaml
- kubernetes/apps/media/slskd/app/helmrelease.yaml
- kubernetes/apps/media/slskd/app/kustomization.yaml
- kubernetes/apps/media/slskd/ks.yaml
- kubernetes/apps/media/syncthing/app/externalsecret.yaml
- kubernetes/apps/media/syncthing/app/helmrelease.yaml
- kubernetes/apps/media/syncthing/app/kustomization.yaml
- kubernetes/apps/media/syncthing/app/prometheusrule.yaml
- kubernetes/apps/media/syncthing/ks.yaml
- kubernetes/apps/media/tautulli/app/externalsecret.yaml
- kubernetes/apps/media/tautulli/app/helmrelease.yaml
- kubernetes/apps/media/tautulli/app/kustomization.yaml
- kubernetes/apps/media/tautulli/app/pvc.yaml
- kubernetes/apps/media/tautulli/ks.yaml
- kubernetes/apps/network/multus/config/net-attach-vpn.yaml
- kubernetes/apps/observability/exporters/nut-exporter/app/helmrelease.yaml
- kubernetes/apps/observability/exporters/speedtest-exporter/app/helmrelease.yaml
The media namespace encompasses the cluster’s entertainment and content management stack. This includes video streaming (Plex, Jellyfin), book/manga management (Komga, Kavita, Calibre-Web), file synchronization (Syncthing, OpenCloud), and specialized utilities for metadata and stream monitoring.
Core Media Streaming
The primary video streaming services, Plex and Jellyfin, are configured to utilize hardware acceleration via Intel QuickSync (iGPU passthrough).
Plex Media Server
Plex is deployed using the app-templatekubernetes/apps/media/plex/app/helmrelease.yaml10 It features a complex networking setup with both a dedicated LoadBalancer IP (10.10.30.14) kubernetes/apps/media/plex/app/helmrelease.yaml77 and an external Envoy gateway route kubernetes/apps/media/plex/app/helmrelease.yaml115-117
- Transcoding: Uses a
tmpfs(emptyDir) for/transcodeto minimize disk wear kubernetes/apps/media/plex/app/helmrelease.yaml99-100 - Storage: Connects to the primary ZFS pool via NFS at
smb.cloudjur.com:/tank/Storagekubernetes/apps/media/plex/app/helmrelease.yaml105-106 - Metadata: Managed via Kometa (formerly Plex Meta Manager) to automate collection posters and overlays.
Jellyfin
Jellyfin serves as the open-source alternative, sharing the same NFS media source kubernetes/apps/media/jellyfin/app/helmrelease.yaml106-107 It is configured with DOTNET_SYSTEM_IO_DISABLEFILELOCKING to maintain compatibility with the underlying network storage kubernetes/apps/media/jellyfin/app/helmrelease.yaml31
Media Data Flow and Hardware Integration
The following diagram illustrates how media traffic and hardware resources flow from the physical host to the applications.
Title: Media Service Infrastructure Integration
[Flowchart Diagram]
Sources: kubernetes/apps/media/plex/app/helmrelease.yaml77-108kubernetes/apps/media/jellyfin/app/helmrelease.yaml76-109docs/cilium-ipam.md109-112
Content Management and Requests
The ecosystem includes several management tools that interact with the core streaming servers:
- Tautulli: Monitors Plex streams and provides detailed statistics kubernetes/apps/media/tautulli/app/helmrelease.yaml100
- Seerr: Handles user requests for new movies and TV shows, accessible at
requests.cloudjur.comdocs/cilium-ipam.md28 - Maintainerr: Automates the cleanup of media based on rules (e.g., deleting watched content or low-rated items) docs/cilium-ipam.md65
- Watchstate: Synchronizes play states across different media providers docs/cilium-ipam.md97
Books and Manga
The cluster hosts a comprehensive library for digital reading materials.
| Service | Purpose | Primary Storage Path |
|---|---|---|
| Komga | Comics and Manga server kubernetes/apps/media/komga/app/helmrelease.yaml49 | /media/Bookskubernetes/apps/media/komga/app/helmrelease.yaml69 |
| Kavita | E-book and Manga reader | Shared NFS Mount |
| Calibre-Web-Automated | E-book management and ingestion kubernetes/apps/media/calibre-web-automated/app/helmrelease.yaml118 | /calibre-librarykubernetes/apps/media/calibre-web-automated/app/helmrelease.yaml97-98 |
Calibre-Web-Automated is specifically configured with an ingestion path at /cwa-book-ingest which maps to Downloads/Books on the NFS share, allowing for automated library updates kubernetes/apps/media/calibre-web-automated/app/helmrelease.yaml99-100
Sources: kubernetes/apps/media/komga/app/helmrelease.yaml47-70kubernetes/apps/media/calibre-web-automated/app/helmrelease.yaml90-100
File Synchronization and Access
OpenCloud (Nextcloud/oCIS)
OpenCloud (OpenCloud.eu/oCIS) provides a high-performance file sync and share platform. It is heavily integrated with the cluster’s identity and storage providers:
- Identity: Uses Authentik via OIDC kubernetes/apps/media/opencloud/app/externalsecret.yaml15-17
- Storage: Uses the
decomposeds3driver to store user data in Garage S3 buckets kubernetes/apps/media/opencloud/app/helmrelease.yaml54kubernetes/apps/media/opencloud/app/externalsecret.yaml38-42 - Proxy: Includes a
webfinger-proxycontainer to handle OIDC discovery for desktop clients kubernetes/apps/media/opencloud/app/helmrelease.yaml24-33
Syncthing
Syncthing provides peer-to-peer file synchronization. It is configured with a dedicated LoadBalancer IP (10.10.30.9) for its discovery and listener ports (22000/TCP, 22000/UDP, 21027/UDP) to ensure connectivity outside the cluster kubernetes/apps/media/syncthing/app/helmrelease.yaml73-87
Slskd
Slskd is a web-based client for the Soulseek network, primarily used for music sharing. It uses a specialized networking configuration:
- VPN Integration: The pod is attached to a
vpnMultus network kubernetes/apps/media/slskd/app/helmrelease.yaml85-90 - Direct Access: A LoadBalancer service exposes the Soulseek listen port (
50429) at10.10.30.77kubernetes/apps/media/slskd/app/helmrelease.yaml106-113
Title: File Access and Sync Architecture
[Flowchart Diagram]
Sources: kubernetes/apps/media/opencloud/app/helmrelease.yaml54-100kubernetes/apps/media/syncthing/app/helmrelease.yaml130-139kubernetes/apps/media/filebrowser/app/helmrelease.yaml78-83kubernetes/apps/media/opencloud/app/externalsecret.yaml15-42
Collaborative Services
Neko
Neko provides a virtual browser (Firefox) in a pod for “movie night” style collaborative browsing kubernetes/apps/media/neko/app/helmrelease.yaml95-97
- Networking: Uses a LoadBalancer IP (
10.10.30.48) to handle WebRTC/UDP traffic on port5101kubernetes/apps/media/neko/app/helmrelease.yaml78-88 - Persistence: Mounts a Firefox profile via PVC to retain browser state kubernetes/apps/media/neko/app/helmrelease.yaml62-67
Sources: kubernetes/apps/media/neko/app/helmrelease.yaml34-47kubernetes/apps/media/neko/app/helmrelease.yaml78-103