From b8331d9323f6e8987d644cb31f5b98d589319b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric?= Date: Mon, 13 Jul 2026 12:05:14 +0200 Subject: [PATCH] [servarr] feat: add SABnzbd support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces sabnzbd as a first-class app alongside qbittorrent for Usenet-based downloads. Mirrors the qbittorrent template layout (Deployment + Service + PVC + Ingress + ServiceAccount + HPA), all gated on sabnzbd.enabled. Defaults: - image: lscr.io/linuxserver/sabnzbd:4.5.4 - service.port: 8080 (SABnzbd default) - persistence: 1Gi ReadWriteOnce, path=downloads - probes: {} (SABnzbd exposes / but under load it can block; consumers opt-in to what they actually want) Media mount reuses the existing jellyfin.persistence.media pattern for consistency with the other *arr apps -- decoupling media from jellyfin.enabled is out of scope here. Chart version bumped 1.5.2 -> 1.6.0 (minor: additive feature). Signed-off-by: Cédric --- charts/servarr/Chart.yaml | 3 +- charts/servarr/README.md | 55 ++++++ .../servarr/templates/sabnzbd/deployment.yaml | 128 ++++++++++++++ charts/servarr/templates/sabnzbd/hpa.yaml | 31 ++++ charts/servarr/templates/sabnzbd/ingress.yaml | 64 +++++++ charts/servarr/templates/sabnzbd/pvc.yaml | 24 +++ charts/servarr/templates/sabnzbd/service.yaml | 24 +++ .../templates/sabnzbd/serviceaccount.yaml | 15 ++ charts/servarr/values.yaml | 160 ++++++++++++++++++ 9 files changed, 503 insertions(+), 1 deletion(-) create mode 100644 charts/servarr/templates/sabnzbd/deployment.yaml create mode 100644 charts/servarr/templates/sabnzbd/hpa.yaml create mode 100644 charts/servarr/templates/sabnzbd/ingress.yaml create mode 100644 charts/servarr/templates/sabnzbd/pvc.yaml create mode 100644 charts/servarr/templates/sabnzbd/service.yaml create mode 100644 charts/servarr/templates/sabnzbd/serviceaccount.yaml diff --git a/charts/servarr/Chart.yaml b/charts/servarr/Chart.yaml index 559a460..c559498 100644 --- a/charts/servarr/Chart.yaml +++ b/charts/servarr/Chart.yaml @@ -4,7 +4,7 @@ maintainers: url: https://kubito.dev apiVersion: v2 appVersion: 1.3.0 -version: 1.5.2 +version: 1.6.0 description: Kubito Servarr Helm Chart home: https://github.com/kubitodev/helm/tree/main/charts/servarr icon: https://kubito.dev/images/kubito.svg @@ -21,5 +21,6 @@ keywords: - prowlarr - cleanuparr - lidatube + - sabnzbd sources: - https://github.com/Servarr diff --git a/charts/servarr/README.md b/charts/servarr/README.md index cd56ee2..bc2d575 100644 --- a/charts/servarr/README.md +++ b/charts/servarr/README.md @@ -231,6 +231,61 @@ The command removes all the Kubernetes components associated with the chart and | `qbittorrent.persistence.additionalVolumes` | Additional volumes to add to the pod. | `[]` | | `qbittorrent.persistence.additionalMounts` | Additional volume mounts to add to the pod. | `[]` | +### SABnzbd parameters + +| Name | Description | Value | +| ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | +| `sabnzbd.enabled` | Whether to enable SABnzbd. | `true` | +| `sabnzbd.replicaCount` | The number of replicas to deploy. | `1` | +| `sabnzbd.image.repository` | The Docker repository to pull the image from. | `lscr.io/linuxserver/sabnzbd` | +| `sabnzbd.image.tag` | The image tag to use. | `4.5.4` | +| `sabnzbd.image.pullPolicy` | The logic of image pulling. | `IfNotPresent` | +| `sabnzbd.imagePullSecrets` | The image pull secrets to use. | `[]` | +| `sabnzbd.deployment.strategy.type` | The deployment strategy to use. | `Recreate` | +| `sabnzbd.serviceAccount.create` | Whether to create a service account. | `true` | +| `sabnzbd.serviceAccount.annotations` | Additional annotations to add to the service account. | `{}` | +| `sabnzbd.serviceAccount.name` | The name of the service account to use. If not set and create is true, a new service account will be created with a generated name. | `""` | +| `sabnzbd.podAnnotations` | Additional annotations to add to the pod. | `{}` | +| `sabnzbd.podSecurityContext` | The security context to use for the pod. | `{}` | +| `sabnzbd.securityContext` | The security context to use for the container. | `{}` | +| `sabnzbd.initContainers` | Additional init containers to add to the pod. | `[]` | +| `sabnzbd.service.type` | The type of service to create. | `ClusterIP` | +| `sabnzbd.service.port` | The port on which the service will run. | `8080` | +| `sabnzbd.service.nodePort` | The nodePort to use for the service. Only used if service.type is NodePort. | `""` | +| `sabnzbd.ingress.enabled` | Whether to create an ingress for the service. | `false` | +| `sabnzbd.ingress.className` | The ingress class name to use. | `""` | +| `sabnzbd.ingress.annotations` | Additional annotations to add to the ingress. | `{}` | +| `sabnzbd.ingress.hosts[0].host` | The host to use for the ingress. | `chart-example.local` | +| `sabnzbd.ingress.hosts[0].paths[0].path` | The path to use for the ingress. | `/` | +| `sabnzbd.ingress.hosts[0].paths[0].pathType` | The path type to use for the ingress. | `ImplementationSpecific` | +| `sabnzbd.ingress.tls` | The TLS configuration for the ingress. | `[]` | +| `sabnzbd.resources` | The resources to use for the pod. | `{}` | +| `sabnzbd.startupProbe` | Startup probe configuration. Leave empty to disable. | `{}` | +| `sabnzbd.livenessProbe` | Liveness probe configuration. Leave empty to disable. | `{}` | +| `sabnzbd.readinessProbe` | Readiness probe configuration. Leave empty to disable. | `{}` | +| `sabnzbd.autoscaling.enabled` | Whether to enable autoscaling. | `false` | +| `sabnzbd.autoscaling.minReplicas` | The minimum number of replicas to scale to. | `1` | +| `sabnzbd.autoscaling.maxReplicas` | The maximum number of replicas to scale to. | `100` | +| `sabnzbd.autoscaling.targetCPUUtilizationPercentage` | The target CPU utilization percentage to use for autoscaling. | `80` | +| `sabnzbd.autoscaling.targetMemoryUtilizationPercentage` | The target memory utilization percentage to use for autoscaling. | `80` | +| `sabnzbd.priorityClassName` | Kubernetes PriorityClass name for pod eviction priority. Leave empty to inherit the cluster's globalDefault PriorityClass. | `""` | +| `sabnzbd.nodeSelector` | The node selector to use for the pod. | `{}` | +| `sabnzbd.podLabels` | Additional labels to add to the pod template. | `{}` | +| `sabnzbd.tolerations` | The tolerations to use for the pod. | `[]` | +| `sabnzbd.topologySpreadConstraints` | Control how pods are spread across your cluster among failure-domains such as regions, zones, nodes, and other user-defined topology domains. | `[]` | +| `sabnzbd.affinity` | The affinity to use for the pod. | `{}` | +| `sabnzbd.env.PUID` | The user ID to use for the pod. | `1000` | +| `sabnzbd.env.PGID` | The group ID to use for the pod. | `1000` | +| `sabnzbd.env.TZ` | The timezone to use for the pod. | `Europe/London` | +| `sabnzbd.persistence.enabled` | Whether to enable persistence. | `true` | +| `sabnzbd.persistence.path` | The path to use for the persistence. Don't use slashes. | `downloads` | +| `sabnzbd.persistence.storageClass` | The storage class to use for the persistence. | `""` | +| `sabnzbd.persistence.existingClaim` | The name of an existing claim to use for the persistence. | `""` | +| `sabnzbd.persistence.accessMode` | The access mode to use for the persistence. | `ReadWriteOnce` | +| `sabnzbd.persistence.size` | The size to use for the persistence. | `1Gi` | +| `sabnzbd.persistence.additionalVolumes` | Additional volumes to add to the pod. | `[]` | +| `sabnzbd.persistence.additionalMounts` | Additional volume mounts to add to the pod. | `[]` | + ### Prowlarr parameters | Name | Description | Value | diff --git a/charts/servarr/templates/sabnzbd/deployment.yaml b/charts/servarr/templates/sabnzbd/deployment.yaml new file mode 100644 index 0000000..c9f7f8b --- /dev/null +++ b/charts/servarr/templates/sabnzbd/deployment.yaml @@ -0,0 +1,128 @@ +{{- if .Values.sabnzbd.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }}-sabnzbd + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} +spec: + {{- if not .Values.sabnzbd.autoscaling.enabled }} + replicas: {{ .Values.sabnzbd.replicaCount }} + {{- end }} + strategy: + {{- .Values.sabnzbd.deployment.strategy | toYaml | nindent 4 }} + selector: + matchLabels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + {{- with .Values.sabnzbd.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + {{- with .Values.sabnzbd.podLabels }} + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + {{- with .Values.sabnzbd.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ .Values.sabnzbd.serviceAccount.name | default (printf "%s-sabnzbd" .Release.Name) }} + securityContext: + {{- toYaml .Values.sabnzbd.podSecurityContext | nindent 8 }} + {{- if .Values.sabnzbd.initContainers }} + initContainers: + {{- toYaml .Values.sabnzbd.initContainers | nindent 8 }} + {{- end }} + volumes: + - name: config + {{- if .Values.sabnzbd.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.sabnzbd.persistence.existingClaim | default (printf "%s-sabnzbd" .Release.Name) }} + {{- else }} + emptyDir: { } + {{- end }} + - name: media + {{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.sabnzbd.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }} + {{- else }} + emptyDir: { } + {{- end }} + {{- if .Values.sabnzbd.persistence.additionalVolumes }} + {{- .Values.sabnzbd.persistence.additionalVolumes | toYaml | nindent 8}} + {{- end }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.sabnzbd.securityContext | nindent 12 }} + image: "{{ .Values.sabnzbd.image.repository }}:{{ .Values.sabnzbd.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.sabnzbd.image.pullPolicy }} + volumeMounts: + - mountPath: /config + name: config + {{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.sabnzbd.persistence.enabled }} + - mountPath: "/media/{{ .Values.sabnzbd.persistence.path }}" + name: media + subPath: {{ .Values.sabnzbd.persistence.path }} + {{- end }} + {{- if .Values.sabnzbd.persistence.additionalMounts }} + {{- .Values.sabnzbd.persistence.additionalMounts | toYaml | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.sabnzbd.service.port | default 8080 }} + protocol: TCP + env: + {{- range $k, $v := .Values.sabnzbd.env }} + - name: {{ $k }} + {{- if kindIs "map" $v }} + {{- toYaml $v | nindent 14 }} + {{- else }} + value: {{ $v | quote }} + {{- end }} + {{- end }} + {{- with .Values.sabnzbd.startupProbe }} + startupProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.sabnzbd.livenessProbe }} + livenessProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.sabnzbd.readinessProbe }} + readinessProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + resources: + {{- toYaml .Values.sabnzbd.resources | nindent 12 }} + {{- with .Values.sabnzbd.priorityClassName }} + priorityClassName: {{ . | quote }} + {{- end }} + {{- with .Values.sabnzbd.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.sabnzbd.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.sabnzbd.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.sabnzbd.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml . | nindent 8 }} + {{- end }} +{{- end }} diff --git a/charts/servarr/templates/sabnzbd/hpa.yaml b/charts/servarr/templates/sabnzbd/hpa.yaml new file mode 100644 index 0000000..2df7e2a --- /dev/null +++ b/charts/servarr/templates/sabnzbd/hpa.yaml @@ -0,0 +1,31 @@ +{{- if and .Values.sabnzbd.enabled .Values.sabnzbd.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ .Release.Name }}-sabnzbd + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ .Release.Name }}-sabnzbd + minReplicas: {{ .Values.sabnzbd.autoscaling.minReplicas }} + maxReplicas: {{ .Values.sabnzbd.autoscaling.maxReplicas }} + metrics: + {{- if .Values.sabnzbd.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.sabnzbd.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.sabnzbd.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.sabnzbd.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/charts/servarr/templates/sabnzbd/ingress.yaml b/charts/servarr/templates/sabnzbd/ingress.yaml new file mode 100644 index 0000000..3da3918 --- /dev/null +++ b/charts/servarr/templates/sabnzbd/ingress.yaml @@ -0,0 +1,64 @@ +{{- if and .Values.sabnzbd.enabled .Values.sabnzbd.ingress.enabled }} +{{- $fullName := printf "%s-sabnzbd" .Release.Name -}} +{{- $svcPort := .Values.sabnzbd.service.port -}} +{{- if and .Values.sabnzbd.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.sabnzbd.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.sabnzbd.ingress.annotations "kubernetes.io/ingress.class" .Values.sabnzbd.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + {{- with .Values.sabnzbd.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.sabnzbd.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.sabnzbd.ingress.className }} + {{- end }} + {{- if .Values.sabnzbd.ingress.tls }} + tls: + {{- range .Values.sabnzbd.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.sabnzbd.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/servarr/templates/sabnzbd/pvc.yaml b/charts/servarr/templates/sabnzbd/pvc.yaml new file mode 100644 index 0000000..316d621 --- /dev/null +++ b/charts/servarr/templates/sabnzbd/pvc.yaml @@ -0,0 +1,24 @@ +{{- if and .Values.sabnzbd.enabled .Values.sabnzbd.persistence.enabled (not .Values.sabnzbd.persistence.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ .Release.Name }}-sabnzbd + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + {{- if .Values.sabnzbd.persistence.annotations }} + annotations: + {{- toYaml .Values.sabnzbd.persistence.annotations | nindent 4 }} + {{- end }} +spec: + accessModes: + - {{ .Values.sabnzbd.persistence.accessMode | quote }} + {{- if .Values.sabnzbd.persistence.storageClass }} + storageClassName: {{ .Values.sabnzbd.persistence.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.sabnzbd.persistence.size | quote }} +{{- end }} diff --git a/charts/servarr/templates/sabnzbd/service.yaml b/charts/servarr/templates/sabnzbd/service.yaml new file mode 100644 index 0000000..78f584b --- /dev/null +++ b/charts/servarr/templates/sabnzbd/service.yaml @@ -0,0 +1,24 @@ +{{- if .Values.sabnzbd.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-sabnzbd + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} +spec: + type: {{ .Values.sabnzbd.service.type | default "ClusterIP" }} + ports: + - port: {{ .Values.sabnzbd.service.port | default 8080 }} + targetPort: http + protocol: TCP + name: http + {{- if (and (eq .Values.sabnzbd.service.type "NodePort") (not (empty .Values.sabnzbd.service.nodePort))) }} + nodePort: {{ .Values.sabnzbd.service.nodePort }} + {{- end }} + selector: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} diff --git a/charts/servarr/templates/sabnzbd/serviceaccount.yaml b/charts/servarr/templates/sabnzbd/serviceaccount.yaml new file mode 100644 index 0000000..5f1ae16 --- /dev/null +++ b/charts/servarr/templates/sabnzbd/serviceaccount.yaml @@ -0,0 +1,15 @@ +{{- if and .Values.sabnzbd.enabled .Values.sabnzbd.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Release.Name }}-sabnzbd + labels: + app.kubernetes.io/name: sabnzbd + app.kubernetes.io/instance: {{ .Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + {{- with .Values.sabnzbd.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/servarr/values.yaml b/charts/servarr/values.yaml index 3a63890..2355628 100644 --- a/charts/servarr/values.yaml +++ b/charts/servarr/values.yaml @@ -557,6 +557,166 @@ qbittorrent: additionalVolumes: [] additionalMounts: [] +## @section SABnzbd parameters + +## @param sabnzbd.enabled Whether to enable SABnzbd. +## @param sabnzbd.replicaCount The number of replicas to deploy. +## @param sabnzbd.image.repository The Docker repository to pull the image from. +## @param sabnzbd.image.tag The image tag to use. +## @param sabnzbd.image.pullPolicy The logic of image pulling. +## @param sabnzbd.imagePullSecrets The image pull secrets to use. +## @param sabnzbd.deployment.strategy.type The deployment strategy to use. +## @param sabnzbd.serviceAccount.create Whether to create a service account. +## @param sabnzbd.serviceAccount.annotations Additional annotations to add to the service account. +## @param sabnzbd.serviceAccount.name The name of the service account to use. If not set and create is true, a new service account will be created with a generated name. +## @param sabnzbd.podAnnotations Additional annotations to add to the pod. +## @param sabnzbd.podSecurityContext The security context to use for the pod. +## @param sabnzbd.securityContext The security context to use for the container. +## @param sabnzbd.initContainers Additional init containers to add to the pod. +## @param sabnzbd.service.type The type of service to create. +## @param sabnzbd.service.port The port on which the service will run. +## @param sabnzbd.service.nodePort The nodePort to use for the service. Only used if service.type is NodePort. +## @param sabnzbd.ingress.enabled Whether to create an ingress for the service. +## @param sabnzbd.ingress.className The ingress class name to use. +## @param sabnzbd.ingress.annotations Additional annotations to add to the ingress. +## @param sabnzbd.ingress.hosts[0].host The host to use for the ingress. +## @param sabnzbd.ingress.hosts[0].paths[0].path The path to use for the ingress. +## @param sabnzbd.ingress.hosts[0].paths[0].pathType The path type to use for the ingress. +## @param sabnzbd.ingress.tls The TLS configuration for the ingress. +## @param sabnzbd.resources The resources to use for the pod. +## @param sabnzbd.startupProbe Startup probe configuration. Leave empty to disable. +## @param sabnzbd.livenessProbe Liveness probe configuration. Leave empty to disable. +## @param sabnzbd.readinessProbe Readiness probe configuration. Leave empty to disable. +## @param sabnzbd.autoscaling.enabled Whether to enable autoscaling. +## @param sabnzbd.autoscaling.minReplicas The minimum number of replicas to scale to. +## @param sabnzbd.autoscaling.maxReplicas The maximum number of replicas to scale to. +## @param sabnzbd.autoscaling.targetCPUUtilizationPercentage The target CPU utilization percentage to use for autoscaling. +## @param sabnzbd.autoscaling.targetMemoryUtilizationPercentage The target memory utilization percentage to use for autoscaling. +## @param sabnzbd.priorityClassName Kubernetes PriorityClass name for pod eviction priority. Leave empty to inherit the cluster's globalDefault PriorityClass. +## @param sabnzbd.nodeSelector The node selector to use for the pod. +## @param sabnzbd.podLabels Additional labels to add to the pod template. +## @param sabnzbd.tolerations The tolerations to use for the pod. +## @param sabnzbd.topologySpreadConstraints Control how pods are spread across your cluster among failure-domains such as regions, zones, nodes, and other user-defined topology domains. +## @param sabnzbd.affinity The affinity to use for the pod. +## @param sabnzbd.env.PUID The user ID to use for the pod. +## @param sabnzbd.env.PGID The group ID to use for the pod. +## @param sabnzbd.env.TZ The timezone to use for the pod. +## @param sabnzbd.persistence.enabled Whether to enable persistence. +## @param sabnzbd.persistence.path The path to use for the persistence. Don't use slashes. +## @param sabnzbd.persistence.storageClass The storage class to use for the persistence. +## @param sabnzbd.persistence.existingClaim The name of an existing claim to use for the persistence. +## @param sabnzbd.persistence.accessMode The access mode to use for the persistence. +## @param sabnzbd.persistence.size The size to use for the persistence. +## @param sabnzbd.persistence.additionalVolumes Additional volumes to add to the pod. +## @param sabnzbd.persistence.additionalMounts Additional volume mounts to add to the pod. +## +sabnzbd: + enabled: true + replicaCount: 1 + + image: + repository: lscr.io/linuxserver/sabnzbd + pullPolicy: IfNotPresent + tag: "4.5.4" + + imagePullSecrets: [] + + deployment: + strategy: + type: Recreate + + serviceAccount: + create: true + annotations: {} + name: "" + + podAnnotations: {} + + podSecurityContext: {} + # fsGroup: 2000 + + securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + + initContainers: [] + # - name: init-container + # image: busybox + # command: ['sh', '-c', 'echo "this is an init container"'] + + service: + type: ClusterIP + port: 8080 + nodePort: "" + + ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + + startupProbe: {} + livenessProbe: {} + readinessProbe: {} + + autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + targetMemoryUtilizationPercentage: 80 + + # -- Kubernetes PriorityClass name for pod eviction priority. + # Leave empty to inherit the cluster's globalDefault PriorityClass. + priorityClassName: "" + + nodeSelector: {} + + tolerations: [] + + affinity: {} + + podLabels: {} + + topologySpreadConstraints: [] + + env: + PUID: "1000" + PGID: "1000" + TZ: "Europe/London" + + persistence: + enabled: true + path: downloads + storageClass: "" + existingClaim: "" + accessMode: ReadWriteOnce + size: 1Gi + additionalVolumes: [] + additionalMounts: [] + ## @section Prowlarr parameters ## @param prowlarr.enabled Whether to enable Prowlarr.