--- apiVersion: apps/v1 kind: Deployment metadata: name: jellyfin namespace: jellyfin spec: # Start single-replica. Scaling to >1 (true HA) is a follow-up once the Redis # transcode store and RWX transcode scratch are validated end-to-end. replicas: 1 strategy: # Config PVC is RWO; a Recreate rollout avoids two pods contending for it. type: Recreate selector: matchLabels: app: jellyfin template: metadata: labels: app: jellyfin spec: containers: - name: jellyfin image: git.unkin.net/unkin/jellyfin-ha:v0.1.0 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8096 protocol: TCP env: # Distributed transcode session store (jellyfin-ha additions). - name: Jellyfin__TranscodeStore__RedisConnectionString value: "redis:6379,abortConnect=false" - name: Jellyfin__TranscodeStore__LeaseDurationSeconds value: "30" livenessProbe: httpGet: path: /health port: http initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /health port: http initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 resources: requests: cpu: "1" memory: 1Gi limits: cpu: "4" memory: 6Gi volumeMounts: - name: config mountPath: /config - name: cache mountPath: /cache - name: transcode mountPath: /transcode - name: media mountPath: /media readOnly: true volumes: - name: config persistentVolumeClaim: claimName: jellyfin-config - name: cache emptyDir: {} - name: transcode persistentVolumeClaim: claimName: jellyfin-transcode - name: media persistentVolumeClaim: claimName: jellyfin-media