initial commit

This commit is contained in:
Derek Slenk 2025-07-13 01:45:30 -04:00
commit af48674030
12 changed files with 684 additions and 0 deletions

18
dash-admin.yaml Normal file
View file

@ -0,0 +1,18 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard

View file

@ -0,0 +1,21 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard-ingress
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: nginx
rules:
- host: k8s-dashboard.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443

20
longhorn-ingress.yaml Normal file
View file

@ -0,0 +1,20 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: longhorn-ingress
namespace: longhorn-system
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: longhorn.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: longhorn-frontend
port:
number: 80

17
metallb-config.yaml Normal file
View file

@ -0,0 +1,17 @@
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default-pool
namespace: metallb-system
spec:
addresses:
- 192.168.15.200-192.168.15.210
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: default
namespace: metallb-system
spec:
ipAddressPools:
- default-pool

32
nfs-storage-classes.yaml Normal file
View file

@ -0,0 +1,32 @@
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-downloads
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.12.16
share: /Volume2/downloads
reclaimPolicy: Retain
volumeBindingMode: Immediate
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-movies
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.12.16
share: /Volume2/movies
reclaimPolicy: Retain
volumeBindingMode: Immediate
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-tv
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.12.16
share: /Volume2/tv
reclaimPolicy: Retain
volumeBindingMode: Immediate

30
nfs-test.yaml Normal file
View file

@ -0,0 +1,30 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-downloads-test
namespace: default
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-downloads
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nfs-test-pod
namespace: default
spec:
containers:
- name: test
image: busybox:latest
command: ['sh', '-c', 'echo "NFS test successful" > /mnt/test.txt && cat /mnt/test.txt && sleep 3600']
volumeMounts:
- name: nfs-storage
mountPath: /mnt
volumes:
- name: nfs-storage
persistentVolumeClaim:
claimName: nfs-downloads-test

86
overseerr-deployment.yaml Normal file
View file

@ -0,0 +1,86 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: overseerr
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: overseerr
template:
metadata:
labels:
app: overseerr
spec:
containers:
- name: overseerr
image: lscr.io/linuxserver/overseerr:latest
ports:
- containerPort: 5055
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
volumeMounts:
- name: config
mountPath: /config
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
volumes:
- name: config
persistentVolumeClaim:
claimName: overseerr-config
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: overseerr-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
name: overseerr
namespace: media
spec:
selector:
app: overseerr
ports:
- port: 5055
targetPort: 5055
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: overseerr-ingress
namespace: media
spec:
ingressClassName: nginx
rules:
- host: overseerr.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: overseerr
port:
number: 5055

86
prowlarr-deployment.yaml Normal file
View file

@ -0,0 +1,86 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: prowlarr
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: prowlarr
template:
metadata:
labels:
app: prowlarr
spec:
containers:
- name: prowlarr
image: lscr.io/linuxserver/prowlarr:latest
ports:
- containerPort: 9696
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
volumeMounts:
- name: config
mountPath: /config
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
volumes:
- name: config
persistentVolumeClaim:
claimName: prowlarr-config
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prowlarr-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
name: prowlarr
namespace: media
spec:
selector:
app: prowlarr
ports:
- port: 9696
targetPort: 9696
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prowlarr-ingress
namespace: media
spec:
ingressClassName: nginx
rules:
- host: prowlarr.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prowlarr
port:
number: 9696

98
radarr-deployment.yaml Normal file
View file

@ -0,0 +1,98 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: radarr
namespace: media
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: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
volumeMounts:
- name: config
mountPath: /config
- name: downloads
mountPath: /downloads
- name: movies
mountPath: /movies
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
volumes:
- name: config
persistentVolumeClaim:
claimName: radarr-config
- name: downloads
nfs:
server: 192.168.12.16
path: /Volume2/downloads
- name: movies
nfs:
server: 192.168.12.16
path: /Volume2/movies
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: radarr-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: radarr
namespace: media
spec:
selector:
app: radarr
ports:
- port: 7878
targetPort: 7878
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: radarr-ingress
namespace: media
spec:
ingressClassName: nginx
rules:
- host: radarr.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: radarr
port:
number: 7878

92
sabnzbd-deployment.yaml Normal file
View file

@ -0,0 +1,92 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: sabnzbd
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: sabnzbd
template:
metadata:
labels:
app: sabnzbd
spec:
containers:
- name: sabnzbd
image: lscr.io/linuxserver/sabnzbd:latest
ports:
- containerPort: 8080
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
volumeMounts:
- name: config
mountPath: /config
- name: downloads
mountPath: /downloads
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
volumes:
- name: config
persistentVolumeClaim:
claimName: sabnzbd-config
- name: downloads
nfs:
server: 192.168.12.16
path: /Volume2/downloads
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sabnzbd-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: sabnzbd
namespace: media
spec:
selector:
app: sabnzbd
ports:
- port: 8080
targetPort: 8080
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sabnzbd-ingress
namespace: media
spec:
ingressClassName: nginx
rules:
- host: sabnzbd.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sabnzbd
port:
number: 8080

98
sonarr-deployment.yaml Normal file
View file

@ -0,0 +1,98 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarr
namespace: media
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: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
volumeMounts:
- name: config
mountPath: /config
- name: downloads
mountPath: /downloads
- name: tv
mountPath: /tv
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
volumes:
- name: config
persistentVolumeClaim:
claimName: sonarr-config
- name: downloads
nfs:
server: 192.168.12.16
path: /Volume2/downloads
- name: tv
nfs:
server: 192.168.12.16
path: /Volume2/tv
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonarr-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: sonarr
namespace: media
spec:
selector:
app: sonarr
ports:
- port: 8989
targetPort: 8989
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarr-ingress
namespace: media
spec:
ingressClassName: nginx
rules:
- host: sonarr.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarr
port:
number: 8989

86
tautulli-deployment.yaml Normal file
View file

@ -0,0 +1,86 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: tautulli
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: tautulli
template:
metadata:
labels:
app: tautulli
spec:
containers:
- name: tautulli
image: lscr.io/linuxserver/tautulli:latest
ports:
- containerPort: 8181
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/New_York"
volumeMounts:
- name: config
mountPath: /config
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
volumes:
- name: config
persistentVolumeClaim:
claimName: tautulli-config
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: tautulli-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
name: tautulli
namespace: media
spec:
selector:
app: tautulli
ports:
- port: 8181
targetPort: 8181
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tautulli-ingress
namespace: media
spec:
ingressClassName: nginx
rules:
- host: tautulli.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tautulli
port:
number: 8181