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