Files
jellyfin-ha-src/deploy/helm/jellyfin-ha/templates/NOTES.txt
T
ZoltyMat 7d4cef51f5 feat: add Helm chart for jellyfin-ha (#3)
Adds a production-ready Helm chart under deploy/helm/jellyfin-ha/.

Motivated by a community request on Reddit:
https://www.reddit.com/r/JellyfinCommunity/comments/1rvj17f/jellyfin_ha_on_kubernetes_redisbacked_transcode/oav7mlz/

Features:
- StatefulSet with configurable replica count (default 2 for HA)
- Redis subchart (in-cluster) wired to ITranscodeSessionStore via
  Jellyfin__TranscodeStore__RedisConnectionString env var
- Supports external Redis via ha.transcodeStore.existingSecret or
  ha.transcodeStore.redisConnectionString
- Optional in-cluster PostgreSQL StatefulSet (experimental, mirrors
  existing kubernetes/apps/media/jellyfin-postgres.yaml pattern)
- RWX config + transcode PVCs (required for multi-pod session takeover)
- Per-pod cache via volumeClaimTemplates (RWO)
- Optional NFS PV+PVC for media library
- Intel QSV / VA-API GPUgit checkout -b feat/helm-chart && git add deploy/ && legit add deploy/ && git commit -m dagit commit -m featss
2026-03-31 22:56:34 -04:00

50 lines
2.0 KiB
Plaintext

1. Jellyfin HA has been deployed.
{{- if eq (int .Values.replicaCount) 1 }}
⚠ replicaCount=1 — running in single-instance mode. Set replicaCount >= 2 and
ha.enabled=true to enable HA transcoding.
{{- else }}
✔ Running {{ .Values.replicaCount }} replicas.
{{- if include "jellyfin-ha.haEnabled" . }}
✔ HA mode: ACTIVE — transcode sessions replicated via Redis.
{{- else }}
⚠ HA mode: INACTIVE — NullTranscodeSessionStore in use.
Set redis.enabled=true (or ha.transcodeStore.redisConnectionString) to enable HA.
{{- end }}
{{- end }}
2. Get the Jellyfin URL:
{{- if .Values.ingress.enabled }}
{{- range .Values.ingress.hosts }}
https://{{ .host }}/
{{- end }}
{{- else if .Values.traefikIngressRoute.enabled }}
https://{{ .Values.traefikIngressRoute.host }}/
{{- else }}
Access via port-forward:
kubectl port-forward -n {{ .Release.Namespace }} svc/{{ include "jellyfin-ha.fullname" . }} 8096:{{ .Values.service.port }}
http://localhost:8096/
{{- end }}
3. PostgreSQL:
{{- if .Values.postgresql.enabled }}
✔ In-cluster PostgreSQL deployed. Ensure the secret "{{ .Values.postgresql.existingSecret }}"
exists in namespace {{ .Release.Namespace }} before starting the server.
{{- else if eq .Values.config.databaseType "Jellyfin-PostgreSQL" }}
⚠ config.databaseType=Jellyfin-PostgreSQL but postgresql.enabled=false.
Make sure you have an external PostgreSQL and the correct DATABASE_URL env var set.
{{- else }}
Using SQLite (default). Enable postgresql.enabled=true for a shared database backend.
{{- end }}
4. Transcode storage:
The transcode PVC must be ReadWriteMany when replicaCount > 1.
Current accessMode: {{ .Values.persistence.transcode.accessMode }}
{{- if and (gt (int .Values.replicaCount) 1) (ne .Values.persistence.transcode.accessMode "ReadWriteMany") }}
⚠ WARNING: replicaCount > 1 but transcode accessMode is not ReadWriteMany.
Pod B cannot read Pod A's HLS segments during session takeover.
Set persistence.transcode.accessMode=ReadWriteMany or use an NFS / Longhorn RWX PVC.
{{- end }}