Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ With default settings, your applications will run in these paths:
| Jackett | http://k8s-mediaserver.k8s.test/jackett |
| Prowlarr | http://k8s-mediaserver.k8s.test/prowlarr |
| Jellyfin | http://k8s-jelly.k8s.test/ |
| Overseerr | http://k8s-seerr.k8s.test/ |
| PLEX | http://k8s-plex.k8s.test/ |

3. (Optional) Use custom values:
Expand Down Expand Up @@ -125,6 +126,7 @@ letting some customization to fit the resource inside your cluster.
| general.ingress_host | The hostname to use in ingress definition, this will be the hostname where the applications will be exposed | k8s-mediaserver.k8s.test |
| general.plex_ingress_host | The hostname to use for **PLEX** as it must be exposed on a / dedicated path | k8s-plex.k8s.test |
| general.jellyfin_ingress_host | The hostname to use for **JellyFin** as it must be exposed on a / dedicated path | k8s-jelly.k8s.test |
| general.overseerr_ingress_host | The hostname to use for **Overseerr** as it must be exposed on a / dedicated path | k8s-seerr.k8s.test |
| general.image_tag | The name of the image tag (arm32v7-latest, arm64v8-latest, development) | latest |
| general.pgid | The GID for the process | 1000 |
| general.puid | The UID for the process | 1000 |
Expand Down Expand Up @@ -278,6 +280,10 @@ letting some customization to fit the resource inside your cluster.
| prowlarr.resources | Limits and Requests for the container | {} |
| prowlarr.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} |

### Overseerr

Per others, see example `helm-charts/k8s-mediaserver/values.yaml`

### Transmission

| Config path | Meaning | Default |
Expand Down
168 changes: 168 additions & 0 deletions helm-charts/k8s-mediaserver/templates/overseerr-resources.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
{{ if .Values.overseerr.enabled }}
---
## CONFIG
apiVersion: v1
kind: ConfigMap
metadata:
name: overseerr-config
data:
PGID: "{{ .Values.general.pgid }}"
PUID: "{{ .Values.general.puid }}"
---
## DEPLOYMENT
apiVersion: apps/v1
kind: Deployment
metadata:
name: overseerr
labels:
{{- include "k8s-mediaserver.labels" . | nindent 4 }}
spec:
strategy:
type: Recreate
replicas: 1
selector:
matchLabels:
{{- include "k8s-mediaserver.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "k8s-mediaserver.selectorLabels" . | nindent 8 }}
app: overseerr
spec:
containers:
- name: overseerr
envFrom:
- configMapRef:
name: overseerr-config
image: "{{ .Values.overseerr.container.image }}:{{ .Values.overseerr.container.tag | default .Values.general.image_tag }}"
imagePullPolicy: Always
ports:
- name: overseerr-port
containerPort: {{ .Values.overseerr.container.port }}
protocol: TCP
volumeMounts:
{{- if .Values.overseerr.volume }}
- name: {{ .Values.overseerr.volume.name }}
mountPath: /config
{{- else }}
- name: mediaserver-volume
mountPath: "/config"
subPath: "{{ .Values.general.storage.subPaths.config }}/overseerr"
{{- end }}
{{- with .Values.overseerr.resources }}
resources:
{{- toYaml . | nindent 12 }}
{{- end }}
volumes:
{{- if not .Values.general.storage.customVolume }}
- name: mediaserver-volume
persistentVolumeClaim:
claimName: {{ .Values.general.storage.pvcName }}
{{- else }}
- name: mediaserver-volume
{{- toYaml .Values.general.storage.volumes | nindent 10 }}
{{- end }}
{{- if .Values.overseerr.volume }}
- name: {{ .Values.overseerr.volume.name }}
persistentVolumeClaim:
claimName: {{ .Values.overseerr.volume.name }}
{{- end }}
{{- with merge .Values.overseerr.container.nodeSelector .Values.general.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- if eq .Values.general.podDistribution "cluster" }}
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/instance
operator: In
values:
- {{ .Release.Name }}
topologyKey: "kubernetes.io/hostname"
weight: 100
{{- else if eq .Values.general.podDistribution "spread" }}
topologySpreadConstraints:
- maxSkew: 1
topologyKey: "kubernetes.io/hostname"
whenUnsatisfiable: "ScheduleAnyway"
labelSelector:
matchLabels:
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
---
## SERVICE
apiVersion: v1
kind: Service
metadata:
name: overseerr
labels:
{{- include "k8s-mediaserver.labels" . | nindent 4 }}
spec:
type: {{ .Values.overseerr.service.type }}
ports:
- port: {{ .Values.overseerr.service.port }}
targetPort: {{ .Values.overseerr.container.port }}
protocol: TCP
name: overseerr-port
selector:
app: overseerr
{{ if .Values.overseerr.service.extraLBService }}
---
apiVersion: v1
kind: Service
metadata:
name: overseerr-lb
{{- with .Values.overseerr.service.extraLBAnnotations }}
annotations:
{{- . | toYaml | nindent 4 }}
{{- end }}
labels:
{{- include "k8s-mediaserver.labels" . | nindent 4 }}
spec:
type: LoadBalancer
ports:
- port: {{ .Values.overseerr.service.port }}
targetPort: {{ .Values.overseerr.container.port }}
protocol: TCP
name: overseerr-port
selector:
app: overseerr
{{ end }}
---
## INGRESS
{{ if .Values.overseerr.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: overseerr
labels:
{{- include "k8s-mediaserver.labels" . | nindent 4 }}
{{- with .Values.overseerr.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if .Values.overseerr.ingress.tls.enabled }}
tls:
- hosts:
- {{ .Values.general.overseerr_ingress_host | quote }}
secretName: {{ .Values.overseerr.ingress.tls.secretName }}
{{ end }}
ingressClassName: {{ .Values.general.ingress.ingressClassName }}
rules:
- host: {{ .Values.general.overseerr_ingress_host | quote }}
http:
paths:
- path: {{ .Values.overseerr.ingress.path }}
pathType: Prefix
backend:
service:
name: overseerr
port:
number: {{ .Values.overseerr.service.port }}
{{ end }}
{{ end }}
33 changes: 33 additions & 0 deletions helm-charts/k8s-mediaserver/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ general:
ingress_host: k8s-mediaserver.k8s.test
plex_ingress_host: k8s-plex.k8s.test
jellyfin_ingress_host: k8s-jelly.k8s.test
overseer_ingress_host: k8s-seerr.k8s.test
image_tag: latest
podDistribution: cluster # can be "spread" or "cluster"
#UID to run the process with
Expand Down Expand Up @@ -244,6 +245,38 @@ prowlarr:
# storage: 5Gi
# selector: {}

overseerr:
enabled: false
container:
image: docker.io/linuxserver/overseerr
tag: latest
nodeSelector: {}
port: 5055
service:
type: ClusterIP
port: 5055
nodePort:
extraLBService: false
extraLBAnnotations: {}
ingress:
enabled: true
annotations: {}
# overseerr doesn't support a base url and must run at /
# set general.overseer_ingress_host above
path: /
tls:
enabled: false
secretName: ""
resources: {}
volume: {}
# name: pvc-overseerr-config
# storageClassName: longhorn
# annotations: {}
# labels: {}
# accessModes: ReadWriteOnce
# storage: 5Gi
# selector: {}

plex:
enabled: true
claim: "CHANGEME"
Expand Down