add media services

This commit is contained in:
2025-03-19 20:00:55 +01:00
parent 923cc6dd52
commit ce802a4891
25 changed files with 523 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- shared-downloads-pvc.yaml
- radarr-config-pvc.yaml
- sonarr-config-pvc.yaml
- sonarr-deploy.yaml
- radarr-deploy.yaml
- sonarr-svc.yaml
- radarr-svc.yaml
- sonarr-ingress.yaml
- radarr-ingress.yaml

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: jellyfin

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-config
namespace: jellyfin
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 5Gi

View File

@@ -0,0 +1,45 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: radarr
namespace: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: radarr
template:
metadata:
labels:
app: radarr
spec:
containers:
- name: radarr
image: lscr.io/linuxserver/radarr:latest
ports:
- containerPort: 7878
env:
- name: PUID
value: "0"
- name: PGID
value: "0"
- name: TZ
value: Europe/Rome
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /movies
subPath: movies
- name: downloads
mountPath: /downloads
volumes:
- name: config
persistentVolumeClaim:
claimName: radarr-config
- name: media
persistentVolumeClaim:
claimName: media-rwx-pvc
- name: downloads
persistentVolumeClaim:
claimName: deluge-downloads

View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: radarr-ingress
namespace: jellyfin
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- radarr.beatrice.wtf
secretName: radarr-tls
rules:
- host: radarr.beatrice.wtf
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: radarr
port:
number: 80

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: radarr
namespace: jellyfin
spec:
selector:
app: radarr
ports:
- protocol: TCP
port: 80
targetPort: 7878

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deluge-downloads
namespace: jellyfin
spec:
accessModes:
- ReadWriteMany
storageClassName: longhorn
resources:
requests:
storage: 100Gi

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-config
namespace: jellyfin
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 5Gi

View File

@@ -0,0 +1,48 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarr
namespace: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: sonarr
template:
metadata:
labels:
app: sonarr
spec:
containers:
- name: sonarr
image: lscr.io/linuxserver/sonarr:latest
ports:
- containerPort: 8989
env:
- name: PUID
value: "0"
- name: PGID
value: "0"
- name: TZ
value: Europe/Rome
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /tv
subPath: series
- name: media
mountPath: /anime
subPath: anime
- name: downloads
mountPath: /downloads
volumes:
- name: config
persistentVolumeClaim:
claimName: sonarr-config
- name: media
persistentVolumeClaim:
claimName: media-rwx-pvc
- name: downloads
persistentVolumeClaim:
claimName: deluge-downloads

View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarr-ingress
namespace: jellyfin
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- sonarr.beatrice.wtf
secretName: sonarr-tls
rules:
- host: sonarr.beatrice.wtf
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarr
port:
number: 80

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: sonarr
namespace: jellyfin
spec:
selector:
app: sonarr
ports:
- protocol: TCP
port: 80
targetPort: 8989

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deluge-config
namespace: jellyfin
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 5Gi

View File

@@ -0,0 +1,48 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: deluge
namespace: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: deluge
template:
metadata:
labels:
app: deluge
spec:
containers:
- name: deluge
image: lscr.io/linuxserver/deluge:latest
ports:
- containerPort: 8112
protocol: TCP
- containerPort: 6881
protocol: TCP
- containerPort: 6881
protocol: UDP
- containerPort: 58846
protocol: TCP
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: Etc/UTC
- name: DELUGE_LOGLEVEL
value: "error"
volumeMounts:
- name: config
mountPath: /config
- name: downloads
mountPath: /downloads
volumes:
- name: config
persistentVolumeClaim:
claimName: deluge-config
- name: downloads
persistentVolumeClaim:
claimName: deluge-downloads

View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: deluge-ingress
namespace: jellyfin
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- torrent.beatrice.wtf
secretName: deluge-tls
rules:
- host: torrent.beatrice.wtf
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: deluge
port:
number: 80

View File

@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
name: deluge
namespace: jellyfin
spec:
selector:
app: deluge
ports:
- name: web
protocol: TCP
port: 80
targetPort: 8112
- name: torrent-tcp
protocol: TCP
port: 6881
targetPort: 6881
- name: torrent-udp
protocol: UDP
port: 6881
targetPort: 6881
- name: daemon
protocol: TCP
port: 58846
targetPort: 58846

View File

@@ -0,0 +1,30 @@
# Flaresolverr Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaresolverr
namespace: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: flaresolverr
template:
metadata:
labels:
app: flaresolverr
spec:
containers:
- name: flaresolverr
image: ghcr.io/flaresolverr/flaresolverr:latest
ports:
- containerPort: 8191
env:
- name: LOG_LEVEL
value: "info"
- name: LOG_HTML
value: "false"
- name: CAPTCHA_SOLVER
value: "none"
- name: TZ
value: "Europe/Rome"

View File

@@ -0,0 +1,25 @@
# Optional Flaresolverr Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: flaresolverr-ingress
namespace: jellyfin
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- flaresolverr.beatrice.wtf
secretName: flaresolverr-tls
rules:
- host: flaresolverr.beatrice.wtf
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: flaresolverr
port:
number: 80

View File

@@ -0,0 +1,14 @@
# Flaresolverr Service
apiVersion: v1
kind: Service
metadata:
name: flaresolverr
namespace: jellyfin
spec:
selector:
app: flaresolverr
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8191

View File

@@ -0,0 +1,13 @@
# PVC for Jackett "blackhole" (downloads) folder
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jackett-blackhole
namespace: jellyfin
spec:
accessModes:
- ReadWriteMany
storageClassName: longhorn
resources:
requests:
storage: 10Gi

View File

@@ -0,0 +1,13 @@
# PVC for Jackett configuration
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jackett-config
namespace: jellyfin
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 10Gi

View File

@@ -0,0 +1,44 @@
# Jackett Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: jackett
namespace: jellyfin
spec:
replicas: 1
selector:
matchLabels:
app: jackett
template:
metadata:
labels:
app: jackett
spec:
containers:
- name: jackett
image: lscr.io/linuxserver/jackett:latest
ports:
- containerPort: 9117
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "Etc/UTC"
- name: AUTO_UPDATE
value: "true"
- name: RUN_OPTS
value: ""
volumeMounts:
- name: config
mountPath: /config
- name: blackhole
mountPath: /downloads
volumes:
- name: config
persistentVolumeClaim:
claimName: jackett-config
- name: blackhole
persistentVolumeClaim:
claimName: jackett-blackhole

View File

@@ -0,0 +1,25 @@
# Optional Jackett Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jackett-ingress
namespace: jellyfin
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- jackett.beatrice.wtf
secretName: jackett-tls
rules:
- host: jackett.beatrice.wtf
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jackett
port:
number: 80

View File

@@ -0,0 +1,14 @@
# Jackett Service
apiVersion: v1
kind: Service
metadata:
name: jackett
namespace: jellyfin
spec:
selector:
app: jackett
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9117

View File

@@ -0,0 +1,13 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- jackett-blackhole-pvc.yaml
- jackett-config-pvc.yaml
- jackett-deploy.yaml
- jackett-svc.yaml
- jackett-ingress.yaml
- flaresolverr-deploy.yaml
- flaresolverr-svc.yaml
- flaresolverr-ingress.yaml

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: jellyfin