From cf196e81ab30a78e0f997a00af90679be513b76c Mon Sep 17 00:00:00 2001
From: Philip Haupt <“der.mad.mob@gmail.com”>
Date: Sun, 30 Mar 2025 17:55:28 +0200
Subject: [PATCH] jellyfin
---
jellyfin/kustomization.yaml | 7 +
jellyfin/main.yaml | 126 +++++++++++++++++
jellyfin/pvc.yaml | 11 ++
jellyfin/src/kustomization.yaml | 12 ++
jellyfin/src/values.yaml | 238 ++++++++++++++++++++++++++++++++
5 files changed, 394 insertions(+)
create mode 100644 jellyfin/kustomization.yaml
create mode 100644 jellyfin/main.yaml
create mode 100644 jellyfin/pvc.yaml
create mode 100644 jellyfin/src/kustomization.yaml
create mode 100644 jellyfin/src/values.yaml
diff --git a/jellyfin/kustomization.yaml b/jellyfin/kustomization.yaml
new file mode 100644
index 0000000..5ec52c7
--- /dev/null
+++ b/jellyfin/kustomization.yaml
@@ -0,0 +1,7 @@
+# argocd/kustomization.yaml
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+
+resources:
+ - main.yaml
+ - pvc.yaml
\ No newline at end of file
diff --git a/jellyfin/main.yaml b/jellyfin/main.yaml
new file mode 100644
index 0000000..bc0d3aa
--- /dev/null
+++ b/jellyfin/main.yaml
@@ -0,0 +1,126 @@
+apiVersion: v1
+automountServiceAccountToken: true
+kind: ServiceAccount
+metadata:
+ labels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: jellyfin
+ app.kubernetes.io/version: 10.10.6
+ helm.sh/chart: jellyfin-2.3.0
+ name: jellyfin
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: jellyfin
+ app.kubernetes.io/version: 10.10.6
+ helm.sh/chart: jellyfin-2.3.0
+ name: jellyfin
+spec:
+ ports:
+ - name: http
+ port: 8096
+ protocol: TCP
+ targetPort: http
+ selector:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/name: jellyfin
+ type: ClusterIP
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ labels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: jellyfin
+ app.kubernetes.io/version: 10.10.6
+ helm.sh/chart: jellyfin-2.3.0
+ name: jellyfin-config
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 5Gi
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ labels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: jellyfin
+ app.kubernetes.io/version: 10.10.6
+ helm.sh/chart: jellyfin-2.3.0
+ name: jellyfin-media
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 25Gi
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: jellyfin
+ app.kubernetes.io/version: 10.10.6
+ helm.sh/chart: jellyfin-2.3.0
+ name: jellyfin
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/name: jellyfin
+ strategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/instance: jellyfin
+ app.kubernetes.io/managed-by: Helm
+ app.kubernetes.io/name: jellyfin
+ app.kubernetes.io/version: 10.10.6
+ helm.sh/chart: jellyfin-2.3.0
+ spec:
+ containers:
+ - image: docker.io/jellyfin/jellyfin:10.10.6
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ initialDelaySeconds: 10
+ tcpSocket:
+ port: http
+ name: jellyfin
+ ports:
+ - containerPort: 8096
+ name: http
+ protocol: TCP
+ readinessProbe:
+ initialDelaySeconds: 10
+ tcpSocket:
+ port: http
+ resources: {}
+ securityContext: {}
+ volumeMounts:
+ - mountPath: /config
+ name: config
+ - mountPath: /media
+ name: media
+ securityContext: {}
+ serviceAccountName: jellyfin
+ volumes:
+ - name: config
+ persistentVolumeClaim:
+ claimName: jellyfin-config
+ - name: media
+ persistentVolumeClaim:
+ claimName: jellyfin-media
diff --git a/jellyfin/pvc.yaml b/jellyfin/pvc.yaml
new file mode 100644
index 0000000..b295e36
--- /dev/null
+++ b/jellyfin/pvc.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: nfs-media
+spec:
+ accessModes:
+ - ReadWriteMany
+ resources:
+ requests:
+ storage: 10Gi # Muss kleiner oder gleich der PV-Größe sein
+ volumeName: nfs-media
diff --git a/jellyfin/src/kustomization.yaml b/jellyfin/src/kustomization.yaml
new file mode 100644
index 0000000..a81e9fc
--- /dev/null
+++ b/jellyfin/src/kustomization.yaml
@@ -0,0 +1,12 @@
+# kubernetes/cilium/kustomization.yaml
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+
+helmCharts:
+ - name: jellyfin
+ repo: https://jellyfin.github.io/jellyfin-helm
+ version: 2.3.0
+ releaseName: jellyfin
+ includeCRDs: true
+ namespace: jellyfin
+ valuesFile: values.yaml
diff --git a/jellyfin/src/values.yaml b/jellyfin/src/values.yaml
new file mode 100644
index 0000000..84b2067
--- /dev/null
+++ b/jellyfin/src/values.yaml
@@ -0,0 +1,238 @@
+# Default values for Jellyfin.
+# This is a YAML-formatted file.
+
+# -- Number of Jellyfin replicas to start. Should be left at 1.
+replicaCount: 1
+
+# -- Image pull secrets to authenticate with private repositories.
+# See: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+imagePullSecrets: []
+
+image:
+ # -- Container image repository for Jellyfin.
+ repository: docker.io/jellyfin/jellyfin
+ # -- Jellyfin container image tag. Leave empty to automatically use the Chart's app version.
+ tag: ""
+ # -- Image pull policy (Always, IfNotPresent, or Never).
+ pullPolicy: IfNotPresent
+
+# -- Override the default name of the chart.
+nameOverride: ""
+# -- Override the default full name of the chart.
+fullnameOverride: ""
+
+# -- Service account configuration. See: https://kubernetes.io/docs/concepts/security/service-accounts/
+serviceAccount:
+ # -- Specifies whether to create a service account.
+ create: true
+ # -- Automatically mount API credentials for the service account.
+ automount: true
+ # -- Annotations for the service account.
+ annotations: {}
+ # -- Custom name for the service account. If left empty, the name will be autogenerated.
+ name: ""
+
+# -- Annotations to add to the pod.
+podAnnotations: {}
+# -- Additional labels to add to the pod.
+podLabels: {}
+
+# -- Security context for the pod.
+podSecurityContext: {}
+ # fsGroup: 2000
+
+# -- Security context for the container.
+securityContext: {}
+ # capabilities:
+ # drop:
+ # - ALL
+ # readOnlyRootFilesystem: true
+ # runAsNonRoot: true
+ # runAsUser: 1000
+
+# -- Define a custom runtimeClassName for the pod.
+runtimeClassName: ''
+
+# -- Define a priorityClassName for the pod.
+priorityClassName: ""
+
+# -- Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`.
+deploymentStrategy:
+ type: RollingUpdate
+
+# -- Annotations to add to the deployment.
+deploymentAnnotations: {}
+
+service:
+ # # -- Custom name for the service port
+ # name: http
+ # -- Service type (ClusterIP, NodePort, or LoadBalancer).
+ type: ClusterIP
+ # -- Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/
+ ipFamilyPolicy: ""
+ # -- Supported IP families (IPv4, IPv6).
+ ipFamilies: []
+ # -- Specific IP address for the LoadBalancer.
+ loadBalancerIP: ""
+ # -- Class of the LoadBalancer.
+ loadBalancerClass: ""
+ # -- Source ranges allowed to access the LoadBalancer.
+ loadBalancerSourceRanges: []
+ # -- Port for the Jellyfin service.
+ port: 8096
+ # -- Name of the port in the service.
+ portName: service
+ # -- Annotations for the service.
+ annotations: {}
+ # -- Labels for the service.
+ labels: {}
+ # -- External traffic policy (Cluster or Local).
+ # externalTrafficPolicy: Cluster
+ # -- NodePort for the service (if applicable).
+ # nodePort:
+
+# -- Ingress configuration. See: https://kubernetes.io/docs/concepts/services-networking/ingress/
+ingress:
+ enabled: false
+ className: ""
+ annotations: {}
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ hosts:
+ - host: chart-example.local
+ paths:
+ - path: /
+ pathType: ImplementationSpecific
+ tls: []
+ # - secretName: chart-example-tls
+ # hosts:
+ # - chart-example.local
+
+# -- Resource requests and limits for the Jellyfin container.
+resources: {}
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+
+# -- Configure liveness probe for Jellyfin.
+livenessProbe:
+ initialDelaySeconds: 10
+ tcpSocket:
+ port: http
+ # successThreshold: 1
+ # failureThreshold: 3
+ # timeoutSeconds: 1
+ # periodSeconds: 10
+
+# -- Configure readiness probe for Jellyfin.
+readinessProbe:
+ initialDelaySeconds: 10
+ tcpSocket:
+ port: http
+ # successThreshold: 1
+ # failureThreshold: 3
+ # timeoutSeconds: 1
+ # periodSeconds: 10
+
+# -- Additional volumes to mount in the Jellyfin pod.
+volumes: []
+# - name: foo
+# secret:
+# secretName: mysecret
+# optional: false
+
+# -- Additional volume mounts for the Jellyfin container.
+volumeMounts: []
+# - name: foo
+# mountPath: "/etc/foo"
+# readOnly: true
+
+# -- Node selector for pod scheduling.
+nodeSelector: {}
+
+# -- Tolerations for pod scheduling.
+tolerations: []
+
+# -- Affinity rules for pod scheduling.
+affinity: {}
+
+jellyfin:
+ # -- Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html
+ enableDLNA: false
+ # -- Custom command to use as container entrypoint.
+ command: []
+ # -- Additional arguments for the entrypoint command.
+ args: []
+ # -- Additional environment variables for the container.
+ env: []
+
+persistence:
+ config:
+ # -- set to false to use emptyDir
+ enabled: true
+ accessMode: ReadWriteOnce
+ size: 5Gi
+ # -- Custom annotations to be added to the PVC
+ annotations: {}
+ # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner.
+ storageClass: ''
+ ## -- Use an existing PVC for this mount
+ # existingClaim: ''
+ media:
+ # -- set to false to use emptyDir
+ enabled: true
+ accessMode: ReadWriteOnce
+ size: 25Gi
+ # -- Custom annotations to be added to the PVC
+ annotations: {}
+ # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner.
+ storageClass: ''
+ ## -- Use an existing PVC for this mount
+ # existingClaim: ''
+
+# -- Configuration for metrics collection and monitoring
+metrics:
+ # -- Enable or disable metrics collection - Ensure you have started and configured your Jellyfin instance first as this will fail if system.xml does not exist yet.
+ enabled: false
+ command:
+ - bash
+ - '-c'
+ - >-
+ sed 's,false,true,' -i /config/config/system.xml &&
+ /jellyfin/jellyfin
+ # -- Configuration for the Prometheus ServiceMonitor
+ serviceMonitor:
+ # -- Enable or disable the creation of a ServiceMonitor resource
+ enabled: false
+ # -- Namespace where the ServiceMonitor resource should be created. Defaults to Release.Namespace
+ namespace: ''
+ # -- Labels to add to the ServiceMonitor resource
+ labels: {}
+ # -- Interval at which metrics should be scraped
+ interval: 30s
+ # -- Timeout for scraping metrics
+ scrapeTimeout: 30s
+ # -- Path to scrape for metrics
+ path: /metrics
+ # -- Port to scrape for metrics
+ port: 8096
+ # -- Scheme to use for scraping metrics (http or https)
+ scheme: http
+ # -- TLS configuration for scraping metrics
+ tlsConfig: {}
+ # -- Relabeling rules for the scraped metrics
+ relabelings: []
+ # -- Relabeling rules for the metrics before ingestion
+ metricRelabelings: []
+ # -- Target labels to add to the scraped metrics
+ targetLabels: []
+
+# -- additional init containers to run inside the pod.
+extraInitContainers: []
+
+# -- additional sidecar containers to run inside the pod.
+extraContainers: []
+