From 5886c83d8da0e1ac9c508ac2885a24fa213ab50f Mon Sep 17 00:00:00 2001 From: Vegard Hagen Date: Sat, 4 Nov 2023 22:55:07 +0100 Subject: [PATCH] feat(jellyfin): Adding Jellyfin --- apps/jellyfin/deployment.yaml | 47 ++++++++++++++++++++++++++ apps/jellyfin/ingress.yaml | 13 +++++++ apps/jellyfin/kustomization.yaml | 22 ++++++++++++ apps/jellyfin/pv-jellyfin-config.yaml | 22 ++++++++++++ apps/jellyfin/pv-jellyfin-media.yaml | 22 ++++++++++++ apps/jellyfin/pvc-jellyfin-config.yaml | 12 +++++++ apps/jellyfin/pvc-jellyfin-media.yaml | 12 +++++++ apps/jellyfin/service.yaml | 12 +++++++ apps/project.yaml | 2 ++ 9 files changed, 164 insertions(+) create mode 100644 apps/jellyfin/deployment.yaml create mode 100644 apps/jellyfin/ingress.yaml create mode 100644 apps/jellyfin/kustomization.yaml create mode 100644 apps/jellyfin/pv-jellyfin-config.yaml create mode 100644 apps/jellyfin/pv-jellyfin-media.yaml create mode 100644 apps/jellyfin/pvc-jellyfin-config.yaml create mode 100644 apps/jellyfin/pvc-jellyfin-media.yaml create mode 100644 apps/jellyfin/service.yaml diff --git a/apps/jellyfin/deployment.yaml b/apps/jellyfin/deployment.yaml new file mode 100644 index 0000000..c456450 --- /dev/null +++ b/apps/jellyfin/deployment.yaml @@ -0,0 +1,47 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: jellyfin + name: jellyfin + namespace: jellyfin +spec: + replicas: 1 + selector: + matchLabels: + app: jellyfin + template: + metadata: + labels: + app: jellyfin + spec: + containers: + - name: jellyfin + image: lscr.io/linuxserver/jellyfin:latest + imagePullPolicy: Always + envFrom: + - configMapRef: + name: jellyfin-env + ports: + - name: dns-tcp + containerPort: 53 + protocol: TCP + resources: + requests: + cpu: 2000m + memory: 6Gi + limits: + cpu: 10000m + memory: 12Gi + volumeMounts: + - name: config + mountPath: /config + - name: media + mountPath: /media + volumes: + - name: config + persistentVolumeClaim: + claimName: jellyfin-config-pvc + - name: media + persistentVolumeClaim: + claimName: jellyfin-media-pvc diff --git a/apps/jellyfin/ingress.yaml b/apps/jellyfin/ingress.yaml new file mode 100644 index 0000000..9fd0037 --- /dev/null +++ b/apps/jellyfin/ingress.yaml @@ -0,0 +1,13 @@ +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: jellyfin-ingress +spec: + entryPoints: + - websecure + routes: + - match: Host(`jellyfin.stonegarden.dev`) + kind: Rule + services: + - name: jellyfin-svc + port: 8096 \ No newline at end of file diff --git a/apps/jellyfin/kustomization.yaml b/apps/jellyfin/kustomization.yaml new file mode 100644 index 0000000..501687a --- /dev/null +++ b/apps/jellyfin/kustomization.yaml @@ -0,0 +1,22 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: jellyfin +commonLabels: + app: jellyfin + +configMapGenerator: + - name: jellyfin-env + literals: + - PUID="1000" + - PGID="1000" + - UMASK="002" + - TZ="Europe/Oslo" + +resources: + - pv-jellyfin-config.yaml + - pvc-jellyfin-config.yaml + - pv-jellyfin-media.yaml + - pvc-jellyfin-media.yaml + - service.yaml + - deployment.yaml + - ingress.yaml diff --git a/apps/jellyfin/pv-jellyfin-config.yaml b/apps/jellyfin/pv-jellyfin-config.yaml new file mode 100644 index 0000000..2ce6596 --- /dev/null +++ b/apps/jellyfin/pv-jellyfin-config.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-config-pv +spec: + capacity: + storage: 64Gi + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: jellyfin-config-sc + local: + path: /disk/etc/jellyfin + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - gauss \ No newline at end of file diff --git a/apps/jellyfin/pv-jellyfin-media.yaml b/apps/jellyfin/pv-jellyfin-media.yaml new file mode 100644 index 0000000..2ce9c82 --- /dev/null +++ b/apps/jellyfin/pv-jellyfin-media.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-media-pv +spec: + capacity: + storage: 12Ti + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: jellyfin-media-sc + local: + path: /disk/data/media + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - gauss \ No newline at end of file diff --git a/apps/jellyfin/pvc-jellyfin-config.yaml b/apps/jellyfin/pvc-jellyfin-config.yaml new file mode 100644 index 0000000..03335bc --- /dev/null +++ b/apps/jellyfin/pvc-jellyfin-config.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: jellyfin-config-pvc + namespace: jellyfin +spec: + storageClassName: jellyfin-config-sc + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 64Gi diff --git a/apps/jellyfin/pvc-jellyfin-media.yaml b/apps/jellyfin/pvc-jellyfin-media.yaml new file mode 100644 index 0000000..a934eaf --- /dev/null +++ b/apps/jellyfin/pvc-jellyfin-media.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: jellyfin-media-pvc + namespace: jellyfin +spec: + storageClassName: jellyfin-media-sc + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 12Ti diff --git a/apps/jellyfin/service.yaml b/apps/jellyfin/service.yaml new file mode 100644 index 0000000..5ce7126 --- /dev/null +++ b/apps/jellyfin/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: jellyfin-svc + namespace: jellyfin +spec: + type: LoadBalancer + ports: + - name: web + port: 8096 + selector: + app: jellyfin \ No newline at end of file diff --git a/apps/project.yaml b/apps/project.yaml index 36390d5..9e7f24c 100644 --- a/apps/project.yaml +++ b/apps/project.yaml @@ -17,6 +17,8 @@ spec: server: '*' - namespace: 'home-assistant' server: '*' + - namespace: 'jellyfin' + server: '*' - namespace: 'plex' server: '*' - namespace: 'stonegarden'