f89e1c8260
Turn the single-replica jellyfin-ha app into a proper high-availability deployment so the fork's Redis-coordinated distributed transcoding and PostgreSQL main database can actually be exercised. - Replace the Deployment with a 2-replica StatefulSet for stable pod identity; set JELLYFIN_INSTANCE_ID from metadata.name (the fork's Redis transcode-lease owner id), add soft podAntiAffinity and a PDB minAvailable 1. - Move the main Jellyfin DB to PostgreSQL via a CloudNativePG trio (3-instance Cluster, PgBouncer Pooler, Ceph RGW barman backups) mirroring the litellm pattern; an init container writes database.xml selecting the fork's Jellyfin-PostgreSQL provider and the DSN is composed from the CNPG-generated app secret pointed at the pooler. - Share /config on an RWX cephfs PVC across replicas; keep /cache per-pod via a volumeClaimTemplate. - Fix the transcode mount to the fork's real path /config/transcodes on the RWX PVC (raid5) so a surviving pod can resume the segments of the pod it takes over. - Add Intel iGPU hardware transcoding via the gpu.intel.com/i915 device plugin resource plus render/video supplemental groups. - Switch the Service to sessionAffinity ClientIP to reduce transcode churn. - Disable UDP auto-discovery. Library scans still run on every replica; a single-scanner leader election is a planned follow-up.
46 lines
1.2 KiB
YAML
46 lines
1.2 KiB
YAML
---
|
|
# Ceph RGW (S3) backup target for the jellyfin CNPG cluster, provisioned by the
|
|
# in-estate cephrgw-operator: one dedicated bucket + owner user. CNPG reads the
|
|
# S3 credential Secret from its own namespace.
|
|
apiVersion: ceph.unkin.net/v1alpha1
|
|
kind: ObjectStoreUser
|
|
metadata:
|
|
name: cnpg-jellyfin-backup
|
|
namespace: jellyfin
|
|
spec:
|
|
displayName: "CNPG backup owner (jellyfin)"
|
|
uid: cnpg-jellyfin-backup
|
|
maxBuckets: 5
|
|
secretName: cnpg-jellyfin-backup-s3
|
|
retainOnDelete: true
|
|
---
|
|
apiVersion: ceph.unkin.net/v1alpha1
|
|
kind: Bucket
|
|
metadata:
|
|
name: cnpg-jellyfin
|
|
namespace: jellyfin
|
|
spec:
|
|
placementTarget: ec
|
|
bucketName: cnpg-jellyfin
|
|
ownerRef: cnpg-jellyfin-backup
|
|
versioning: false
|
|
tags:
|
|
app: jellyfin
|
|
purpose: cnpg-backup
|
|
retainOnDelete: true
|
|
---
|
|
# Nightly base backup on top of always-on WAL archiving. Scheduled off-peak and
|
|
# staggered from the other CNPG clusters (6-field cron, seconds first).
|
|
apiVersion: postgresql.cnpg.io/v1
|
|
kind: ScheduledBackup
|
|
metadata:
|
|
name: cnpg-jellyfin-nightly
|
|
namespace: jellyfin
|
|
spec:
|
|
schedule: "0 35 3 * * *"
|
|
immediate: false
|
|
backupOwnerReference: self
|
|
method: barmanObjectStore
|
|
cluster:
|
|
name: jellyfin-postgres
|