add jellyfin

This commit is contained in:
2025-03-16 02:24:03 +01:00
parent 56f4508697
commit d0df41bd8c
7 changed files with 188 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
# Define a StorageClass using Longhorn
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: config-storage
provisioner: driver.longhorn.io
reclaimPolicy: Retain # Keep the data even if PVC is deleted
allowVolumeExpansion: true
parameters:
numberOfReplicas: "2" # Adjust based on your cluster size
staleReplicaTimeout: "30" # Timeout for stale replicas (in minutes)
fromBackup: "" # Optional: Use if restoring from a Longhorn backup
volumeBindingMode: Immediate # Ensures volumes are bound immediately
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-config
namespace: jellyfin
spec:
storageClassName: config-storage
accessModes:
- ReadWriteOnce # Default Longhorn mode
resources:
requests:
storage: 10Gi

View File

@@ -0,0 +1,51 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jellyfin
spec:
selector:
matchLabels:
app: jellyfin
template:
metadata:
labels:
app: jellyfin
spec:
containers:
- env:
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: docker.io/jellyfin/jellyfin
imagePullPolicy: IfNotPresent
name: jellyfin
ports:
- containerPort: 8096
protocol: TCP
volumeMounts:
- mountPath: /data/media
name: media
readOnly: True
- mountPath: /config
name: jellyfin-config
restartPolicy: Always
volumes:
- name: media
persistentVolumeClaim:
claimName: media-pvc
- name: jellyfin-config
persistentVolumeClaim:
claimName: jellyfin-config

View File

@@ -0,0 +1,24 @@
# For microk8s default nginx ingress controller (enable by running 'microk8s enable ingress')
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jellyfin-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec
tls:
- hosts:
- play.panic.haus
secretName: jellyfin-tls
rules:
- host: play.panic.haus
http:
paths:
- backend:
service:
name: jellyfin
port:
number: 8096
path: /
pathType: Prefix

View File

@@ -0,0 +1,9 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- ingress.yaml
- config-storage.yaml
- media-storage.yaml
- service.yaml

View File

@@ -0,0 +1,27 @@
# Define a StorageClass using Longhorn
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: media-storage
provisioner: driver.longhorn.io
reclaimPolicy: Retain # Keep the data even if PVC is deleted
allowVolumeExpansion: true
parameters:
numberOfReplicas: "1" # Adjust based on your cluster size
staleReplicaTimeout: "30" # Timeout for stale replicas (in minutes)
fromBackup: "" # Optional: Use if restoring from a Longhorn backup
volumeBindingMode: Immediate # Ensures volumes are bound immediately
---
# Create a PersistentVolumeClaim (PVC) using Longhorn
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: media-pvc
namespace: jellyfin
spec:
storageClassName: media-storage
accessModes:
- ReadWriteOnce # Longhorn supports RWO; if RWX is needed, enable RWX mode in Longhorn UI
resources:
requests:
storage: 1Ti

View File

@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
labels:
app: jellyfin
name: jellyfin
spec:
ports:
- name: web
port: 8096
protocol: TCP
targetPort: 8096
selector:
app: jellyfin
type: ClusterIP