diff --git a/charts/jellyfin/.helmignore b/charts/jellyfin/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/jellyfin/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/jellyfin/Chart.yaml b/charts/jellyfin/Chart.yaml index 1646646..11a9d30 100644 --- a/charts/jellyfin/Chart.yaml +++ b/charts/jellyfin/Chart.yaml @@ -1,8 +1,6 @@ apiVersion: v2 -appVersion: 10.10.1 -description: Jellyfin Media Server name: jellyfin -version: 1.5.0 +description: A Helm chart for Jellyfin Media Server type: application home: https://jellyfin.org/ icon: https://jellyfin.org/images/logo.svg @@ -10,3 +8,5 @@ keywords: - jellyfin - media - self-hosted +version: 1.5.0 +appVersion: 10.10.1 diff --git a/charts/jellyfin/MIGRATION.md b/charts/jellyfin/MIGRATION.md new file mode 100644 index 0000000..d49825a --- /dev/null +++ b/charts/jellyfin/MIGRATION.md @@ -0,0 +1,44 @@ +# Migration Guide + +## v1.x to v2.x + +### General + +1. The `enableDLNA` key has been moved from the top level to the `jellyfin` subkey. +2. Some renames have occurred to align with the standard: +```yaml +extraPodLabels -> podLabels +extraPodAnnotations -> podAnnotations +``` +3. The `extraEnvVars` key has been moved and renamed to `jellyfin.env`. +4. `extraVolumes` has been moved to `volumes`, and `extraVolumeMounts` has been moved to `volumeMounts`. +5. The `extraExistingClaimMounts` key has been removed, as it can now be represented with `volumes` and `volumeMounts`. + +### Service + +1. The `name` field has been renamed to `portName` for consistency. +2. The following fields have been added: +```yaml +# -- Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/ +ipFamilyPolicy: "" +# -- Supported IP families (IPv4, IPv6). +ipFamilies: [] +# -- Class of the LoadBalancer. +loadBalancerClass: "" +# -- External traffic policy (Cluster or Local). +# externalTrafficPolicy: Cluster +``` + +### Ingress + +1. The `className` field has been added for ingress class, as annotations are deprecated. +2. The `path` field has been moved under the `hosts` key to better represent the actual CRD, providing more fine-grained control. +3. The `labels` field has been added for additional labels. + +### Persistence + +PVC creation is now enabled by default to prevent data loss when the chart is used without a specific configuration. + +### Probes + +The liveness and readiness probes are now always enabled to ensure proper Kubernetes lifecycle management. Adjust the values accordingly if you have a large library. \ No newline at end of file diff --git a/charts/jellyfin/README.md b/charts/jellyfin/README.md index 88832c6..f9ffd0d 100644 --- a/charts/jellyfin/README.md +++ b/charts/jellyfin/README.md @@ -2,7 +2,7 @@ ![Version: 1.5.0](https://img.shields.io/badge/Version-1.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 10.10.1](https://img.shields.io/badge/AppVersion-10.10.1-informational?style=flat-square) -Jellyfin Media Server +A Helm chart for Jellyfin Media Server **Homepage:** @@ -52,27 +52,21 @@ helm install my-jellyfin jellyfin/jellyfin -f values.yaml | Key | Type | Default | Description | |-----|------|---------|-------------| -| affinity | object | `{}` | | -| enableDLNA | bool | `false` | Setting this to true enables DLNA which requires the pod to be attached to the host network in order to be useful - this can break things like ingress to the service https://jellyfin.org/docs/general/networking/dlna.html | +| affinity | object | `{}` | Affinity rules for pod scheduling. | +| deploymentStrategy | object | `{"type":"RollingUpdate"}` | Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`. | | extraContainers | list | `[]` | additional sidecar containers to run inside the pod. | -| extraEnvVars | list | `[]` | aditional environment variables passed to the pod | | extraInitContainers | list | `[]` | additional init containers to run inside the pod. | -| extraPodAnnotations | object | `{}` | additional annotations applied to the pod | -| extraPodLabels | object | `{}` | additional pod labels. Not used as a selector label. | -| extraVolumeMounts | list | `[]` | Define mount points for additional volumes. | -| extraVolumes | list | `[]` | Define additional volumes to mount to the pod. | -| fullnameOverride | string | `""` | | -| image.pullPolicy | string | `"IfNotPresent"` | | -| image.repository | string | `"docker.io/jellyfin/jellyfin"` | Set cutom repository for jellyfin image | -| image.tag | string | `""` | Set jellyfin version which should be required since chart is updated with new versions automatically | -| imagePullSecrets | list | `[]` | | -| ingress.annotations | object | `{}` | | -| ingress.enabled | bool | `false` | | -| ingress.hosts[0] | string | `"chart-example.local"` | | -| ingress.labels | object | `{}` | | -| ingress.path | string | `"/"` | | -| ingress.tls | list | `[]` | | -| livenessProbe | object | `{"enabled":true,"initialDelaySeconds":10}` | Larger libraries may need to increase the readinessProbe and livenessProbe timeouts. Start by increasing the initialDelaySeconds. | +| fullnameOverride | string | `""` | Override the default full name of the chart. | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy (Always, IfNotPresent, or Never). | +| image.repository | string | `"docker.io/jellyfin/jellyfin"` | Container image repository for Jellyfin. | +| image.tag | string | `""` | Jellyfin container image tag. Leave empty to automatically use the Chart's app version. | +| imagePullSecrets | list | `[]` | Image pull secrets to authenticate with private repositories. See: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ | +| ingress | object | `{"annotations":{},"className":"","enabled":false,"hosts":[{"host":"chart-example.local","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}],"tls":[]}` | Ingress configuration. See: https://kubernetes.io/docs/concepts/services-networking/ingress/ | +| jellyfin.args | list | `[]` | Additional arguments for the entrypoint command. | +| jellyfin.command | list | `[]` | Custom command to use as container entrypoint. | +| jellyfin.enableDLNA | bool | `false` | Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html | +| jellyfin.env | list | `[]` | Additional environment variables for the container. | +| livenessProbe | object | `{"initialDelaySeconds":10,"tcpSocket":{"port":"http"}}` | Configure liveness probe for Jellyfin. | | metrics | object | `{"command":["bash","-c","sed 's,false,true,' -i /config/config/system.xml && /jellyfin/jellyfin"],"enabled":false,"serviceMonitor":{"enabled":false,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","relabelings":[],"scheme":"http","scrapeTimeout":"30s","targetLabels":[],"tlsConfig":{}}}` | Configuration for metrics collection and monitoring | | metrics.enabled | bool | `false` | Enable or disable metrics collection | | metrics.serviceMonitor | object | `{"enabled":false,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","relabelings":[],"scheme":"http","scrapeTimeout":"30s","targetLabels":[],"tlsConfig":{}}` | Configuration for the Prometheus ServiceMonitor | @@ -87,34 +81,44 @@ helm install my-jellyfin jellyfin/jellyfin -f values.yaml | metrics.serviceMonitor.scrapeTimeout | string | `"30s"` | Timeout for scraping metrics | | metrics.serviceMonitor.targetLabels | list | `[]` | Target labels to add to the scraped metrics | | metrics.serviceMonitor.tlsConfig | object | `{}` | TLS configuration for scraping metrics | -| nameOverride | string | `""` | | -| nodeSelector | object | `{}` | | +| nameOverride | string | `""` | Override the default name of the chart. | +| nodeSelector | object | `{}` | Node selector for pod scheduling. | | persistence.config.accessMode | string | `"ReadWriteOnce"` | | | persistence.config.annotations | object | `{}` | Custom annotations to be added to the PVC | -| persistence.config.enabled | bool | `false` | | -| persistence.config.labels | object | `{}` | Custom labels to be added to the PVC | -| persistence.config.size | string | `"1Gi"` | | -| persistence.config.storageClass | string | `"-"` | If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | -| persistence.extraExistingClaimMounts | list | `[]` | Add aditional PVs/PVCs to our container. Check values.yaml to see an example. | +| persistence.config.enabled | bool | `true` | set to false to use emptyDir | +| persistence.config.size | string | `"5Gi"` | | +| persistence.config.storageClass | string | `""` | If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | | persistence.media.accessMode | string | `"ReadWriteOnce"` | | | persistence.media.annotations | object | `{}` | Custom annotations to be added to the PVC | -| persistence.media.enabled | bool | `false` | | -| persistence.media.labels | object | `{}` | Custom labels to be added to the PVC | -| persistence.media.size | string | `"10Gi"` | | -| persistence.media.storageClass | string | `"-"` | If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | -| podSecurityContext | object | `{}` | SecurityContext configuration for the Jellyfin pod | -| readinessProbe | object | `{"enabled":true,"initialDelaySeconds":10}` | Larger libraries may need to increase the readinessProbe and livenessProbe timeouts. Start by increasing the initialDelaySeconds. | -| replicaCount | int | `1` | Number of jellyfin replicas to start. Should be left at 1 | -| resources | object | `{}` | | -| runtimeClassName | string | `nil` | | -| securityContext | object | `{}` | SecurityContext configuration for the Jellyfin container | -| service.annotations | object | `{}` | | -| service.labels | object | `{}` | | -| service.loadBalancerIP | string | `nil` | | -| service.name | string | `"http"` | | -| service.port | int | `8096` | | -| service.type | string | `"ClusterIP"` | | -| tolerations | list | `[]` | | +| persistence.media.enabled | bool | `true` | set to false to use emptyDir | +| persistence.media.size | string | `"25Gi"` | | +| persistence.media.storageClass | string | `""` | If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. | +| podAnnotations | object | `{}` | Annotations to add to the pod. | +| podLabels | object | `{}` | Additional labels to add to the pod. | +| podSecurityContext | object | `{}` | Security context for the pod. | +| readinessProbe | object | `{"initialDelaySeconds":10,"tcpSocket":{"port":"http"}}` | Configure readiness probe for Jellyfin. | +| replicaCount | int | `1` | Number of Jellyfin replicas to start. Should be left at 1. | +| resources | object | `{}` | Resource requests and limits for the Jellyfin container. | +| runtimeClassName | string | `""` | Define a custom runtimeClassName for the pod. | +| securityContext | object | `{}` | Security context for the container. | +| service.annotations | object | `{}` | Annotations for the service. | +| service.ipFamilies | list | `[]` | Supported IP families (IPv4, IPv6). | +| service.ipFamilyPolicy | string | `""` | Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/ | +| service.labels | object | `{}` | Labels for the service. | +| service.loadBalancerClass | string | `""` | Class of the LoadBalancer. | +| service.loadBalancerIP | string | `""` | Specific IP address for the LoadBalancer. | +| service.loadBalancerSourceRanges | list | `[]` | Source ranges allowed to access the LoadBalancer. | +| service.port | int | `8096` | Port for the Jellyfin service. | +| service.portName | string | `"service"` | Name of the port in the service. | +| service.type | string | `"ClusterIP"` | Service type (ClusterIP, NodePort, or LoadBalancer). | +| serviceAccount | object | `{"annotations":{},"automount":true,"create":true,"name":""}` | Service account configuration. See: https://kubernetes.io/docs/concepts/security/service-accounts/ | +| serviceAccount.annotations | object | `{}` | Annotations for the service account. | +| serviceAccount.automount | bool | `true` | Automatically mount API credentials for the service account. | +| serviceAccount.create | bool | `true` | Specifies whether to create a service account. | +| serviceAccount.name | string | `""` | Custom name for the service account. If left empty, the name will be autogenerated. | +| tolerations | list | `[]` | Tolerations for pod scheduling. | +| volumeMounts | list | `[]` | Additional volume mounts for the Jellyfin container. | +| volumes | list | `[]` | Additional volumes to mount in the Jellyfin pod. | ---------------------------------------------- Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/jellyfin/templates/NOTES.txt b/charts/jellyfin/templates/NOTES.txt deleted file mode 100644 index 7d8adaf..0000000 --- a/charts/jellyfin/templates/NOTES.txt +++ /dev/null @@ -1,19 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range .Values.ingress.hosts }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "jellyfin.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get svc -w {{ include "jellyfin.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "jellyfin.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "jellyfin.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - Visit http://127.0.0.1:8080 to use your application - kubectl port-forward $POD_NAME 8080:80 -{{- end }} diff --git a/charts/jellyfin/templates/_helpers.tpl b/charts/jellyfin/templates/_helpers.tpl index bad69c0..c6eb357 100644 --- a/charts/jellyfin/templates/_helpers.tpl +++ b/charts/jellyfin/templates/_helpers.tpl @@ -1,5 +1,3 @@ -{{/* vim: set filetype=mustache: */}} - {{/* Fail if command and metrics are set */}} @@ -11,8 +9,8 @@ Fail if command and metrics are set Expand the name of the chart. */}} {{- define "jellyfin.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} {{/* Create a default fully qualified app name. @@ -20,21 +18,52 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this If release name contains chart name it will be used as a full name. */}} {{- define "jellyfin.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} {{/* Create chart name and version as used by the chart label. */}} {{- define "jellyfin.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "jellyfin.labels" -}} +helm.sh/chart: {{ include "jellyfin.chart" . }} +{{ include "jellyfin.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "jellyfin.selectorLabels" -}} +app.kubernetes.io/name: {{ include "jellyfin.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "jellyfin.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "jellyfin.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/charts/jellyfin/templates/config-pvc.yaml b/charts/jellyfin/templates/config-pvc.yaml deleted file mode 100644 index fe80ae5..0000000 --- a/charts/jellyfin/templates/config-pvc.yaml +++ /dev/null @@ -1,32 +0,0 @@ - -{{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ template "jellyfin.fullname" . }}-config - labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - helm.sh/chart: {{ include "jellyfin.chart" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} - {{- with .Values.persistence.config.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} - {{- with .Values.persistence.config.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - accessModes: - - {{ .Values.persistence.config.accessMode | quote }} - resources: - requests: - storage: {{ .Values.persistence.config.size | quote }} -{{- if .Values.persistence.config.storageClass }} -{{- if (eq "-" .Values.persistence.config.storageClass) }} - storageClassName: "" -{{- else }} - storageClassName: "{{ .Values.persistence.config.storageClass }}" -{{- end }} -{{- end }} -{{- end -}} diff --git a/charts/jellyfin/templates/deployment.yaml b/charts/jellyfin/templates/deployment.yaml index 9f05c5a..79ec969 100644 --- a/charts/jellyfin/templates/deployment.yaml +++ b/charts/jellyfin/templates/deployment.yaml @@ -3,178 +3,121 @@ kind: Deployment metadata: name: {{ include "jellyfin.fullname" . }} labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - helm.sh/chart: {{ include "jellyfin.chart" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} + {{- include "jellyfin.labels" . | nindent 4 }} spec: + {{- with .Values.deploymentStrategy }} strategy: - type: Recreate + {{- toYaml . | trim | nindent 4 }} + {{- end }} replicas: {{ .Values.replicaCount }} selector: matchLabels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} + {{- include "jellyfin.selectorLabels" . | nindent 6 }} template: metadata: - labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - {{- with .Values.extraPodLabels }} - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.extraPodAnnotations }} + {{- with .Values.podAnnotations }} annotations: {{- toYaml . | nindent 8 }} {{- end }} + labels: + {{- include "jellyfin.labels" . | nindent 8 }} + {{- with .Values.podLabels }} + {{- toYaml . | nindent 8 }} + {{- end }} spec: - {{- with .Values.imagePullSecrets }} + {{- with .Values.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} - {{- end }} - {{- if .Values.enableDLNA }} + {{- end }} + serviceAccountName: {{ include "jellyfin.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + {{- if .Values.jellyfin.enableDLNA }} hostNetwork: true - {{- end }} + {{- end }} containers: - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} - {{ if and .Values.image.command (not .Values.metrics.enabled) }} + {{- if and .Values.image.command (not .Values.metrics.enabled) }} command: - {{- toYaml .Values.image.command | nindent 12 }} - {{- end }} - {{ if .Values.metrics.enabled }} + {{- toYaml .Values.jellyfin.command | nindent 12 }} + {{- end }} + {{- if .Values.metrics.enabled }} command: {{- toYaml .Values.metrics.command | nindent 12 }} - {{- end }} - {{ if .Values.image.args }} + {{- end }} + {{- with .Values.jellyfin.args }} args: - {{- toYaml .Values.image.args | nindent 12 }} - {{- end }} - {{ if .Values.extraEnvVars }} + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.jellyfin.env }} env: - {{- toYaml .Values.extraEnvVars | nindent 12 }} - {{- end }} - {{ if .Values.securityContext }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - {{- end }} + {{- toYaml . | nindent 12 }} + {{- end }} ports: - name: http containerPort: 8096 protocol: TCP - {{ if .Values.enableDLNA }} + {{- if .Values.jellyfin.enableDLNA }} - name: dlna containerPort: 1900 hostPort: 1900 protocol: UDP - {{- end }} - {{ if .Values.livenessProbe.enabled }} + {{- end }} livenessProbe: - {{ if .Values.livenessProbe.initialDelaySeconds }} - initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} - {{- end }} - {{ if .Values.livenessProbe.periodSeconds }} - periodSeconds: {{ .Values.livenessProbe.periodSeconds }} - {{- end }} - {{ if .Values.livenessProbe.timeoutSeconds }} - timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} - {{- end }} - {{ if .Values.livenessProbe.failureThreshold }} - failureThreshold: {{ .Values.livenessProbe.failureThreshold }} - {{- end }} - {{ if .Values.livenessProbe.successThreshold }} - successThreshold: {{ .Values.livenessProbe.successThreshold }} - {{- end }} - tcpSocket: - port: http - {{- end }} - {{ if .Values.readinessProbe.enabled }} + {{- toYaml .Values.livenessProbe | nindent 12 }} readinessProbe: - {{ if .Values.readinessProbe.initialDelaySeconds }} - initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} - {{- end }} - {{ if .Values.readinessProbe.periodSeconds }} - periodSeconds: {{ .Values.readinessProbe.periodSeconds }} - {{- end }} - {{ if .Values.readinessProbe.timeoutSeconds }} - timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} - {{- end }} - {{ if .Values.readinessProbe.failureThreshold }} - failureThreshold: {{ .Values.readinessProbe.failureThreshold }} - {{- end }} - {{ if .Values.readinessProbe.successThreshold }} - successThreshold: {{ .Values.readinessProbe.successThreshold }} - {{- end }} - tcpSocket: - port: http - {{- end }} + {{- toYaml .Values.readinessProbe | nindent 12 }} + resources: + {{- toYaml .Values.resources | nindent 12 }} volumeMounts: - mountPath: /config name: config - {{- if .Values.persistence.config.subPath }} - subPath: {{ .Values.persistence.config.subPath }} - {{- end }} - mountPath: /media name: media - {{- if .Values.persistence.media.subPath }} - subPath: {{ .Values.persistence.media.subPath }} + {{- with .Values.volumeMounts }} + {{- toYaml . | nindent 12 }} {{- end }} - {{- range .Values.persistence.extraExistingClaimMounts }} - - name: {{ .name }} - mountPath: {{ .mountPath }} - readOnly: {{ .readOnly }} - {{- end }} - {{- if .Values.extraVolumeMounts }} - {{- toYaml .Values.extraVolumeMounts | nindent 12 }} - {{- end }} - {{- if .Values.extraContainers }} - {{- toYaml .Values.extraContainers | nindent 8 }} - {{- end }} - resources: -{{ toYaml .Values.resources | indent 12 }} - terminationMessagePolicy: FallbackToLogsOnError - securityContext: {{- toYaml .Values.securityContext | nindent 12 }} - {{- if .Values.extraInitContainers }} + {{- with .Values.extraContainers }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.initContainers }} initContainers: - {{- toYaml .Values.extraInitContainers | nindent 10 }} - {{- end }} + {{- toYaml . | nindent 6 }} + {{- end }} volumes: - - name: config - {{- if .Values.persistence.config.enabled }} - persistentVolumeClaim: - claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-config{{- end }} - {{- else }} - emptyDir: {} + - name: config + {{- if .Values.persistence.config.enabled }} + persistentVolumeClaim: + claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-config{{- end }} + {{- else }} + emptyDir: {} + {{- end }} + - name: media + {{- if .Values.persistence.media.enabled }} + persistentVolumeClaim: + claimName: {{ if .Values.persistence.media.existingClaim }}{{ .Values.persistence.media.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-media{{- end }} + {{- else }} + emptyDir: {} + {{- end }} + {{- with .Values.volumes }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} {{- end }} - - name: media - {{- if .Values.persistence.media.enabled }} - persistentVolumeClaim: - claimName: {{ if .Values.persistence.media.existingClaim }}{{ .Values.persistence.media.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-media{{- end }} - {{- else }} - emptyDir: {} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} {{- end }} - {{- range .Values.persistence.extraExistingClaimMounts }} - - name: {{ .name }} - persistentVolumeClaim: - claimName: {{ .existingClaim }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} {{- end }} - {{- if .Values.extraVolumes }} - {{- toYaml .Values.extraVolumes | nindent 6 }} + {{- with .Values.runtimeClassName }} + runtimeClassName: {{- . | quote }} {{- end }} - {{- with .Values.nodeSelector }} - nodeSelector: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: -{{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: -{{ toYaml . | indent 8 }} - {{- end }} - securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} - {{- if .Values.runtimeClassName }} - runtimeClassName: {{.Values.runtimeClassName}} - {{- end }} diff --git a/charts/jellyfin/templates/ingress.yaml b/charts/jellyfin/templates/ingress.yaml index 3f01fca..c1ebc87 100644 --- a/charts/jellyfin/templates/ingress.yaml +++ b/charts/jellyfin/templates/ingress.yaml @@ -1,50 +1,43 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "jellyfin.fullname" . -}} -{{- $servicePort := .Values.service.port -}} -{{- $ingressPath := .Values.ingress.path -}} +{{- if .Values.ingress.enabled }} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: {{ $fullName }} + name: {{ include "jellyfin.fullname" . }} labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - helm.sh/chart: {{ include "jellyfin.chart" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} - {{- with .Values.ingress.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -{{- with .Values.ingress.annotations }} + {{- include "jellyfin.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} annotations: -{{ toYaml . | indent 4 }} -{{- end }} -spec: - {{- if or (.Capabilities.APIVersions.Has "networking.k8s.io/v1/IngressClass") (.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/IngressClass") }} - {{- if .Values.ingress.ingressClassName }} - ingressClassName: {{ .Values.ingress.ingressClassName }} + {{- toYaml . | nindent 4 }} {{- end }} +spec: + {{- with .Values.ingress.className }} + ingressClassName: {{ . }} {{- end }} -{{- if .Values.ingress.tls }} + {{- if .Values.ingress.tls }} tls: - {{- range .Values.ingress.tls }} + {{- range .Values.ingress.tls }} - hosts: - {{- range .hosts }} + {{- range .hosts }} - {{ . | quote }} - {{- end }} + {{- end }} secretName: {{ .secretName }} + {{- end }} {{- end }} -{{- end }} rules: - {{- range .Values.ingress.hosts }} - - host: {{ . | quote }} + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} http: paths: - - pathType: Prefix - path: {{ $ingressPath }} + {{- range .paths }} + - path: {{ .path }} + {{- with .pathType }} + pathType: {{ . }} + {{- end }} backend: service: - name: {{ $fullName }} + name: {{ include "jellyfin.fullname" $ }} port: - name: http - {{- end }} + number: {{ $.Values.service.port }} + {{- end }} + {{- end }} {{- end }} diff --git a/charts/jellyfin/templates/media-pvc.yaml b/charts/jellyfin/templates/media-pvc.yaml deleted file mode 100644 index 8c55d47..0000000 --- a/charts/jellyfin/templates/media-pvc.yaml +++ /dev/null @@ -1,32 +0,0 @@ - -{{- if and .Values.persistence.media.enabled (not .Values.persistence.media.existingClaim) }} -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: {{ template "jellyfin.fullname" . }}-media - labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - helm.sh/chart: {{ include "jellyfin.chart" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} - {{- with .Values.persistence.media.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} - {{- with .Values.persistence.media.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - accessModes: - - {{ .Values.persistence.media.accessMode | quote }} - resources: - requests: - storage: {{ .Values.persistence.media.size | quote }} -{{- if .Values.persistence.media.storageClass }} -{{- if (eq "-" .Values.persistence.media.storageClass) }} - storageClassName: "" -{{- else }} - storageClassName: "{{ .Values.persistence.media.storageClass }}" -{{- end }} -{{- end }} -{{- end -}} diff --git a/charts/jellyfin/templates/persistentVolumeClaim.yaml b/charts/jellyfin/templates/persistentVolumeClaim.yaml new file mode 100644 index 0000000..c2abd23 --- /dev/null +++ b/charts/jellyfin/templates/persistentVolumeClaim.yaml @@ -0,0 +1,45 @@ +{{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "jellyfin.fullname" . }}-config + labels: + {{- include "jellyfin.labels" . | nindent 4 }} + {{- with .Values.persistence.config.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.config.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.config.size | quote }} + {{- with .Values.persistence.config.storageClass }} + storageClassName: {{ . | quote }} + {{- end }} +{{- end }} + +{{- if and .Values.persistence.media.enabled (not .Values.persistence.media.existingClaim) }} +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "jellyfin.fullname" . }}-media + labels: + {{- include "jellyfin.labels" . | nindent 4 }} + {{- with .Values.persistence.media.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.media.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.media.size | quote }} + {{- with .Values.persistence.media.storageClass }} + storageClassName: {{ . | quote }} + {{- end }} +{{- end }} diff --git a/charts/jellyfin/templates/service.yaml b/charts/jellyfin/templates/service.yaml index c0c07c4..518dc85 100644 --- a/charts/jellyfin/templates/service.yaml +++ b/charts/jellyfin/templates/service.yaml @@ -1,52 +1,58 @@ apiVersion: v1 kind: Service metadata: - name: {{ template "jellyfin.fullname" . }} + name: {{ include "jellyfin.fullname" . }} labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - helm.sh/chart: {{ include "jellyfin.chart" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- if .Values.service.labels }} -{{ toYaml .Values.service.labels | indent 4 }} -{{- end }} -{{- with .Values.service.annotations }} + {{- include "jellyfin.labels" . | nindent 4 }} + {{- with .Values.service.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.service.annotations }} annotations: -{{ toYaml . | indent 4 }} -{{- end }} + {{- toYaml . | nindent 4 }} + {{- end }} spec: -{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} + {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} type: ClusterIP - {{- if .Values.service.clusterIP }} - clusterIP: {{ .Values.service.clusterIP }} - {{end}} -{{- else if eq .Values.service.type "LoadBalancer" }} - type: {{ .Values.service.type }} - {{- if .Values.service.loadBalancerIP }} - loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- with .Values.service.clusterIP }} + clusterIP: {{ . }} + {{- end }} + {{- else if eq .Values.service.type "LoadBalancer" }} + type: LoadBalancer + {{- with .Values.service.loadBalancerIP }} + loadBalancerIP: {{ . }} {{- end }} - {{- if .Values.service.loadBalancerSourceRanges }} + {{- with .Values.service.loadBalancerClass }} + loadBalancerClass: {{ . }} + {{- end }} + {{- with .Values.service.loadBalancerSourceRanges }} loadBalancerSourceRanges: -{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} - {{- end -}} -{{- else }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- else }} type: {{ .Values.service.type }} -{{- end }} -{{- if .Values.service.externalIPs }} + {{- end }} + {{- if .Values.service.ipFamilyPolicy }} + ipFamilyPolicy: {{ .Values.service.ipFamilyPolicy }} + {{- end }} + {{- if .Values.service.ipFamilies }} + ipFamilies: + {{- toYaml .Values.service.ipFamilies | nindent 4 }} + {{- end }} + {{- with .Values.service.externalIPs }} externalIPs: -{{ toYaml .Values.service.externalIPs | indent 4 }} -{{- end }} - {{- if .Values.service.externalTrafficPolicy }} - externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.service.externalTrafficPolicy }} + externalTrafficPolicy: {{ . }} {{- end }} ports: - - name: {{ .Values.service.name }} + - name: {{ .Values.service.portName | default "http" }} port: {{ .Values.service.port }} protocol: TCP targetPort: http -{{ if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} - nodePort: {{.Values.service.nodePort}} -{{ end }} + {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} + nodePort: {{ .Values.service.nodePort }} + {{- end }} selector: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} + {{- include "jellyfin.selectorLabels" . | nindent 4 }} diff --git a/charts/jellyfin/templates/serviceMonitor.yaml b/charts/jellyfin/templates/serviceMonitor.yaml index 0c48709..126e8f7 100644 --- a/charts/jellyfin/templates/serviceMonitor.yaml +++ b/charts/jellyfin/templates/serviceMonitor.yaml @@ -6,39 +6,36 @@ metadata: name: {{ include "jellyfin.fullname" . }} {{- if .Values.metrics.serviceMonitor.namespace }} namespace: {{ tpl .Values.metrics.serviceMonitor.namespace . }} - {{- else }} + {{- end }} labels: - app.kubernetes.io/name: {{ include "jellyfin.name" . }} - helm.sh/chart: {{ include "jellyfin.chart" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/managed-by: {{ .Release.Service }} + {{- include "jellyfin.labels" . | nindent 4 }} {{- with .Values.metrics.serviceMonitor.labels }} {{- tpl (toYaml . | nindent 4) $ }} {{- end }} spec: endpoints: - - port: {{ .Values.service.name }} - {{- with .Values.metrics.serviceMonitor.interval }} - interval: {{ . }} - {{- end }} - {{- with .Values.metrics.serviceMonitor.scrapeTimeout }} - scrapeTimeout: {{ . }} - {{- end }} - honorLabels: true - path: {{ .Values.metrics.serviceMonitor.path }} - scheme: {{ .Values.metrics.serviceMonitor.scheme }} - {{- with .Values.metrics.serviceMonitor.tlsConfig }} - tlsConfig: - {{- toYaml . | nindent 6 }} - {{- end }} - {{- with .Values.metrics.serviceMonitor.relabelings }} - relabelings: - {{- toYaml . | nindent 6 }} - {{- end }} - {{- with .Values.metrics.serviceMonitor.metricRelabelings }} - metricRelabelings: - {{- toYaml . | nindent 6 }} - {{- end }} + - port: {{ .Values.service.name }} + {{- with .Values.metrics.serviceMonitor.interval }} + interval: {{ . }} + {{- end }} + {{- with .Values.metrics.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ . }} + {{- end }} + honorLabels: true + path: {{ .Values.metrics.serviceMonitor.path }} + scheme: {{ .Values.metrics.serviceMonitor.scheme }} + {{- with .Values.metrics.serviceMonitor.tlsConfig }} + tlsConfig: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.metrics.serviceMonitor.relabelings }} + relabelings: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.metrics.serviceMonitor.metricRelabelings }} + metricRelabelings: + {{- toYaml . | nindent 8 }} + {{- end }} jobLabel: "{{ .Release.Name }}" selector: matchLabels: @@ -48,4 +45,4 @@ spec: targetLabels: {{- toYaml . | nindent 4 }} {{- end }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/jellyfin/templates/serviceaccount.yaml b/charts/jellyfin/templates/serviceaccount.yaml new file mode 100644 index 0000000..45cb067 --- /dev/null +++ b/charts/jellyfin/templates/serviceaccount.yaml @@ -0,0 +1,13 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "jellyfin.serviceAccountName" . }} + labels: + {{- include "jellyfin.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +automountServiceAccountToken: {{ .Values.serviceAccount.automount }} +{{- end }} diff --git a/charts/jellyfin/values.yaml b/charts/jellyfin/values.yaml index e568ad4..ba2cec1 100644 --- a/charts/jellyfin/values.yaml +++ b/charts/jellyfin/values.yaml @@ -1,43 +1,189 @@ -# -- Number of jellyfin replicas to start. Should be left at 1 +# Default values for Jellyfin. +# This is a YAML-formatted file. + +# -- Number of Jellyfin replicas to start. Should be left at 1. replicaCount: 1 +# -- Image pull secrets to authenticate with private repositories. +# See: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ imagePullSecrets: [] + image: - # -- Set cutom repository for jellyfin image + # -- Container image repository for Jellyfin. repository: docker.io/jellyfin/jellyfin - # -- Set jellyfin version which should be required since chart is updated with new versions automatically + # -- Jellyfin container image tag. Leave empty to automatically use the Chart's app version. tag: "" + # -- Image pull policy (Always, IfNotPresent, or Never). pullPolicy: IfNotPresent +# -- Override the default name of the chart. nameOverride: "" +# -- Override the default full name of the chart. fullnameOverride: "" -# -- Setting this to true enables DLNA which requires the pod to be attached to the -# host network in order to be useful - this can break things like ingress to the service -# https://jellyfin.org/docs/general/networking/dlna.html -enableDLNA: false +# -- Service account configuration. See: https://kubernetes.io/docs/concepts/security/service-accounts/ +serviceAccount: + # -- Specifies whether to create a service account. + create: true + # -- Automatically mount API credentials for the service account. + automount: true + # -- Annotations for the service account. + annotations: {} + # -- Custom name for the service account. If left empty, the name will be autogenerated. + name: "" + +# -- Annotations to add to the pod. +podAnnotations: {} +# -- Additional labels to add to the pod. +podLabels: {} + +# -- Security context for the pod. +podSecurityContext: {} + # fsGroup: 2000 + +# -- Security context for the container. +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +# -- Define a custom runtimeClassName for the pod. +runtimeClassName: '' + +# -- Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`. +deploymentStrategy: + type: RollingUpdate service: - name: http + # -- Service type (ClusterIP, NodePort, or LoadBalancer). type: ClusterIP + # -- Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/ + ipFamilyPolicy: "" + # -- Supported IP families (IPv4, IPv6). + ipFamilies: [] + # -- Specific IP address for the LoadBalancer. + loadBalancerIP: "" + # -- Class of the LoadBalancer. + loadBalancerClass: "" + # -- Source ranges allowed to access the LoadBalancer. + loadBalancerSourceRanges: [] + # -- Port for the Jellyfin service. port: 8096 - ## Specify the nodePort value for the LoadBalancer and NodePort service types. - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport - ## - # nodePort: - ## Provide any additional annotations which may be required. This can be used to - ## set the LoadBalancer service type to internal only. - ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer - ## + # -- Name of the port in the service. + portName: service + # -- Annotations for the service. annotations: {} + # -- Labels for the service. labels: {} - ## Use loadBalancerIP to request a specific static IP, - ## otherwise leave blank - ## - loadBalancerIP: - # loadBalancerSourceRanges: [] - ## Set the externalTrafficPolicy in the Service to either Cluster or Local + # -- External traffic policy (Cluster or Local). # externalTrafficPolicy: Cluster + # -- NodePort for the service (if applicable). + # nodePort: + +# -- Ingress configuration. See: https://kubernetes.io/docs/concepts/services-networking/ingress/ +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 + +# -- Resource requests and limits for the Jellyfin container. +resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +# -- Configure liveness probe for Jellyfin. +livenessProbe: + initialDelaySeconds: 10 + tcpSocket: + port: http + # successThreshold: 1 + # failureThreshold: 3 + # timeoutSeconds: 1 + # periodSeconds: 10 + +# -- Configure readiness probe for Jellyfin. +readinessProbe: + initialDelaySeconds: 10 + tcpSocket: + port: http + # successThreshold: 1 + # failureThreshold: 3 + # timeoutSeconds: 1 + # periodSeconds: 10 + +# -- Additional volumes to mount in the Jellyfin pod. +volumes: [] +# - name: foo +# secret: +# secretName: mysecret +# optional: false + +# -- Additional volume mounts for the Jellyfin container. +volumeMounts: [] +# - name: foo +# mountPath: "/etc/foo" +# readOnly: true + +# -- Node selector for pod scheduling. +nodeSelector: {} + +# -- Tolerations for pod scheduling. +tolerations: [] + +# -- Affinity rules for pod scheduling. +affinity: {} + +jellyfin: + # -- Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html + enableDLNA: false + # -- Custom command to use as container entrypoint. + command: [] + # -- Additional arguments for the entrypoint command. + args: [] + # -- Additional environment variables for the container. + env: [] + +persistence: + config: + # -- set to false to use emptyDir + enabled: true + accessMode: ReadWriteOnce + size: 5Gi + # -- Custom annotations to be added to the PVC + annotations: {} + # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. + storageClass: '' + ## -- Use an existing PVC for this mount + # existingClaim: '' + media: + # -- set to false to use emptyDir + enabled: true + accessMode: ReadWriteOnce + size: 25Gi + # -- Custom annotations to be added to the PVC + annotations: {} + # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. + storageClass: '' + ## -- Use an existing PVC for this mount + # existingClaim: '' # -- Configuration for metrics collection and monitoring metrics: @@ -74,137 +220,8 @@ metrics: # -- Target labels to add to the scraped metrics targetLabels: [] -ingress: - enabled: false - labels: {} - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - path: / - hosts: - - chart-example.local - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -persistence: - config: - enabled: false - # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. - storageClass: "-" - ## If you want to reuse an existing claim, you can pass the name of the PVC using - ## the existingClaim variable - # existingClaim: your-claim - # subPath: some-subpath - accessMode: ReadWriteOnce - size: 1Gi - # -- Custom labels to be added to the PVC - labels: {} - # -- Custom annotations to be added to the PVC - annotations: {} - media: - enabled: false - # -- If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. - storageClass: "-" - ## If you want to reuse an existing claim, you can pass the name of the PVC using - ## the existingClaim variable - # existingClaim: your-claim - # subPath: some-subpath - accessMode: ReadWriteOnce - size: 10Gi - # -- Custom labels to be added to the PVC - labels: {} - # -- Custom annotations to be added to the PVC - annotations: {} - - # -- Add aditional PVs/PVCs to our container. Check values.yaml to see an example. - extraExistingClaimMounts: [] - # - name: external-mount - # mountPath: /srv/external-mount - ## A manually managed Persistent Volume and Claim - ## If defined, PVC must be created manually before volume will be bound - # existingClaim: - # readOnly: true - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -# Define a custom runtimeClassName for the pod, e.g. "nvidia" if you have the NVIDIA GPU Operator installed -runtimeClassName: - -nodeSelector: {} - -tolerations: [] - -affinity: {} - -# -- Define additional volumes to mount to the pod. -extraVolumes: [] - #- name: renderD129 - # hostPath: - # path: /dev/dri/renderD129 - -# -- Define mount points for additional volumes. -extraVolumeMounts: [] - #- mountPath: /dev/dri/renderD129 - # name: renderD129 - -# -- additional pod labels. Not used as a selector label. -extraPodLabels: {} - -# -- aditional environment variables passed to the pod -extraEnvVars: [] - #- name: MY_ENV_VAR - # value: my-env-var-value - -# -- additional annotations applied to the pod -extraPodAnnotations: {} - # -- additional init containers to run inside the pod. extraInitContainers: [] # -- additional sidecar containers to run inside the pod. -extraContainers: [] - -# -- SecurityContext configuration for the Jellyfin pod -podSecurityContext: {} -# Jellyfin can be run as an unprivileged user with the following settings: - # runAsUser: 65534 - # runAsGroup: 65534 - -# -- SecurityContext configuration for the Jellyfin container -securityContext: {} -# For example, you might need to grant the following capabilities to enable hardware acceleration when mounting a /dev/dri device: - # capabilities: - # add: - # - "SYS_ADMIN" - # drop: - # - "ALL" - -# -- Larger libraries may need to increase the readinessProbe and livenessProbe timeouts. Start by increasing the initialDelaySeconds. -livenessProbe: - enabled: true - # failureThreshold: 3 - initialDelaySeconds: 10 - # periodSeconds: 10 - # successThreshold: 1 - # timeoutSeconds: 1 - -# -- Larger libraries may need to increase the readinessProbe and livenessProbe timeouts. Start by increasing the initialDelaySeconds. -readinessProbe: - enabled: true - # failureThreshold: 3 - initialDelaySeconds: 10 - # periodSeconds: 10 - # successThreshold: 1 - # timeoutSeconds: 1 +extraContainers: [] \ No newline at end of file