homelab/manifests/media/jellyfin.yaml
Nik Afiq 40f6d05c4b
Some checks failed
validate / lint (push) Failing after 1s
fix: revert Jellyfin to 12.0 after 10.11.11 rollback broke DB compatibility
10.11.11 can't read the schema Jellyfin 12.0 already migrated the config
DB to (SQLite errors on every user query), which broke login entirely.
Pin to 12.0 instead of :latest to restore service and stop future
silent version jumps.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016EQrGkfXFae4PZG9QfPRf4
2026-09-14 15:45:39 +09:00

175 lines
3.9 KiB
YAML

# Apply: kubectl apply -f manifests/media/jellyfin.yaml
# Delete: kubectl delete -f manifests/media/jellyfin.yaml
# Description: Jellyfin media server with NFS media PV, local config PVC, and Ingress at jellyfin.home.arpa.
apiVersion: v1
kind: Namespace
metadata:
name: jellyfin
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jellyfin-media-pv
spec:
capacity:
storage: 10Ti
accessModes:
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 10.10.40.20
path: /mnt/storage
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minisforum
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-media
namespace: jellyfin
annotations:
helm.sh/resource-policy: keep
spec:
accessModes:
- ReadOnlyMany
storageClassName: ""
volumeName: jellyfin-media-pv
resources:
requests:
storage: 10Ti
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-config
namespace: jellyfin
annotations:
helm.sh/resource-policy: keep
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jellyfin
namespace: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: jellyfin
template:
metadata:
labels:
app: jellyfin
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role
operator: In
values:
- primary
containers:
- name: jellyfin
image: jellyfin/jellyfin:12.0
ports:
- containerPort: 8096
env:
- name: JELLYFIN_PublishedServerUrl
value: https://jellyfin.home.arpa
- name: LIBVA_DRIVER_NAME
value: radeonsi
readinessProbe:
httpGet:
path: /health
port: 8096
initialDelaySeconds: 15
periodSeconds: 15
livenessProbe:
httpGet:
path: /health
port: 8096
initialDelaySeconds: 30
periodSeconds: 30
resources:
requests:
cpu: 200m
memory: 1Gi
limits:
cpu: 2000m
memory: 4Gi
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /media
readOnly: true
- name: dri
mountPath: /dev/dri
securityContext:
supplementalGroups:
- 992
volumes:
- name: config
persistentVolumeClaim:
claimName: jellyfin-config
- name: media
persistentVolumeClaim:
claimName: jellyfin-media
- name: dri
hostPath:
path: /dev/dri
---
apiVersion: v1
kind: Service
metadata:
name: jellyfin
namespace: jellyfin
spec:
selector:
app: jellyfin
ports:
- port: 80
targetPort: 8096
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jellyfin
namespace: jellyfin
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
cert-manager.io/cluster-issuer: internal-ca-issuer
spec:
ingressClassName: traefik
tls:
- secretName: jellyfin-tls
hosts:
- jellyfin.home.arpa
rules:
- host: jellyfin.home.arpa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jellyfin
port:
number: 80