From af48674030849f2ba465f6ef1fc87f43daf454ee Mon Sep 17 00:00:00 2001 From: Derek Slenk Date: Sun, 13 Jul 2025 01:45:30 -0400 Subject: [PATCH] initial commit --- dash-admin.yaml | 18 +++++++ k8s-dashboard-ingress.yaml | 21 ++++++++ longhorn-ingress.yaml | 20 ++++++++ metallb-config.yaml | 17 +++++++ nfs-storage-classes.yaml | 32 +++++++++++++ nfs-test.yaml | 30 ++++++++++++ overseerr-deployment.yaml | 86 +++++++++++++++++++++++++++++++++ prowlarr-deployment.yaml | 86 +++++++++++++++++++++++++++++++++ radarr-deployment.yaml | 98 ++++++++++++++++++++++++++++++++++++++ sabnzbd-deployment.yaml | 92 +++++++++++++++++++++++++++++++++++ sonarr-deployment.yaml | 98 ++++++++++++++++++++++++++++++++++++++ tautulli-deployment.yaml | 86 +++++++++++++++++++++++++++++++++ 12 files changed, 684 insertions(+) create mode 100644 dash-admin.yaml create mode 100644 k8s-dashboard-ingress.yaml create mode 100644 longhorn-ingress.yaml create mode 100644 metallb-config.yaml create mode 100644 nfs-storage-classes.yaml create mode 100644 nfs-test.yaml create mode 100644 overseerr-deployment.yaml create mode 100644 prowlarr-deployment.yaml create mode 100644 radarr-deployment.yaml create mode 100644 sabnzbd-deployment.yaml create mode 100644 sonarr-deployment.yaml create mode 100644 tautulli-deployment.yaml diff --git a/dash-admin.yaml b/dash-admin.yaml new file mode 100644 index 0000000..0485553 --- /dev/null +++ b/dash-admin.yaml @@ -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 \ No newline at end of file diff --git a/k8s-dashboard-ingress.yaml b/k8s-dashboard-ingress.yaml new file mode 100644 index 0000000..da16791 --- /dev/null +++ b/k8s-dashboard-ingress.yaml @@ -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 \ No newline at end of file diff --git a/longhorn-ingress.yaml b/longhorn-ingress.yaml new file mode 100644 index 0000000..7e7ead1 --- /dev/null +++ b/longhorn-ingress.yaml @@ -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 \ No newline at end of file diff --git a/metallb-config.yaml b/metallb-config.yaml new file mode 100644 index 0000000..3a1cd5f --- /dev/null +++ b/metallb-config.yaml @@ -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 \ No newline at end of file diff --git a/nfs-storage-classes.yaml b/nfs-storage-classes.yaml new file mode 100644 index 0000000..9328fd5 --- /dev/null +++ b/nfs-storage-classes.yaml @@ -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 \ No newline at end of file diff --git a/nfs-test.yaml b/nfs-test.yaml new file mode 100644 index 0000000..977d004 --- /dev/null +++ b/nfs-test.yaml @@ -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 \ No newline at end of file diff --git a/overseerr-deployment.yaml b/overseerr-deployment.yaml new file mode 100644 index 0000000..cf5d684 --- /dev/null +++ b/overseerr-deployment.yaml @@ -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 \ No newline at end of file diff --git a/prowlarr-deployment.yaml b/prowlarr-deployment.yaml new file mode 100644 index 0000000..c579b9c --- /dev/null +++ b/prowlarr-deployment.yaml @@ -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 \ No newline at end of file diff --git a/radarr-deployment.yaml b/radarr-deployment.yaml new file mode 100644 index 0000000..2fa9213 --- /dev/null +++ b/radarr-deployment.yaml @@ -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 \ No newline at end of file diff --git a/sabnzbd-deployment.yaml b/sabnzbd-deployment.yaml new file mode 100644 index 0000000..9746382 --- /dev/null +++ b/sabnzbd-deployment.yaml @@ -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 \ No newline at end of file diff --git a/sonarr-deployment.yaml b/sonarr-deployment.yaml new file mode 100644 index 0000000..f531af0 --- /dev/null +++ b/sonarr-deployment.yaml @@ -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 \ No newline at end of file diff --git a/tautulli-deployment.yaml b/tautulli-deployment.yaml new file mode 100644 index 0000000..91a1431 --- /dev/null +++ b/tautulli-deployment.yaml @@ -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 \ No newline at end of file