feat: Add holyarrs and use OIDC for jellyfin

This commit is contained in:
2026-11-10 20:50:59 +05:30
parent e22907125d
commit 9cd2d4e17c
16 changed files with 382 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: holyarrs
namespace: holyarrs
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: holyarrs
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/name: holyarrs
spec:
containers:
- env:
- name: TZ
value: Etc/UTC
- name: HOLYARRS_ALLOWED_HOSTS
value: holyarrs.whyredfire.dev
# Traefik's pods
- name: HOLYARRS_TRUSTED_PROXIES
value: 10.42.0.0/16
image: holyarrs/holyarrs:1.0.9@sha256:3d941aa8a78d4474cc016a0d994b2531aa8692015aaad487cbdee136e8dd4226
livenessProbe:
httpGet:
path: /healthz
port: http
initialDelaySeconds: 10
periodSeconds: 30
name: holyarrs
ports:
- containerPort: 6262
name: http
readinessProbe:
httpGet:
path: /healthz
port: http
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 50m
memory: 192Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
volumeMounts:
- mountPath: /config
name: config
# Same path as Jellyfin; one mount so imports hardlink instead of copy
- mountPath: /media
name: media
# Owner of /srv/media, same as qBittorrent
securityContext:
fsGroup: 1000
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
seccompProfile:
type: RuntimeDefault
volumes:
- name: config
persistentVolumeClaim:
claimName: holyarrs-config
- hostPath:
path: /srv/media
name: media
+23
View File
@@ -0,0 +1,23 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
annotations:
argocd.argoproj.io/sync-wave: "2"
name: holyarrs
namespace: holyarrs
spec:
hostnames:
- holyarrs.whyredfire.dev
parentRefs:
- kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
rules:
- backendRefs:
- name: holyarrs
port: 6262
matches:
- path:
type: PathPrefix
value: /
+8
View File
@@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- pvc.yaml
- deployment.yaml
- service.yaml
- httproute.yaml
- networkpolicy.yaml
+62
View File
@@ -0,0 +1,62 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: holyarrs
namespace: holyarrs
spec:
# Metadata and indexers are on the internet; in the cluster it only talks
# to Jellyfin and qBittorrent
egress:
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
- ports:
- port: 8096
protocol: TCP
to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: jellyfin
podSelector:
matchLabels:
app.kubernetes.io/name: jellyfin
- ports:
- port: 8080
protocol: TCP
to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: qbit
podSelector:
matchLabels:
app.kubernetes.io/name: qbittorrent
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: traefik
ports:
- port: 6262
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: holyarrs
policyTypes:
- Ingress
- Egress
+11
View File
@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: holyarrs-config
namespace: holyarrs
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
+12
View File
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: holyarrs
namespace: holyarrs
spec:
ports:
- name: http
port: 6262
targetPort: http
selector:
app.kubernetes.io/name: holyarrs