diff --git a/servarr-system/servarr.yaml b/servarr-system/servarr.yaml index a8a28eb..5f24bd8 100644 --- a/servarr-system/servarr.yaml +++ b/servarr-system/servarr.yaml @@ -3,313 +3,17 @@ apiVersion: v1 kind: Namespace metadata: name: servarr-system - labels: - app.kubernetes.io/managed-by: argocd - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: prowlarr-config - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: prowlarr -data: - prowlarr-config.json: | - {"apiKey":"c04914c6bfad445a3edc23e5edbca4d1","applications":[{"apiKey":"2bac5d00dca43258313c734821a15c4c","baseUrl":"http://sonarr.servarr-system.svc:8989","name":"Sonarr","prowlarrUrl":"http://prowlarr.servarr-system.svc:9696","syncLevel":"fullSync"},{"apiKey":"4fac7d10eca54269424d835a2edc15d2","baseUrl":"http://radarr.servarr-system.svc:7878","name":"Radarr","prowlarrUrl":"http://prowlarr.servarr-system.svc:9696","syncLevel":"fullSync"}],"indexers":[{"enable":true,"name":"nCore","priority":25}]} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: qbittorrent-config - namespace: servarr-system - labels: - app.kubernetes.io/instance: preparr - app.kubernetes.io/name: preparr - app: qbittorrent -data: - qbittorrent-config.json: | - {} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: radarr-config - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: radarr -data: - radarr-config.json: | - {"apiKey":"4fac7d10eca54269424d835a2edc15d2","downloadClients":[{"configContract":"QBittorrentSettings","enable":true,"fields":[{"name":"host","value":"__QBIT_HOST__"},{"name":"port","value":8080},{"name":"username","value":"__QBIT_USER__"},{"name":"password","value":"__QBIT_PASS__"},{"name":"category","value":"movies"}],"implementation":"QBittorrent","implementationName":"qBittorrent","name":"qBittorrent","priority":1}],"prowlarrSync":true,"qualityProfiles":[{"cutoff":1080,"items":[{"allowed":true,"quality":{"id":1,"name":"Bluray-1080p"}},{"allowed":true,"quality":{"id":2,"name":"WEBDL-1080p"}}],"name":"HD - 1080p","upgradeAllowed":true}],"rootFolders":[{"accessible":true,"path":"/movies"}]} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: sonarr-config - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: sonarr -data: - sonarr-config.json: | - {"apiKey":"2bac5d00dca43258313c734821a15c4c","downloadClients":[{"configContract":"QBittorrentSettings","enable":true,"fields":[{"name":"host","value":"__QBIT_HOST__"},{"name":"port","value":8080},{"name":"username","value":"__QBIT_USER__"},{"name":"password","value":"__QBIT_PASS__"},{"name":"category","value":"tv"}],"implementation":"QBittorrent","implementationName":"qBittorrent","name":"qBittorrent","priority":1}],"prowlarrSync":true,"qualityProfiles":[{"cutoff":1080,"items":[{"allowed":true,"quality":{"id":1,"name":"HDTV-1080p"}},{"allowed":true,"quality":{"id":2,"name":"WEBDL-1080p"}}],"name":"HD - 1080p","upgradeAllowed":true}],"rootFolders":[{"accessible":true,"path":"/tv"}]} ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: radarr-config-pvc - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: radarr -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 3Gi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: sonarr-config-pvc - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: sonarr -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: qbittorrent-config-pvc - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: qbittorrent -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: prowlarr-config-pvc - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: prowlarr -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: postgres-pvc - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: postgres -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 8Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: postgres - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: postgres -spec: - type: ClusterIP - selector: - app: postgres - ports: - - port: 5432 - targetPort: 5432 ---- -apiVersion: v1 -kind: Service -metadata: - name: prowlarr - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: prowlarr - annotations: - external-dns.alpha.kubernetes.io/hostname: prowlarr.home -spec: - type: LoadBalancer - loadBalancerIP: 192.168.0.201 - selector: - app: prowlarr - ports: - - name: webui - port: 9696 - targetPort: 9696 - protocol: TCP ---- -apiVersion: v1 -kind: Service -metadata: - name: qbittorrent - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: qbittorrent - annotations: - external-dns.alpha.kubernetes.io/hostname: qbittorrent.home -spec: - type: LoadBalancer - loadBalancerIP: 192.168.0.202 - selector: - app: qbittorrent - ports: - - name: webui - port: 8080 - targetPort: 8080 - - name: bittorrent - port: 6881 - targetPort: 6881 ---- -apiVersion: v1 -kind: Service -metadata: - name: radarr - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: radarr - annotations: - external-dns.alpha.kubernetes.io/hostname: radarr.home -spec: - type: ClusterIP - selector: - app: radarr - ports: - - name: webui - port: 7878 - targetPort: 7878 - protocol: TCP ---- -apiVersion: v1 -kind: Service -metadata: - name: sonarr - namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: sonarr - annotations: - external-dns.alpha.kubernetes.io/hostname: sonarr.home -spec: - type: ClusterIP - selector: - app: sonarr - ports: - - name: webui - port: 8989 - targetPort: 8989 - protocol: TCP --- +# Prowlarr - Indexer Manager apiVersion: apps/v1 kind: Deployment metadata: - name: postgres - namespace: servarr-system labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: postgres -spec: - replicas: 1 - selector: - matchLabels: - app: postgres - template: - metadata: - labels: - app: postgres - spec: - containers: - - name: postgres - image: "postgres:16-alpine" - envFrom: - - secretRef: - name: postgres-credentials - ports: - - containerPort: 5432 - resources: - limits: - cpu: 500m - memory: 512Mi - requests: - cpu: 100m - memory: 256Mi - volumeMounts: - - name: postgres-data - mountPath: /var/lib/postgresql/data - subPath: data - readinessProbe: - exec: - command: - - pg_isready - - -U - - postgres - initialDelaySeconds: 5 - periodSeconds: 5 - volumes: - - name: postgres-data - persistentVolumeClaim: - claimName: postgres-pvc ---- -apiVersion: apps/v1 -kind: Deployment -metadata: + app: prowlarr + app.kubernetes.io/instance: servarr + app.kubernetes.io/name: prowlarr name: prowlarr namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: prowlarr spec: replicas: 1 selector: @@ -322,71 +26,26 @@ spec: labels: app: prowlarr spec: - securityContext: - fsGroup: 1000 - initContainers: - - name: preparr-init - image: ghcr.io/robbeverhelst/preparr:latest - imagePullPolicy: IfNotPresent - env: - - name: POSTGRES_HOST - value: "postgres" - - name: POSTGRES_PORT - value: "5432" - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_USER - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_PASSWORD - - name: POSTGRES_DB - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_DB - - name: SERVARR_URL - value: "http://prowlarr.servarr-system.svc:9696" - - name: SERVARR_TYPE - value: "prowlarr" - - name: SERVARR_ADMIN_USER - valueFrom: - secretKeyRef: - name: servarr-credentials - key: username - - name: SERVARR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: servarr-credentials - key: password - - name: SERVARR_API_KEY - valueFrom: - secretKeyRef: - name: servarr-api-keys - key: prowlarr - - name: CONFIG_PATH - value: "/tmp/config/prowlarr-config.json" - command: ["/bin/sh", "-c", "if [ ! -f /config/prowlarr-config.json ]; then cp /tmp/config/prowlarr-config.json /config/prowlarr-config.json; fi; bun run dist/index.js --init"] - volumeMounts: - - name: prowlarr-config-volume - mountPath: /config - - name: prowlarr-config-file - mountPath: /tmp/config containers: - name: prowlarr - image: "linuxserver/prowlarr:latest" + image: linuxserver/prowlarr:latest + imagePullPolicy: Always env: - name: PUID value: "1000" - name: PGID value: "1000" - name: TZ - value: "Europe/Budapest" + value: Europe/Budapest ports: - containerPort: 9696 + protocol: TCP + readinessProbe: + httpGet: + path: /ping + port: 9696 + initialDelaySeconds: 60 + periodSeconds: 10 resources: limits: cpu: 500m @@ -395,172 +54,25 @@ spec: cpu: 100m memory: 256Mi volumeMounts: - - name: prowlarr-config-volume + - name: config mountPath: /config - readinessProbe: - httpGet: - path: /ping - port: 9696 - initialDelaySeconds: 60 - periodSeconds: 10 + securityContext: + fsGroup: 1000 volumes: - - name: prowlarr-config-volume + - name: config persistentVolumeClaim: claimName: prowlarr-config-pvc - - name: prowlarr-config-file - configMap: - name: prowlarr-config - items: - - key: prowlarr-config.json - path: prowlarr-config.json --- +# Radarr - Movie Manager apiVersion: apps/v1 kind: Deployment metadata: - name: qbittorrent - namespace: servarr-system labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: qbittorrent -spec: - replicas: 1 - selector: - matchLabels: - app: qbittorrent - strategy: - type: Recreate - template: - metadata: - labels: - app: qbittorrent - spec: - initContainers: - - name: preparr-init - image: ghcr.io/robbeverhelst/preparr:latest - imagePullPolicy: IfNotPresent - securityContext: - runAsUser: 0 - runAsGroup: 0 - env: - - name: POSTGRES_HOST - value: "postgres" - - name: POSTGRES_PORT - value: "5432" - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_USER - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_PASSWORD - - name: POSTGRES_DB - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_DB - - name: SERVARR_TYPE - value: "qbittorrent" - - name: QBITTORRENT_USER - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-username - - name: QBITTORRENT_PASSWORD - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-password - - name: SERVARR_ADMIN_USER - valueFrom: - secretKeyRef: - name: servarr-credentials - key: username - - name: SERVARR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: servarr-credentials - key: password - - name: QBITTORRENT_URL - value: "http://qbittorrent.servarr-system.svc:8080" - - name: CONFIG_PATH - value: "/config/qbittorrent-config.json" - - name: QBITTORRENT_DOWNLOADS_PATH - value: "/downloads" - command: ["/bin/sh", "-c", "if [ ! -f /config/qbittorrent-config.json ]; then cp /tmp/config/qbittorrent-config.json /config/qbittorrent-config.json; fi; bun run dist/index.js --init"] - volumeMounts: - - name: qbittorrent-config-volume - mountPath: /config - - name: qbittorrent-config-file - mountPath: /tmp/config - containers: - - name: qbittorrent - image: "linuxserver/qbittorrent:latest" - env: - - name: PUID - value: "1000" - - name: PGID - value: "1000" - - name: TZ - value: "Europe/Budapest" - - name: WEBUI_PORT - value: "8080" - - name: CONFIG_PATH - value: "/config/qbittorrent-config.json" - ports: - - containerPort: 8080 - - containerPort: 6881 - resources: - limits: - cpu: 1000m - memory: 1Gi - requests: - cpu: 100m - memory: 256Mi - volumeMounts: - - name: qbittorrent-config-volume - mountPath: /config - - mountPath: /mnt/2_hdd - name: 2hdd - - mountPath: /mnt/1_hdd - name: 1hdd - readinessProbe: - httpGet: - path: / - port: 8080 - initialDelaySeconds: 30 - periodSeconds: 10 - volumes: - - name: qbittorrent-config-volume - persistentVolumeClaim: - claimName: qbittorrent-config-pvc - - name: qbittorrent-config-file - configMap: - name: qbittorrent-config - items: - - key: qbittorrent-config.json - path: qbittorrent-config.json - - hostPath: - path: /mnt/2_hdd - type: Directory - name: 2hdd - - hostPath: - path: /mnt/1_hdd - type: Directory - name: 1hdd ---- -apiVersion: apps/v1 -kind: Deployment -metadata: + app: radarr + app.kubernetes.io/instance: servarr + app.kubernetes.io/name: radarr name: radarr namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: radarr spec: replicas: 1 selector: @@ -573,104 +85,26 @@ spec: labels: app: radarr spec: - securityContext: - fsGroup: 1000 - initContainers: - - name: preparr-init - image: ghcr.io/robbeverhelst/preparr:latest - imagePullPolicy: IfNotPresent - env: - - name: POSTGRES_HOST - value: "postgres" - - name: POSTGRES_PORT - value: "5432" - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_USER - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_PASSWORD - - name: POSTGRES_DB - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_DB - - name: SERVARR_URL - value: "http://radarr.servarr-system.svc:7878" - - name: SERVARR_TYPE - value: "radarr" - - name: SERVARR_ADMIN_USER - valueFrom: - secretKeyRef: - name: servarr-credentials - key: username - - name: SERVARR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: servarr-credentials - key: password - - name: SERVARR_API_KEY - valueFrom: - secretKeyRef: - name: servarr-api-keys - key: radarr - - name: CONFIG_PATH - value: "/config/radarr-config.json" - - name: QBIT_HOST - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-host - - name: QBIT_USER - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-username - - name: QBIT_PASS - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-password - command: - - /bin/sh - - -c - - | - if [ ! -f /config/radarr-config.json ]; then - # Copy template and inject secrets - sed -e "s|__QBIT_HOST__|$QBIT_HOST|g" \ - -e "s|__QBIT_USER__|$QBIT_USER|g" \ - -e "s|__QBIT_PASS__|$QBIT_PASS|g" \ - /tmp/config/radarr-config.json > /config/radarr-config.json - fi - bun run dist/index.js --init - if [ -f /config/config.xml ]; then - sed -i 's|Forms|External|g' /config/config.xml - sed -i 's|Enabled|DisabledForLocalAddresses|g' /config/config.xml - echo "Patched config.xml for external authentication" - fi - volumeMounts: - - name: radarr-config-volume - mountPath: /config - - name: radarr-config-file - mountPath: /tmp/config - - mountPath: /mnt/2_hdd - name: 2hdd containers: - name: radarr - image: "linuxserver/radarr:latest" + image: linuxserver/radarr:latest + imagePullPolicy: Always env: - name: PUID value: "1000" - name: PGID value: "1000" - name: TZ - value: "Europe/Budapest" + value: Europe/Budapest ports: - containerPort: 7878 + protocol: TCP + readinessProbe: + httpGet: + path: /ping + port: 7878 + initialDelaySeconds: 60 + periodSeconds: 10 resources: limits: cpu: 500m @@ -679,41 +113,31 @@ spec: cpu: 100m memory: 256Mi volumeMounts: - - name: radarr-config-volume + - name: config mountPath: /config - - mountPath: /mnt/2_hdd - name: 2hdd - readinessProbe: - httpGet: - path: /ping - port: 7878 - initialDelaySeconds: 60 - periodSeconds: 10 + - name: movies + mountPath: /mnt/2_hdd + securityContext: + fsGroup: 1000 volumes: - - name: radarr-config-volume + - name: config persistentVolumeClaim: claimName: radarr-config-pvc - - name: radarr-config-file - configMap: - name: radarr-config - items: - - key: radarr-config.json - path: radarr-config.json - - hostPath: + - name: movies + hostPath: path: /mnt/2_hdd type: Directory - name: 2hdd --- -# Source: preparr/templates/sonarr.yaml +# Sonarr - TV Show Manager apiVersion: apps/v1 kind: Deployment metadata: + labels: + app: sonarr + app.kubernetes.io/instance: servarr + app.kubernetes.io/name: sonarr name: sonarr namespace: servarr-system - labels: - app.kubernetes.io/name: preparr - app.kubernetes.io/instance: preparr - app: sonarr spec: replicas: 1 selector: @@ -726,95 +150,9 @@ spec: labels: app: sonarr spec: - securityContext: - fsGroup: 1000 - initContainers: - - name: preparr-init - image: ghcr.io/robbeverhelst/preparr:latest - imagePullPolicy: IfNotPresent - env: - - name: POSTGRES_HOST - value: "postgres" - - name: POSTGRES_PORT - value: "5432" - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_USER - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_PASSWORD - - name: POSTGRES_DB - valueFrom: - secretKeyRef: - name: postgres-credentials - key: POSTGRES_DB - - name: SERVARR_URL - value: "http://sonarr.servarr-system.svc:8989" - - name: SERVARR_TYPE - value: "sonarr" - - name: SERVARR_ADMIN_USER - valueFrom: - secretKeyRef: - name: servarr-credentials - key: username - - name: SERVARR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: servarr-credentials - key: password - - name: SERVARR_API_KEY - valueFrom: - secretKeyRef: - name: servarr-api-keys - key: sonarr - - name: CONFIG_PATH - value: "/config/sonarr-config.json" - - name: QBIT_HOST - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-host - - name: QBIT_USER - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-username - - name: QBIT_PASS - valueFrom: - secretKeyRef: - name: download-client-credentials - key: qbittorrent-password - command: - - /bin/sh - - -c - - | - if [ ! -f /config/sonarr-config.json ]; then - # Copy template and inject secrets - sed -e "s|__QBIT_HOST__|$QBIT_HOST|g" \ - -e "s|__QBIT_USER__|$QBIT_USER|g" \ - -e "s|__QBIT_PASS__|$QBIT_PASS|g" \ - /tmp/config/sonarr-config.json > /config/sonarr-config.json - fi - bun run dist/index.js --init - if [ -f /config/config.xml ]; then - sed -i 's|Forms|External|g' /config/config.xml - sed -i 's|Enabled|DisabledForLocalAddresses|g' /config/config.xml - echo "Patched config.xml for external authentication" - fi - volumeMounts: - - name: sonarr-config-volume - mountPath: /config - - name: sonarr-config-file - mountPath: /tmp/config - - mountPath: /mnt/1_hdd - name: 1hdd containers: - name: sonarr - image: "linuxserver/sonarr:latest" + image: linuxserver/sonarr:latest imagePullPolicy: IfNotPresent env: - name: PUID @@ -822,11 +160,17 @@ spec: - name: PGID value: "1000" - name: TZ - value: "Europe/Budapest" + value: Europe/Budapest ports: - - name: webui - containerPort: 8989 + - containerPort: 8989 + name: webui protocol: TCP + readinessProbe: + httpGet: + path: /ping + port: 8989 + initialDelaySeconds: 60 + periodSeconds: 10 resources: limits: cpu: 500m @@ -835,87 +179,267 @@ spec: cpu: 100m memory: 256Mi volumeMounts: - - name: sonarr-config-volume + - name: config mountPath: /config - - mountPath: /mnt/1_hdd - name: 1hdd - readinessProbe: - httpGet: - path: /ping - port: 8989 - initialDelaySeconds: 60 - periodSeconds: 10 + - name: tv + mountPath: /mnt/1_hdd + securityContext: + fsGroup: 1000 volumes: - - name: sonarr-config-volume + - name: config persistentVolumeClaim: claimName: sonarr-config-pvc - - name: sonarr-config-file - configMap: - name: sonarr-config - items: - - key: sonarr-config.json - path: sonarr-config.json - - hostPath: + - name: tv + hostPath: path: /mnt/1_hdd type: Directory - name: 1hdd --- +# qBittorrent - Download Client +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: qbittorrent + app.kubernetes.io/instance: servarr + app.kubernetes.io/name: qbittorrent + name: qbittorrent + namespace: servarr-system +spec: + replicas: 1 + selector: + matchLabels: + app: qbittorrent + strategy: + type: Recreate + template: + metadata: + labels: + app: qbittorrent + spec: + containers: + - name: qbittorrent + image: linuxserver/qbittorrent:latest + imagePullPolicy: Always + env: + - name: PUID + value: "1000" + - name: PGID + value: "1000" + - name: TZ + value: Europe/Budapest + - name: WEBUI_PORT + value: "8080" + ports: + - containerPort: 8080 + protocol: TCP + - containerPort: 6881 + protocol: TCP + readinessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: + limits: + cpu: "1" + memory: 1Gi + requests: + cpu: 100m + memory: 256Mi + volumeMounts: + - name: config + mountPath: /config + - name: 2hdd + mountPath: /mnt/2_hdd + - name: 1hdd + mountPath: /mnt/1_hdd + volumes: + - name: config + persistentVolumeClaim: + claimName: qbittorrent-config-pvc + - name: 2hdd + hostPath: + path: /mnt/2_hdd + type: Directory + - name: 1hdd + hostPath: + path: /mnt/1_hdd + type: Directory +--- +# Services +apiVersion: v1 +kind: Service +metadata: + labels: + app: prowlarr + name: prowlarr + namespace: servarr-system +spec: + type: ClusterIP + ports: + - name: http + port: 9696 + protocol: TCP + targetPort: 9696 + selector: + app: prowlarr +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: radarr + name: radarr + namespace: servarr-system +spec: + type: ClusterIP + ports: + - name: http + port: 7878 + protocol: TCP + targetPort: 7878 + selector: + app: radarr +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: sonarr + name: sonarr + namespace: servarr-system +spec: + type: ClusterIP + ports: + - name: http + port: 8989 + protocol: TCP + targetPort: 8989 + selector: + app: sonarr +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: qbittorrent + name: qbittorrent + namespace: servarr-system +spec: + type: ClusterIP + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 8080 + - name: torrent + port: 6881 + protocol: TCP + targetPort: 6881 + selector: + app: qbittorrent +--- +# Ingresses with Authentik proxy auth apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod - external-dns.alpha.kubernetes.io/hostname: qbittorrent.home,qbittorrent.dooplex.hu - nginx.ingress.kubernetes.io/proxy-body-size: "0" - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/auth-url: "http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx" - nginx.ingress.kubernetes.io/auth-signin: "https://qbittorrent.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri" - nginx.ingress.kubernetes.io/auth-response-headers: "Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email" + external-dns.alpha.kubernetes.io/hostname: prowlarr.dooplex.hu,prowlarr.home + nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email + nginx.ingress.kubernetes.io/auth-signin: https://prowlarr.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri nginx.ingress.kubernetes.io/auth-snippet: | proxy_set_header X-Forwarded-Host $http_host; - name: qbittorrent + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/proxy-body-size: "0" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + name: prowlarr namespace: servarr-system spec: ingressClassName: nginx-internal rules: - - host: qbittorrent.dooplex.hu + - host: prowlarr.dooplex.hu http: paths: - backend: service: - name: qbittorrent + name: prowlarr port: - number: 8080 + number: 9696 path: / pathType: Prefix - - host: qbittorrent.home + - host: prowlarr.home http: paths: - backend: service: - name: qbittorrent + name: prowlarr port: - number: 8080 + number: 9696 path: / pathType: Prefix tls: - hosts: - - qbittorrent.dooplex.hu - secretName: qbittorrent-tls + - prowlarr.dooplex.hu + secretName: prowlarr-tls --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod - external-dns.alpha.kubernetes.io/hostname: sonarr.home,sonarr.dooplex.hu - nginx.ingress.kubernetes.io/proxy-body-size: "0" - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/auth-url: "http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx" - nginx.ingress.kubernetes.io/auth-signin: "https://sonarr.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri" - nginx.ingress.kubernetes.io/auth-response-headers: "Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email,Authorization" + external-dns.alpha.kubernetes.io/hostname: radarr.dooplex.hu,radarr.home + nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email + nginx.ingress.kubernetes.io/auth-signin: https://radarr.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri nginx.ingress.kubernetes.io/auth-snippet: | proxy_set_header X-Forwarded-Host $http_host; + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/proxy-body-size: "0" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + name: radarr + namespace: servarr-system +spec: + ingressClassName: nginx-internal + rules: + - host: radarr.dooplex.hu + http: + paths: + - backend: + service: + name: radarr + port: + number: 7878 + path: / + pathType: Prefix + - host: radarr.home + http: + paths: + - backend: + service: + name: radarr + port: + number: 7878 + path: / + pathType: Prefix + tls: + - hosts: + - radarr.dooplex.hu + secretName: radarr-tls +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + external-dns.alpha.kubernetes.io/hostname: sonarr.dooplex.hu,sonarr.home + nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email,Authorization + nginx.ingress.kubernetes.io/auth-signin: https://sonarr.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri + nginx.ingress.kubernetes.io/auth-snippet: | + proxy_set_header X-Forwarded-Host $http_host; + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/proxy-body-size: "0" + nginx.ingress.kubernetes.io/ssl-redirect: "true" name: sonarr namespace: servarr-system spec: @@ -951,52 +475,117 @@ kind: Ingress metadata: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod - external-dns.alpha.kubernetes.io/hostname: radarr.home,radarr.dooplex.hu - nginx.ingress.kubernetes.io/proxy-body-size: "0" - nginx.ingress.kubernetes.io/ssl-redirect: "true" - nginx.ingress.kubernetes.io/auth-url: "http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx" - nginx.ingress.kubernetes.io/auth-signin: "https://radarr.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri" - nginx.ingress.kubernetes.io/auth-response-headers: "Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email" + external-dns.alpha.kubernetes.io/hostname: qbittorrent.dooplex.hu,qbittorrent.home + nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email + nginx.ingress.kubernetes.io/auth-signin: https://qbittorrent.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri nginx.ingress.kubernetes.io/auth-snippet: | proxy_set_header X-Forwarded-Host $http_host; - name: radarr + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-arr-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/proxy-body-size: "0" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + name: qbittorrent namespace: servarr-system spec: ingressClassName: nginx-internal rules: - - host: radarr.dooplex.hu + - host: qbittorrent.dooplex.hu http: paths: - backend: service: - name: radarr + name: qbittorrent port: - number: 7878 + number: 8080 path: / pathType: Prefix - - host: radarr.home + - host: qbittorrent.home http: paths: - backend: service: - name: radarr + name: qbittorrent port: - number: 7878 + number: 8080 path: / pathType: Prefix tls: - hosts: - - radarr.dooplex.hu - secretName: radarr-tls + - qbittorrent.dooplex.hu + secretName: qbittorrent-tls --- +# PVCs for config (keep existing, add Prune=false to prevent deletion) apiVersion: v1 -kind: Service +kind: PersistentVolumeClaim metadata: - name: ak-outpost-arr-outpost + annotations: + argocd.argoproj.io/sync-options: Prune=false + labels: + app: prowlarr + recurring-job-group.longhorn.io/needbackup: enabled + recurring-job.longhorn.io/source: enabled + name: prowlarr-config-pvc namespace: servarr-system spec: - type: ExternalName - externalName: ak-outpost-arr-outpost.auth-system.svc.cluster.local - ports: - - port: 9000 + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: longhorn --- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + argocd.argoproj.io/sync-options: Prune=false + labels: + app: radarr + recurring-job-group.longhorn.io/needbackup: enabled + recurring-job.longhorn.io/source: enabled + name: radarr-config-pvc + namespace: servarr-system +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 3Gi + storageClassName: longhorn +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + argocd.argoproj.io/sync-options: Prune=false + labels: + app: sonarr + recurring-job-group.longhorn.io/needbackup: enabled + recurring-job.longhorn.io/source: enabled + name: sonarr-config-pvc + namespace: servarr-system +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: longhorn +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + argocd.argoproj.io/sync-options: Prune=false + labels: + app: qbittorrent + recurring-job-group.longhorn.io/needbackup: enabled + recurring-job.longhorn.io/source: enabled + name: qbittorrent-config-pvc + namespace: servarr-system +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: longhorn