diff --git a/README.md b/README.md index 135258a..cfbba2c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ for searching and retrieving TV Series, organizing them, schedule notifications [Jackett](https://github.com/Jackett/Jackett "Jackett") - An API interface that keeps easy your life interacting with trackers for torrents. +[Prowlarr](https://github.com/Prowlarr/Prowlarr "Prowlarr") - An indexer manager/proxy built on the popular *arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports management of both Torrent Trackers and Usenet Indexers. + [Transmission](https://transmissionbt.com/ "Transmission") - A fast, easy and reliable torrent client. [Sabnzbd](https://sabnzbd.org/ "Sabnzbd") - A free and easy binary newsreader. @@ -77,27 +79,10 @@ With default settings, your applications will run in these paths: | Radarr | http://k8s-mediaserver.k8s.test/radarr | | Transmission | http://k8s-mediaserver.k8s.test/transmission | | Jackett | http://k8s-mediaserver.k8s.test/jackett | +| Prowlarr | http://k8s-mediaserver.k8s.test/prowlarr | | PLEX | http://k8s-plex.k8s.test/ | -### Using a cluster-external NFS server - -This assumes that you have a pre-configured NFS server set up on your network that is accessible from all nodes. If it -is not accessible by all nodes, pods will not enter ready state when scheduled on nodes that do not have NFS access. - -To add an NFS volume to each resource, create a `my-values.yaml` file and add the below. You should change the `server:` -and `path:` values to match your NFS. - -``` yaml -general: - storage: - customVolume: true - volumes: - nfs: - server: {SERVER-IP} - path: /mount/path/on/nfs/server/ -``` - With this value saved in the top level directory of this repo, running the below will add the resources to your cluster, under the helm release name `k8s-mediaserver` @@ -141,138 +126,205 @@ letting some customization to fit the resource inside your cluster. ### Plex -| Config path | Meaning | Default | -|-----------------------------|---------------------------------------------------------------------------------------------------------------|-----------| -| plex.enabled | Flag if you want to enable plex | true | -| plex.claim | **IMPORTANT** Token from your account, needed to claim the server | CHANGEME | -| plex.replicaCount | Number of replicas serving plex | 1 | -| plex.container.port | The port in use by the container | 32400 | -| plex.container.tag | The tag used by the container | null | -| plex.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | -| plex.service.port | The port assigned to the service | 32400 | -| plex.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | -| plex.service.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| plex.ingress.enabled | If true, creates the ingress resource for the application | true | -| plex.ingress.annotations | Additional field for annotations, if needed | {} | -| plex.ingress.path | The path where the application is exposed | /plex | -| plex.ingress.tls.enabled | If true, tls is enabled | false | -| plex.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | -| plex.resources | Limits and Requests for the container | {} | -| plex.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | +| Config path | Meaning | Default | +|-------------------------------------------|---------------------------------------------------------------------------------------------------------------|-----------| +| plex.enabled | Flag if you want to enable plex | true | +| plex.claim | **IMPORTANT** Token from your account, needed to claim the server | CHANGEME | +| plex.replicaCount | Number of replicas serving plex | 1 | +| plex.container.port | The port in use by the container | 32400 | +| plex.container.tag | The tag used by the container | null | +| plex.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | +| plex.service.port | The port assigned to the service | 32400 | +| plex.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | +| plex.service.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| plex.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| plex.ingress.enabled | If true, creates the ingress resource for the application | true | +| plex.ingress.annotations | Additional field for annotations, if needed | {} | +| plex.ingress.path | The path where the application is exposed | /plex | +| plex.ingress.tls.enabled | If true, tls is enabled | false | +| plex.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| plex.resources | Limits and Requests for the container | {} | +| plex.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | ### Sonarr -| Config path | Meaning | Default | -|-------------------------------|----------------------------------------------------------------------------------------------------------------|-----------| -| sonarr.enabled | Flag if you want to enable sonarr | true | -| sonarr.container.port | The port in use by the container | 8989 | -| sonarr.container.tag | The tag used by the container | null | -| sonarr.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | -| sonarr.service.port | The port assigned to the service | 8989 | -| sonarr.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | -| sonarr.service.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| sonarr.ingress.enabled | If true, creates the ingress resource for the application | true | -| sonarr.ingress.annotations | Additional field for annotations, if needed | {} | -| sonarr.ingress.path | The path where the application is exposed | /sonarr | -| sonarr.ingress.tls.enabled | If true, tls is enabled | false | -| sonarr.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | -| sonarr.resources | Limits and Requests for the container | {} | -| sonarr.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | +| Config path | Meaning | Default | +|---------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------| +| sonarr.enabled | Flag if you want to enable sonarr | true | +| sonarr.container.port | The port in use by the container | 8989 | +| sonarr.container.tag | The tag used by the container | null | +| sonarr.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | +| sonarr.service.port | The port assigned to the service | 8989 | +| sonarr.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | +| sonarr.service.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| sonarr.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| sonarr.ingress.enabled | If true, creates the ingress resource for the application | true | +| sonarr.ingress.annotations | Additional field for annotations, if needed | {} | +| sonarr.ingress.path | The path where the application is exposed | /sonarr | +| sonarr.ingress.tls.enabled | If true, tls is enabled | false | +| sonarr.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| sonarr.resources | Limits and Requests for the container | {} | +| sonarr.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | ### Radarr -| Config path | Meaning | Default | -|-------------------------------|----------------------------------------------------------------------------------------------------------------|-----------| -| radarr.enabled | Flag if you want to enable radarr | true | -| radarr.container.port | The port in use by the container | 7878 | -| radarr.container.tag | The tag used by the container | null | -| radarr.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | -| radarr.service.port | The port assigned to the service | 7878 | -| radarr.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | -| radarr.service.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| radarr.ingress.enabled | If true, creates the ingress resource for the application | true | -| radarr.ingress.annotations | Additional field for annotations, if needed | {} | -| radarr.ingress.path | The path where the application is exposed | /radarr | -| radarr.ingress.tls.enabled | If true, tls is enabled | false | -| radarr.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | -| radarr.resources | Limits and Requests for the container | {} | -| radarr.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | +| Config path | Meaning | Default | +|---------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------| +| radarr.enabled | Flag if you want to enable radarr | true | +| radarr.container.port | The port in use by the container | 7878 | +| radarr.container.tag | The tag used by the container | null | +| radarr.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | +| radarr.service.port | The port assigned to the service | 7878 | +| radarr.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | +| radarr.service.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| radarr.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| radarr.ingress.enabled | If true, creates the ingress resource for the application | true | +| radarr.ingress.annotations | Additional field for annotations, if needed | {} | +| radarr.ingress.path | The path where the application is exposed | /radarr | +| radarr.ingress.tls.enabled | If true, tls is enabled | false | +| radarr.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| radarr.resources | Limits and Requests for the container | {} | +| radarr.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | ### Jackett -| Config path | Meaning | Default | -|--------------------------------|-----------------------------------------------------------------------------------------------------------------|-----------| -| jackett.enabled | Flag if you want to enable jackett | true | -| jackett.container.port | The port in use by the container | 9117 | -| jackett.container.tag | The tag used by the container | null | -| jackett.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | -| jackett.service.port | The port assigned to the service | 9117 | -| jackett.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | -| jackett.service.extraLBService | If true, it creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| jackett.ingress.enabled | If true, creates the ingress resource for the application | true | -| jackett.ingress.annotations | Additional field for annotations, if needed | {} | -| jackett.ingress.path | The path where the application is exposed | /jackett | -| jackett.ingress.tls.enabled | If true, tls is enabled | false | -| jackett.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | -| jackett.resources | Limits and Requests for the container | {} | -| jackett.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | +| Config path | Meaning | Default | +|---------------------------------------------|-----------------------------------------------------------------------------------------------------------------|-----------| +| jackett.enabled | Flag if you want to enable jackett | true | +| jackett.container.port | The port in use by the container | 9117 | +| jackett.container.tag | The tag used by the container | null | +| jackett.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | +| jackett.service.port | The port assigned to the service | 9117 | +| jackett.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | +| jackett.service.extraLBService | If true, it creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| jackett.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| jackett.ingress.enabled | If true, creates the ingress resource for the application | true | +| jackett.ingress.annotations | Additional field for annotations, if needed | {} | +| jackett.ingress.path | The path where the application is exposed | /jackett | +| jackett.ingress.tls.enabled | If true, tls is enabled | false | +| jackett.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| jackett.resources | Limits and Requests for the container | {} | +| jackett.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | + +### Prowlarr + +| Config path | Meaning | Default | +|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------|-----------| +| prowlarr.enabled | Flag if you want to enable prowlarr | true | +| prowlarr.container.port | The port in use by the container | 9117 | +| prowlarr.container.tag | The tag used by the container | develop | +| prowlarr.service.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) | ClusterIP | +| prowlarr.service.port | The port assigned to the service | 9117 | +| prowlarr.service.nodePort | In case of service.type NodePort, the nodePort to use | "" | +| prowlarr.service.extraLBService | If true, it creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| prowlarr.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| prowlarr.ingress.enabled | If true, creates the ingress resource for the application | true | +| prowlarr.ingress.annotations | Additional field for annotations, if needed | {} | +| prowlarr.ingress.path | The path where the application is exposed | /prowlarr | +| prowlarr.ingress.tls.enabled | If true, tls is enabled | false | +| prowlarr.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| 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 | {} | ### Transmission -| Config path | Meaning | Default | -|------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------| -| transmission.enabled | Flag if you want to enable transmission | true | -| transmission.container.port.utp | The port in use by the container | 9091 | -| transmission.container.port.peer | The port in use by the container for peer connection | 51413 | -| transmission.container.tag | The tag used by the container | null | -| transmission.service.utp.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for transmission itself | ClusterIP | -| transmission.service.utp.port | The port assigned to the service for transmission itself | 9091 | -| transmission.service.utp.nodePort | In case of service.type NodePort, the nodePort to use for transmission itself | "" | -| transmission.service.utp.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| transmission.service.peer.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for peer port | ClusterIP | -| transmission.service.peer.port | The port assigned to the service for peer port | 51413 | -| transmission.service.peer.nodePort | In case of service.type NodePort, the nodePort to use for peer port | "" | -| transmission.service.peer.nodePortUDP | In case of service.type NodePort, the nodePort to use for peer port UDP service | "" | -| transmission.service.peer.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| transmission.ingress.enabled | If true, creates the ingress resource for the application | true | -| transmission.ingress.annotations | Additional field for annotations, if needed | {} | -| transmission.ingress.path | The path where the application is exposed | /transmission | -| transmission.ingress.tls.enabled | If true, tls is enabled | false | -| transmission.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | -| transmission.config.auth.enabled | Enables authentication for transmission | false | -| transmission.config.auth.username | Username for transmission | "" | -| transmission.config.auth.password | Password for transmission | "" | -| transmission.resources | Limits and Requests for the container | {} | -| transmission.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | +| Config path | Meaning | Default | +|---------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------| +| transmission.enabled | Flag if you want to enable transmission | true | +| transmission.container.port.utp | The port in use by the container | 9091 | +| transmission.container.port.peer | The port in use by the container for peer connection | 51413 | +| transmission.container.tag | The tag used by the container | null | +| transmission.service.utp.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for transmission itself | ClusterIP | +| transmission.service.utp.port | The port assigned to the service for transmission itself | 9091 | +| transmission.service.utp.nodePort | In case of service.type NodePort, the nodePort to use for transmission itself | "" | +| transmission.service.utp.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| transmission.service.peer.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for peer port | ClusterIP | +| transmission.service.peer.port | The port assigned to the service for peer port | 51413 | +| transmission.service.peer.nodePort | In case of service.type NodePort, the nodePort to use for peer port | "" | +| transmission.service.peer.nodePortUDP | In case of service.type NodePort, the nodePort to use for peer port UDP service | "" | +| transmission.service.peer.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| transmission.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| transmission.ingress.enabled | If true, creates the ingress resource for the application | true | +| transmission.ingress.annotations | Additional field for annotations, if needed | {} | +| transmission.ingress.path | The path where the application is exposed | /transmission | +| transmission.ingress.tls.enabled | If true, tls is enabled | false | +| transmission.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| transmission.config.auth.enabled | Enables authentication for transmission | false | +| transmission.config.auth.username | Username for transmission | "" | +| transmission.config.auth.password | Password for transmission | "" | +| transmission.resources | Limits and Requests for the container | {} | +| transmission.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | ### Sabnzbd -| Config path | Meaning | Default | -|--------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------| -| sabnzbd.enabled | Flag if you want to enable sabnzbd | true | -| sabnzbd.container.port.http | The port in use by the container | 8080 | -| sabnzbd.container.port.https | The port in use by the container for peer connection | 9090 | -| sabnzbd.container.tag | The tag used by the container | null | -| sabnzbd.service.http.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for sabnzbd itself | ClusterIP | -| sabnzbd.service.http.port | The port assigned to the service for sabnzbd itself | 9091 | -| sabnzbd.service.http.nodePort | In case of service.type NodePort, the nodePort to use for sabnzbd itself | "" | -| sabnzbd.service.http.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| sabnzbd.service.https.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for https port | ClusterIP | -| sabnzbd.service.https.port | The port assigned to the service for peer port | 51413 | -| sabnzbd.service.https.nodePort | In case of service.type NodePort, the nodePort to use for https port | "" | -| sabnzbd.service.https.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | -| sabnzbd.ingress.enabled | If true, creates the ingress resource for the application | true | -| sabnzbd.ingress.annotations | Additional field for annotations, if needed | {} | -| sabnzbd.ingress.path | The path where the application is exposed | /sabnzbd | -| sabnzbd.ingress.tls.enabled | If true, tls is enabled | false | -| sabnzbd.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | -| sabnzbd.resources | Limits and Requests for the container | {} | -| sabnzbd.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | +| Config path | Meaning | Default | +|---------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------| +| sabnzbd.enabled | Flag if you want to enable sabnzbd | true | +| sabnzbd.container.port.http | The port in use by the container | 8080 | +| sabnzbd.container.port.https | The port in use by the container for peer connection | 9090 | +| sabnzbd.container.tag | The tag used by the container | null | +| sabnzbd.service.http.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for sabnzbd itself | ClusterIP | +| sabnzbd.service.http.port | The port assigned to the service for sabnzbd itself | 9091 | +| sabnzbd.service.http.nodePort | In case of service.type NodePort, the nodePort to use for sabnzbd itself | "" | +| sabnzbd.service.http.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| sabnzbd.service.https.type | The kind of Service (ClusterIP/NodePort/LoadBalancer) for https port | ClusterIP | +| sabnzbd.service.https.port | The port assigned to the service for peer port | 51413 | +| sabnzbd.service.https.nodePort | In case of service.type NodePort, the nodePort to use for https port | "" | +| sabnzbd.service.https.extraLBService | If true, creates an additional LoadBalancer service with '-lb' suffix (requires a cloud provider or metalLB) | false | +| sabnzbd.service.extraLBService.annotations | Instead of using extraLBService as a bool, you can use it as a map to define annotations on the loadbalancer | null | +| sabnzbd.ingress.enabled | If true, creates the ingress resource for the application | true | +| sabnzbd.ingress.annotations | Additional field for annotations, if needed | {} | +| sabnzbd.ingress.path | The path where the application is exposed | /sabnzbd | +| sabnzbd.ingress.tls.enabled | If true, tls is enabled | false | +| sabnzbd.ingress.tls.secretName | Name of the secret holding certificates for the secure ingress | "" | +| sabnzbd.resources | Limits and Requests for the container | {} | +| sabnzbd.volume | If set, Plex will create a PVC for it's config volume, else it will be put on general.storage.subPaths.config | {} | + + +## Helpful use-cases + +### Using a cluster-external NFS server + +This assumes that you have a pre-configured NFS server set up on your network that is accessible from all nodes. If it +is not accessible by all nodes, pods will not enter ready state when scheduled on nodes that do not have NFS access. + +To add an NFS volume to each resource, create a `my-values.yaml` file and add the below. You should change the `server:` +and `path:` values to match your NFS. + +``` yaml +general: + storage: + customVolume: true + volumes: + nfs: + server: {SERVER-IP} + path: /mount/path/on/nfs/server/ +``` + +### Adding annotations to the extra load balancer +If you need an extra load balancer on any service, you can either enable it like this: + +```yaml +plex: + service: + extraLBService: true +``` + +or like this, if you need to add annotations to it (for use with cloud providers to configure the load balancer for example) : + +```yaml +plex: + service: + extraLBService: + annotations: + service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: +``` ## About the project This project is intended as an exercise, and absolutely for fun. This is not intended to promote piracy. -Also feel free to contribute and extend it! \ No newline at end of file +Also feel free to contribute and extend it! + diff --git a/helm-charts/k8s-mediaserver/templates/jackett-resources.yml b/helm-charts/k8s-mediaserver/templates/jackett-resources.yml index 65c608e..382e96f 100644 --- a/helm-charts/k8s-mediaserver/templates/jackett-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/jackett-resources.yml @@ -142,6 +142,8 @@ apiVersion: v1 kind: Service metadata: name: jackett-lb + annotations: + {{- include .Values.jackett.service.extraLBService.annotations . | nindent 4 }} labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: diff --git a/helm-charts/k8s-mediaserver/templates/plex-resources.yml b/helm-charts/k8s-mediaserver/templates/plex-resources.yml index c5b6507..956df2e 100644 --- a/helm-charts/k8s-mediaserver/templates/plex-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/plex-resources.yml @@ -108,6 +108,8 @@ apiVersion: v1 kind: Service metadata: name: plex-lb + annotations: + {{- include .Values.plex.service.extraLBService.annotations . | nindent 4 }} labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: diff --git a/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml b/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml new file mode 100644 index 0000000..6052aae --- /dev/null +++ b/helm-charts/k8s-mediaserver/templates/prowlarr-resources.yml @@ -0,0 +1,192 @@ +{{ if .Values.prowlarr.enabled }} +--- +### CONFIGMAPS +## INIT-CONTAINER +apiVersion: v1 +data: + config.xml: | + + {{ .Values.prowlarr.ingress.path }} + + init-prowlarr.sh: | + #!/bin/bash + echo "### Initializing config ###" + if [ ! -f /prowlarr-config/config.xml ]; then + cp -n /init-prowlarr/config.xml /prowlarr-config/config.xml + echo "### No configuration found, intialized with default settings ###" + fi +kind: ConfigMap +metadata: + name: init-prowlarr-cm +--- +## APPLICATION +apiVersion: v1 +kind: ConfigMap +metadata: + name: prowlarr-config +data: + PGID: "{{ .Values.general.pgid }}" + PUID: "{{ .Values.general.puid }}" +--- +### DEPLOYMENT +apiVersion: apps/v1 +kind: Deployment +metadata: + name: prowlarr + labels: + {{- include "k8s-mediaserver.labels" . | nindent 4 }} +spec: + replicas: 1 + selector: + matchLabels: + {{- include "k8s-mediaserver.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "k8s-mediaserver.selectorLabels" . | nindent 8 }} + app: prowlarr + spec: + initContainers: + - name: config-prowlarr + image: docker.io/ubuntu:groovy + command: ["/init-prowlarr/init-prowlarr.sh"] + volumeMounts: + - mountPath: /init-prowlarr + name: init-files-prowlarr + {{- if .Values.prowlarr.volume }} + - name: {{ .Values.prowlarr.volume.name }} + mountPath: /prowlarr-config + {{- else }} + - name: mediaserver-volume + mountPath: /prowlarr-config + subPath: "{{ .Values.general.storage.subPaths.config }}/prowlarr" + {{- end }} + securityContext: + runAsUser: {{ .Values.general.puid }} + runAsGroup: {{ .Values.general.pgid }} + containers: + - name: {{ .Chart.Name }} + envFrom: + - configMapRef: + name: prowlarr-config + image: "{{ .Values.prowlarr.container.image }}:{{ .Values.prowlarr.container.tag | default .Values.general.image_tag }}" + imagePullPolicy: Always + readinessProbe: + tcpSocket: + port: {{ .Values.prowlarr.container.port }} + initialDelaySeconds: 10 + periodSeconds: 20 + ports: + - name: prowlarr-port + containerPort: {{ .Values.prowlarr.container.port }} + protocol: TCP + volumeMounts: + {{- if .Values.prowlarr.volume }} + - name: {{ .Values.prowlarr.volume.name }} + mountPath: /config + {{- else }} + - name: mediaserver-volume + mountPath: "/config" + subPath: "{{ .Values.general.storage.subPaths.config }}/prowlarr" + {{- end }} + {{- with .Values.prowlarr.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.prowlarr.volume }} + - name: {{ .Values.prowlarr.volume.name }} + persistentVolumeClaim: + claimName: {{ .Values.prowlarr.volume.name }} + {{- end }} + - name: init-files-prowlarr + configMap: + defaultMode: 493 + name: init-prowlarr-cm + {{- with .Values.general.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} +--- +### SERVICES +apiVersion: v1 +kind: Service +metadata: + name: prowlarr + labels: + {{- include "k8s-mediaserver.labels" . | nindent 4 }} +spec: + type: {{ .Values.prowlarr.service.type }} + ports: + - port: {{ .Values.prowlarr.service.port }} + targetPort: {{ .Values.prowlarr.container.port }} + protocol: TCP +{{ if eq .Values.prowlarr.service.type "NodePort" }} + nodePort: {{ .Values.prowlarr.service.nodePort }} +{{ end }} + name: prowlarr-port + selector: + app: prowlarr + +--- +{{ if .Values.prowlarr.service.extraLBService }} +apiVersion: v1 +kind: Service +metadata: + name: prowlarr-lb + annotations: + {{- include .Values.prowlarr.service.extraLBService.annotations . | nindent 4 }} + labels: + {{- include "k8s-mediaserver.labels" . | nindent 4 }} +spec: + type: LoadBalancer + ports: + - port: {{ .Values.prowlarr.service.port }} + targetPort: {{ .Values.prowlarr.container.port }} + protocol: TCP + name: prowlarr-port + selector: + app: prowlarr +{{ end }} +--- +### INGRESS ### +{{ if .Values.prowlarr.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: prowlarr + labels: + {{- include "k8s-mediaserver.labels" . | nindent 4 }} + {{- with .Values.prowlarr.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: +{{ if .Values.prowlarr.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.general.ingress_host | quote }} + secretName: {{ .Values.prowlarr.ingress.tls.secretName }} +{{ end }} + ingressClassName: {{ .Values.general.ingress.ingressClassName }} + rules: + - host: {{ .Values.general.ingress_host | quote }} + http: + paths: + - path: {{ .Values.prowlarr.ingress.path }} + pathType: Prefix + backend: + service: + name: prowlarr + port: + number: {{ .Values.prowlarr.service.port }} +{{ end }} +{{ end }} diff --git a/helm-charts/k8s-mediaserver/templates/radarr-resources.yml b/helm-charts/k8s-mediaserver/templates/radarr-resources.yml index 1f7b0da..0764a97 100644 --- a/helm-charts/k8s-mediaserver/templates/radarr-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/radarr-resources.yml @@ -151,6 +151,8 @@ apiVersion: v1 kind: Service metadata: name: radarr-lb + annotations: + {{- include .Values.radarr.service.extraLBService.annotations . | nindent 4 }} labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: diff --git a/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml b/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml index 41ff9d7..cb9fbbc 100644 --- a/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/sabnzbd-resources.yml @@ -469,6 +469,8 @@ apiVersion: v1 kind: Service metadata: name: sabnzbd-lb + annotations: + {{- include .Values.sabnzbd.service.extraLBService.annotations . | nindent 4 }} labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: diff --git a/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml b/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml index 1141289..1fdc04d 100644 --- a/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/sonarr-resources.yml @@ -149,6 +149,8 @@ apiVersion: v1 kind: Service metadata: name: sonarr-lb + annotations: + {{- include .Values.sonarr.service.extraLBService.annotations . | nindent 4 }} labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: diff --git a/helm-charts/k8s-mediaserver/templates/transmission-resources.yml b/helm-charts/k8s-mediaserver/templates/transmission-resources.yml index 58cf6af..ba0bf20 100644 --- a/helm-charts/k8s-mediaserver/templates/transmission-resources.yml +++ b/helm-charts/k8s-mediaserver/templates/transmission-resources.yml @@ -255,6 +255,8 @@ apiVersion: v1 kind: Service metadata: name: transmission-lb + annotations: + {{- include .Values.transmission.service.extraLBService.annotations . | nindent 4 }} labels: {{- include "k8s-mediaserver.labels" . | nindent 4 }} spec: diff --git a/helm-charts/k8s-mediaserver/values.yaml b/helm-charts/k8s-mediaserver/values.yaml index 9c2a90e..ccd9101 100644 --- a/helm-charts/k8s-mediaserver/values.yaml +++ b/helm-charts/k8s-mediaserver/values.yaml @@ -202,6 +202,35 @@ sabnzbd: # storage: 5Gi # selector: {} +prowlarr: + enabled: true + container: + image: docker.io/linuxserver/prowlarr + tag: develop + nodeSelector: {} + port: 9696 + service: + type: ClusterIP + port: 9696 + nodePort: + extraLBService: false + ingress: + enabled: true + annotations: {} + path: /prowlarr + tls: + enabled: false + secretName: "" + resources: {} + volume: {} + # name: pvc-prowlarr-config + # storageClassName: longhorn + # annotations: {} + # labels: {} + # accessModes: ReadWriteOnce + # storage: 5Gi + # selector: {} + plex: enabled: true claim: "CHANGEME" diff --git a/k8s-mediaserver.yml b/k8s-mediaserver.yml index b0aa700..3a98b72 100644 --- a/k8s-mediaserver.yml +++ b/k8s-mediaserver.yml @@ -9,13 +9,13 @@ spec: ingress_host: k8s-mediaserver.k8s.test plex_ingress_host: k8s-plex.k8s.test image_tag: latest - #UID to run the process with + # UID to run the process with puid: 1000 - #GID to run the process with + # GID to run the process with pgid: 1000 - #Persistent storage selections and pathing + # Persistent storage selections and pathing storage: - customVolume: false #set to true if not using a PVC (must provide volume below) + customVolume: false # set to true if not using a PVC (must provide volume below) pvcName: mediaserver-pvc size: 5Gi accessMode: "" @@ -46,7 +46,9 @@ spec: nodePort: extraLBService: false # Defines an additional LB service, requires cloud provider service or MetalLB - + # extraLBService: + # annotations: + # my-annotation: my-value ingress: enabled: true annotations: {} @@ -56,15 +58,15 @@ spec: secretName: "" resources: {} volume: {} - #name: pvc-sonarr-config - #storageClassName: longhorn - #annotations: - # my-annotation/test: my-value - #labels: - # my-label/test: my-other-value - #accessModes: ReadWriteOnce - #storage: 5Gi - #selector: {} + # name: pvc-sonarr-config + # storageClassName: longhorn + # annotations: + # my-annotation/test: my-value + # labels: + # my-label/test: my-other-value + # accessModes: ReadWriteOnce + # storage: 5Gi + # selector: {} radarr: enabled: true @@ -78,7 +80,9 @@ spec: nodePort: extraLBService: false # Defines an additional LB service, requires cloud provider service or MetalLB - + # extraLBService: + # annotations: + # my-annotation: my-value ingress: enabled: true annotations: {} @@ -88,13 +92,13 @@ spec: secretName: "" resources: {} volume: {} - #name: pvc-radarr-config - #storageClassName: longhorn - #annotations: {} - #labels: {} - #accessModes: ReadWriteOnce - #storage: 5Gi - #selector: {} + # name: pvc-radarr-config + # storageClassName: longhorn + # annotations: {} + # labels: {} + # accessModes: ReadWriteOnce + # storage: 5Gi + # selector: {} jackett: enabled: true @@ -108,6 +112,9 @@ spec: nodePort: extraLBService: false # Defines an additional LB service, requires cloud provider service or MetalLB + # extraLBService: + # annotations: + # my-annotation: my-value ingress: enabled: true annotations: {} @@ -147,6 +154,9 @@ spec: nodePortUDP: # Defines an additional LB service, requires cloud provider service or MetalLB extraLBService: false + # extraLBService: + # annotations: + # my-annotation: my-value ingress: enabled: true annotations: {} @@ -190,6 +200,9 @@ spec: nodePort: # Defines an additional LB service, requires cloud provider service or MetalLB extraLBService: false + # extraLBService: + # annotations: + # my-annotation: my-value ingress: enabled: true annotations: {} @@ -207,6 +220,28 @@ spec: # storage: 5Gi # selector: {} + prowlarr: + enabled: true + container: + image: docker.io/linuxserver/prowlarr + tag: develop + nodeSelector: {} + port: 9696 + service: + type: ClusterIP + port: 9696 + nodePort: + extraLBService: false + ingress: + enabled: true + annotations: {} + path: /prowlarr + tls: + enabled: false + secretName: "" + resources: {} + volume: {} + plex: enabled: true claim: "CHANGEME"