diff --git a/manifests/jellyfin.yaml b/manifests/jellyfin.yaml new file mode 100644 index 0000000..aa11e0e --- /dev/null +++ b/manifests/jellyfin.yaml @@ -0,0 +1,147 @@ +# Jellyfin — media server +# Apply: kubectl apply -f manifests/jellyfin.yaml +apiVersion: v1 +kind: Namespace +metadata: + name: jellyfin +--- +# PV for media — NFS mount from Debian +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-media-pv +spec: + capacity: + storage: 10Ti + accessModes: + - ReadOnlyMany + persistentVolumeReclaimPolicy: Retain + nfs: + server: 192.168.7.183 + path: /mnt/storage + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - minisforum +--- +# PVC for media +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 +--- +# PVC for Jellyfin config — local storage on Minisforum +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:latest + ports: + - containerPort: 8096 + env: + - name: JELLYFIN_PublishedServerUrl + value: https://jellyfin.home.arpa + volumeMounts: + - name: config + mountPath: /config + - name: media + mountPath: /media + readOnly: true + volumes: + - name: config + persistentVolumeClaim: + claimName: jellyfin-config + - name: media + persistentVolumeClaim: + claimName: jellyfin-media +--- +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 \ No newline at end of file diff --git a/values/pihole.yaml b/values/pihole.yaml index 371291c..6656112 100644 --- a/values/pihole.yaml +++ b/values/pihole.yaml @@ -73,4 +73,5 @@ dnsmasq: - address=/pihole.home.arpa/192.168.7.77 - address=/home.arpa/192.168.7.77 - address=/nik4nao.home.arpa/192.168.7.183 - - address=/dashy.home.arpa/192.168.7.77 \ No newline at end of file + - address=/dashy.home.arpa/192.168.7.77 + - address=/jellyfin.home.arpa/192.168.7.77 \ No newline at end of file