chore(jellyfin)!: ♻️ Migrate the helm chart to newer standard level (#40)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Larsandgithub-actions[bot] authored and GitHub committed 2024-11-07 08:15:51 -07:00 Unverified
1 parent efe3d47337
commit 7e21541fb2
15 files changed
+560 -529

No files matched your search

+23
View File
@@ -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/
+3 -3
View File
@@ -1,8 +1,6 @@
apiVersion: v2 apiVersion: v2
appVersion: 10.10.1
description: Jellyfin Media Server
name: jellyfin name: jellyfin
version: 1.5.0 description: A Helm chart for Jellyfin Media Server
type: application type: application
home: https://jellyfin.org/ home: https://jellyfin.org/
icon: https://jellyfin.org/images/logo.svg icon: https://jellyfin.org/images/logo.svg
@@ -10,3 +8,5 @@ keywords:
- jellyfin - jellyfin
- media - media
- self-hosted - self-hosted
version: 1.5.0
appVersion: 10.10.1
+44
View File
@@ -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.
+48 -44
View File
@@ -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) ![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:** <https://jellyfin.org/> **Homepage:** <https://jellyfin.org/>
@@ -52,27 +52,21 @@ helm install my-jellyfin jellyfin/jellyfin -f values.yaml
| Key | Type | Default | Description | | Key | Type | Default | Description |
|-----|------|---------|-------------| |-----|------|---------|-------------|
| affinity | object | `{}` | | | affinity | object | `{}` | Affinity rules for pod scheduling. |
| 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 | | deploymentStrategy | object | `{"type":"RollingUpdate"}` | Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`. |
| extraContainers | list | `[]` | additional sidecar containers to run inside the pod. | | 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. | | extraInitContainers | list | `[]` | additional init containers to run inside the pod. |
| extraPodAnnotations | object | `{}` | additional annotations applied to the pod | | fullnameOverride | string | `""` | Override the default full name of the chart. |
| extraPodLabels | object | `{}` | additional pod labels. Not used as a selector label. | | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy (Always, IfNotPresent, or Never). |
| extraVolumeMounts | list | `[]` | Define mount points for additional volumes. | | image.repository | string | `"docker.io/jellyfin/jellyfin"` | Container image repository for Jellyfin. |
| extraVolumes | list | `[]` | Define additional volumes to mount to the pod. | | image.tag | string | `""` | Jellyfin container image tag. Leave empty to automatically use the Chart's app version. |
| fullnameOverride | string | `""` | | | imagePullSecrets | list | `[]` | Image pull secrets to authenticate with private repositories. See: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ |
| image.pullPolicy | string | `"IfNotPresent"` | | | 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/ |
| image.repository | string | `"docker.io/jellyfin/jellyfin"` | Set cutom repository for jellyfin image | | jellyfin.args | list | `[]` | Additional arguments for the entrypoint command. |
| image.tag | string | `""` | Set jellyfin version which should be required since chart is updated with new versions automatically | | jellyfin.command | list | `[]` | Custom command to use as container entrypoint. |
| imagePullSecrets | list | `[]` | | | jellyfin.enableDLNA | bool | `false` | Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html |
| ingress.annotations | object | `{}` | | | jellyfin.env | list | `[]` | Additional environment variables for the container. |
| ingress.enabled | bool | `false` | | | livenessProbe | object | `{"initialDelaySeconds":10,"tcpSocket":{"port":"http"}}` | Configure liveness probe for Jellyfin. |
| 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. |
| metrics | object | `{"command":["bash","-c","sed 's,<EnableMetrics>false</EnableMetrics>,<EnableMetrics>true</EnableMetrics>,' -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 | object | `{"command":["bash","-c","sed 's,<EnableMetrics>false</EnableMetrics>,<EnableMetrics>true</EnableMetrics>,' -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.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 | | 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.scrapeTimeout | string | `"30s"` | Timeout for scraping metrics |
| metrics.serviceMonitor.targetLabels | list | `[]` | Target labels to add to the scraped metrics | | metrics.serviceMonitor.targetLabels | list | `[]` | Target labels to add to the scraped metrics |
| metrics.serviceMonitor.tlsConfig | object | `{}` | TLS configuration for scraping metrics | | metrics.serviceMonitor.tlsConfig | object | `{}` | TLS configuration for scraping metrics |
| nameOverride | string | `""` | | | nameOverride | string | `""` | Override the default name of the chart. |
| nodeSelector | object | `{}` | | | nodeSelector | object | `{}` | Node selector for pod scheduling. |
| persistence.config.accessMode | string | `"ReadWriteOnce"` | | | persistence.config.accessMode | string | `"ReadWriteOnce"` | |
| persistence.config.annotations | object | `{}` | Custom annotations to be added to the PVC | | persistence.config.annotations | object | `{}` | Custom annotations to be added to the PVC |
| persistence.config.enabled | bool | `false` | | | persistence.config.enabled | bool | `true` | set to false to use emptyDir |
| persistence.config.labels | object | `{}` | Custom labels to be added to the PVC | | persistence.config.size | string | `"5Gi"` | |
| 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.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.media.accessMode | string | `"ReadWriteOnce"` | | | persistence.media.accessMode | string | `"ReadWriteOnce"` | |
| persistence.media.annotations | object | `{}` | Custom annotations to be added to the PVC | | persistence.media.annotations | object | `{}` | Custom annotations to be added to the PVC |
| persistence.media.enabled | bool | `false` | | | persistence.media.enabled | bool | `true` | set to false to use emptyDir |
| persistence.media.labels | object | `{}` | Custom labels to be added to the PVC | | persistence.media.size | string | `"25Gi"` | |
| 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. |
| 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. |
| podSecurityContext | object | `{}` | SecurityContext configuration for the Jellyfin pod | | podLabels | object | `{}` | Additional labels to add to the pod. |
| readinessProbe | object | `{"enabled":true,"initialDelaySeconds":10}` | Larger libraries may need to increase the readinessProbe and livenessProbe timeouts. Start by increasing the initialDelaySeconds. | | podSecurityContext | object | `{}` | Security context for the pod. |
| replicaCount | int | `1` | Number of jellyfin replicas to start. Should be left at 1 | | readinessProbe | object | `{"initialDelaySeconds":10,"tcpSocket":{"port":"http"}}` | Configure readiness probe for Jellyfin. |
| resources | object | `{}` | | | replicaCount | int | `1` | Number of Jellyfin replicas to start. Should be left at 1. |
| runtimeClassName | string | `nil` | | | resources | object | `{}` | Resource requests and limits for the Jellyfin container. |
| securityContext | object | `{}` | SecurityContext configuration for the Jellyfin container | | runtimeClassName | string | `""` | Define a custom runtimeClassName for the pod. |
| service.annotations | object | `{}` | | | securityContext | object | `{}` | Security context for the container. |
| service.labels | object | `{}` | | | service.annotations | object | `{}` | Annotations for the service. |
| service.loadBalancerIP | string | `nil` | | | service.ipFamilies | list | `[]` | Supported IP families (IPv4, IPv6). |
| service.name | string | `"http"` | | | service.ipFamilyPolicy | string | `""` | Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/ |
| service.port | int | `8096` | | | service.labels | object | `{}` | Labels for the service. |
| service.type | string | `"ClusterIP"` | | | service.loadBalancerClass | string | `""` | Class of the LoadBalancer. |
| tolerations | list | `[]` | | | 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) Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
-19
View File
@@ -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 }}
+46 -17
View File
@@ -1,5 +1,3 @@
{{/* vim: set filetype=mustache: */}}
{{/* {{/*
Fail if command and metrics are set Fail if command and metrics are set
*/}} */}}
@@ -11,8 +9,8 @@ Fail if command and metrics are set
Expand the name of the chart. Expand the name of the chart.
*/}} */}}
{{- define "jellyfin.name" -}} {{- define "jellyfin.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end -}} {{- end }}
{{/* {{/*
Create a default fully qualified app name. 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. If release name contains chart name it will be used as a full name.
*/}} */}}
{{- define "jellyfin.fullname" -}} {{- define "jellyfin.fullname" -}}
{{- if .Values.fullnameOverride -}} {{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else -}} {{- else }}
{{- $name := default .Chart.Name .Values.nameOverride -}} {{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name -}} {{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} {{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else -}} {{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end -}} {{- end }}
{{- end -}} {{- end }}
{{- end -}} {{- end }}
{{/* {{/*
Create chart name and version as used by the chart label. Create chart name and version as used by the chart label.
*/}} */}}
{{- define "jellyfin.chart" -}} {{- define "jellyfin.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end -}} {{- 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 }}
-32
View File
@@ -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 -}}
+79 -136
View File
@@ -3,178 +3,121 @@ kind: Deployment
metadata: metadata:
name: {{ include "jellyfin.fullname" . }} name: {{ include "jellyfin.fullname" . }}
labels: labels:
app.kubernetes.io/name: {{ include "jellyfin.name" . }} {{- include "jellyfin.labels" . | nindent 4 }}
helm.sh/chart: {{ include "jellyfin.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
spec: spec:
{{- with .Values.deploymentStrategy }}
strategy: strategy:
type: Recreate {{- toYaml . | trim | nindent 4 }}
{{- end }}
replicas: {{ .Values.replicaCount }} replicas: {{ .Values.replicaCount }}
selector: selector:
matchLabels: matchLabels:
app.kubernetes.io/name: {{ include "jellyfin.name" . }} {{- include "jellyfin.selectorLabels" . | nindent 6 }}
app.kubernetes.io/instance: {{ .Release.Name }}
template: template:
metadata: metadata:
labels: {{- with .Values.podAnnotations }}
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- with .Values.extraPodLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.extraPodAnnotations }}
annotations: annotations:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
labels:
{{- include "jellyfin.labels" . | nindent 8 }}
{{- with .Values.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec: spec:
{{- with .Values.imagePullSecrets }} {{- with .Values.imagePullSecrets }}
imagePullSecrets: imagePullSecrets:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- if .Values.enableDLNA }} serviceAccountName: {{ include "jellyfin.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
{{- if .Values.jellyfin.enableDLNA }}
hostNetwork: true hostNetwork: true
{{- end }} {{- end }}
containers: containers:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{ if and .Values.image.command (not .Values.metrics.enabled) }}
command:
{{- toYaml .Values.image.command | nindent 12 }}
{{- end }}
{{ if .Values.metrics.enabled }}
command:
{{- toYaml .Values.metrics.command | nindent 12 }}
{{- end }}
{{ if .Values.image.args }}
args:
{{- toYaml .Values.image.args | nindent 12 }}
{{- end }}
{{ if .Values.extraEnvVars }}
env:
{{- toYaml .Values.extraEnvVars | nindent 12 }}
{{- end }}
{{ if .Values.securityContext }}
securityContext: securityContext:
{{- toYaml .Values.securityContext | nindent 12 }} {{- toYaml .Values.securityContext | nindent 12 }}
{{- end }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if and .Values.image.command (not .Values.metrics.enabled) }}
command:
{{- toYaml .Values.jellyfin.command | nindent 12 }}
{{- end }}
{{- if .Values.metrics.enabled }}
command:
{{- toYaml .Values.metrics.command | nindent 12 }}
{{- end }}
{{- with .Values.jellyfin.args }}
args:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.jellyfin.env }}
env:
{{- toYaml . | nindent 12 }}
{{- end }}
ports: ports:
- name: http - name: http
containerPort: 8096 containerPort: 8096
protocol: TCP protocol: TCP
{{ if .Values.enableDLNA }} {{- if .Values.jellyfin.enableDLNA }}
- name: dlna - name: dlna
containerPort: 1900 containerPort: 1900
hostPort: 1900 hostPort: 1900
protocol: UDP protocol: UDP
{{- end }} {{- end }}
{{ if .Values.livenessProbe.enabled }}
livenessProbe: livenessProbe:
{{ if .Values.livenessProbe.initialDelaySeconds }} {{- toYaml .Values.livenessProbe | nindent 12 }}
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 }}
readinessProbe: readinessProbe:
{{ if .Values.readinessProbe.initialDelaySeconds }} {{- toYaml .Values.readinessProbe | nindent 12 }}
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} resources:
{{- end }} {{- toYaml .Values.resources | nindent 12 }}
{{ 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 }}
volumeMounts: volumeMounts:
- mountPath: /config - mountPath: /config
name: config name: config
{{- if .Values.persistence.config.subPath }}
subPath: {{ .Values.persistence.config.subPath }}
{{- end }}
- mountPath: /media - mountPath: /media
name: media name: media
{{- if .Values.persistence.media.subPath }} {{- with .Values.volumeMounts }}
subPath: {{ .Values.persistence.media.subPath }} {{- toYaml . | nindent 12 }}
{{- end }} {{- end }}
{{- range .Values.persistence.extraExistingClaimMounts }} {{- with .Values.extraContainers }}
- name: {{ .name }} {{- toYaml . | nindent 8 }}
mountPath: {{ .mountPath }} {{- end }}
readOnly: {{ .readOnly }} {{- with .Values.initContainers }}
{{- 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 }}
initContainers: initContainers:
{{- toYaml .Values.extraInitContainers | nindent 10 }} {{- toYaml . | nindent 6 }}
{{- end }} {{- end }}
volumes: volumes:
- name: config - name: config
{{- if .Values.persistence.config.enabled }} {{- if .Values.persistence.config.enabled }}
persistentVolumeClaim: persistentVolumeClaim:
claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-config{{- end }} claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-config{{- end }}
{{- else }} {{- else }}
emptyDir: {} emptyDir: {}
{{- end }} {{- end }}
- name: media - name: media
{{- if .Values.persistence.media.enabled }} {{- if .Values.persistence.media.enabled }}
persistentVolumeClaim: persistentVolumeClaim:
claimName: {{ if .Values.persistence.media.existingClaim }}{{ .Values.persistence.media.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-media{{- end }} claimName: {{ if .Values.persistence.media.existingClaim }}{{ .Values.persistence.media.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-media{{- end }}
{{- else }} {{- else }}
emptyDir: {} emptyDir: {}
{{- end }} {{- end }}
{{- range .Values.persistence.extraExistingClaimMounts }} {{- with .Values.volumes }}
- name: {{ .name }} {{- toYaml . | nindent 8 }}
persistentVolumeClaim: {{- end }}
claimName: {{ .existingClaim }} {{- with .Values.nodeSelector }}
{{- end }}
{{- if .Values.extraVolumes }}
{{- toYaml .Values.extraVolumes | nindent 6 }}
{{- end }}
{{- with .Values.nodeSelector }}
nodeSelector: nodeSelector:
{{ toYaml . | indent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.affinity }} {{- with .Values.affinity }}
affinity: affinity:
{{ toYaml . | indent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.tolerations }} {{- with .Values.tolerations }}
tolerations: tolerations:
{{ toYaml . | indent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} {{- with .Values.runtimeClassName }}
{{- if .Values.runtimeClassName }} runtimeClassName: {{- . | quote }}
runtimeClassName: {{.Values.runtimeClassName}} {{- end }}
{{- end }}
+24 -31
View File
@@ -1,50 +1,43 @@
{{- if .Values.ingress.enabled -}} {{- if .Values.ingress.enabled }}
{{- $fullName := include "jellyfin.fullname" . -}}
{{- $servicePort := .Values.service.port -}}
{{- $ingressPath := .Values.ingress.path -}}
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: {{ $fullName }} name: {{ include "jellyfin.fullname" . }}
labels: labels:
app.kubernetes.io/name: {{ include "jellyfin.name" . }} {{- include "jellyfin.labels" . | nindent 4 }}
helm.sh/chart: {{ include "jellyfin.chart" . }} {{- with .Values.ingress.annotations }}
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 }}
annotations: annotations:
{{ toYaml . | indent 4 }} {{- toYaml . | nindent 4 }}
{{- end }} {{- end }}
spec: spec:
{{- if or (.Capabilities.APIVersions.Has "networking.k8s.io/v1/IngressClass") (.Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/IngressClass") }} {{- with .Values.ingress.className }}
{{- if .Values.ingress.ingressClassName }} ingressClassName: {{ . }}
ingressClassName: {{ .Values.ingress.ingressClassName }}
{{- end }} {{- end }}
{{- end }} {{- if .Values.ingress.tls }}
{{- if .Values.ingress.tls }}
tls: tls:
{{- range .Values.ingress.tls }} {{- range .Values.ingress.tls }}
- hosts: - hosts:
{{- range .hosts }} {{- range .hosts }}
- {{ . | quote }} - {{ . | quote }}
{{- end }} {{- end }}
secretName: {{ .secretName }} secretName: {{ .secretName }}
{{- end }}
{{- end }} {{- end }}
{{- end }}
rules: rules:
{{- range .Values.ingress.hosts }} {{- range .Values.ingress.hosts }}
- host: {{ . | quote }} - host: {{ .host | quote }}
http: http:
paths: paths:
- pathType: Prefix {{- range .paths }}
path: {{ $ingressPath }} - path: {{ .path }}
{{- with .pathType }}
pathType: {{ . }}
{{- end }}
backend: backend:
service: service:
name: {{ $fullName }} name: {{ include "jellyfin.fullname" $ }}
port: port:
name: http number: {{ $.Values.service.port }}
{{- end }} {{- end }}
{{- end }}
{{- end }} {{- end }}
-32
View File
@@ -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 -}}
@@ -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 }}
+43 -37
View File
@@ -1,52 +1,58 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: {{ template "jellyfin.fullname" . }} name: {{ include "jellyfin.fullname" . }}
labels: labels:
app.kubernetes.io/name: {{ include "jellyfin.name" . }} {{- include "jellyfin.labels" . | nindent 4 }}
helm.sh/chart: {{ include "jellyfin.chart" . }} {{- with .Values.service.labels }}
app.kubernetes.io/instance: {{ .Release.Name }} {{- toYaml . | nindent 4 }}
app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }}
{{- if .Values.service.labels }} {{- with .Values.service.annotations }}
{{ toYaml .Values.service.labels | indent 4 }}
{{- end }}
{{- with .Values.service.annotations }}
annotations: annotations:
{{ toYaml . | indent 4 }} {{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- 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 }}
{{- end }} {{- end }}
{{- if .Values.service.loadBalancerSourceRanges }} spec:
{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }}
type: ClusterIP
{{- with .Values.service.clusterIP }}
clusterIP: {{ . }}
{{- end }}
{{- else if eq .Values.service.type "LoadBalancer" }}
type: LoadBalancer
{{- with .Values.service.loadBalancerIP }}
loadBalancerIP: {{ . }}
{{- end }}
{{- with .Values.service.loadBalancerClass }}
loadBalancerClass: {{ . }}
{{- end }}
{{- with .Values.service.loadBalancerSourceRanges }}
loadBalancerSourceRanges: loadBalancerSourceRanges:
{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} {{- toYaml . | nindent 4 }}
{{- end -}} {{- end }}
{{- else }} {{- else }}
type: {{ .Values.service.type }} type: {{ .Values.service.type }}
{{- end }} {{- end }}
{{- if .Values.service.externalIPs }} {{- 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: externalIPs:
{{ toYaml .Values.service.externalIPs | indent 4 }} {{- toYaml . | nindent 4 }}
{{- end }} {{- end }}
{{- if .Values.service.externalTrafficPolicy }} {{- with .Values.service.externalTrafficPolicy }}
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} externalTrafficPolicy: {{ . }}
{{- end }} {{- end }}
ports: ports:
- name: {{ .Values.service.name }} - name: {{ .Values.service.portName | default "http" }}
port: {{ .Values.service.port }} port: {{ .Values.service.port }}
protocol: TCP protocol: TCP
targetPort: http targetPort: http
{{ if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
nodePort: {{.Values.service.nodePort}} nodePort: {{ .Values.service.nodePort }}
{{ end }} {{- end }}
selector: selector:
app.kubernetes.io/name: {{ include "jellyfin.name" . }} {{- include "jellyfin.selectorLabels" . | nindent 4 }}
app.kubernetes.io/instance: {{ .Release.Name }}
+24 -27
View File
@@ -6,39 +6,36 @@ metadata:
name: {{ include "jellyfin.fullname" . }} name: {{ include "jellyfin.fullname" . }}
{{- if .Values.metrics.serviceMonitor.namespace }} {{- if .Values.metrics.serviceMonitor.namespace }}
namespace: {{ tpl .Values.metrics.serviceMonitor.namespace . }} namespace: {{ tpl .Values.metrics.serviceMonitor.namespace . }}
{{- else }} {{- end }}
labels: labels:
app.kubernetes.io/name: {{ include "jellyfin.name" . }} {{- include "jellyfin.labels" . | nindent 4 }}
helm.sh/chart: {{ include "jellyfin.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- with .Values.metrics.serviceMonitor.labels }} {{- with .Values.metrics.serviceMonitor.labels }}
{{- tpl (toYaml . | nindent 4) $ }} {{- tpl (toYaml . | nindent 4) $ }}
{{- end }} {{- end }}
spec: spec:
endpoints: endpoints:
- port: {{ .Values.service.name }} - port: {{ .Values.service.name }}
{{- with .Values.metrics.serviceMonitor.interval }} {{- with .Values.metrics.serviceMonitor.interval }}
interval: {{ . }} interval: {{ . }}
{{- end }} {{- end }}
{{- with .Values.metrics.serviceMonitor.scrapeTimeout }} {{- with .Values.metrics.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ . }} scrapeTimeout: {{ . }}
{{- end }} {{- end }}
honorLabels: true honorLabels: true
path: {{ .Values.metrics.serviceMonitor.path }} path: {{ .Values.metrics.serviceMonitor.path }}
scheme: {{ .Values.metrics.serviceMonitor.scheme }} scheme: {{ .Values.metrics.serviceMonitor.scheme }}
{{- with .Values.metrics.serviceMonitor.tlsConfig }} {{- with .Values.metrics.serviceMonitor.tlsConfig }}
tlsConfig: tlsConfig:
{{- toYaml . | nindent 6 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.metrics.serviceMonitor.relabelings }} {{- with .Values.metrics.serviceMonitor.relabelings }}
relabelings: relabelings:
{{- toYaml . | nindent 6 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
{{- with .Values.metrics.serviceMonitor.metricRelabelings }} {{- with .Values.metrics.serviceMonitor.metricRelabelings }}
metricRelabelings: metricRelabelings:
{{- toYaml . | nindent 6 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
jobLabel: "{{ .Release.Name }}" jobLabel: "{{ .Release.Name }}"
selector: selector:
matchLabels: matchLabels:
@@ -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 }}
+168 -151
View File
@@ -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 replicaCount: 1
# -- Image pull secrets to authenticate with private repositories.
# See: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
imagePullSecrets: [] imagePullSecrets: []
image: image:
# -- Set cutom repository for jellyfin image # -- Container image repository for Jellyfin.
repository: docker.io/jellyfin/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: "" tag: ""
# -- Image pull policy (Always, IfNotPresent, or Never).
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
# -- Override the default name of the chart.
nameOverride: "" nameOverride: ""
# -- Override the default full name of the chart.
fullnameOverride: "" fullnameOverride: ""
# -- Setting this to true enables DLNA which requires the pod to be attached to the # -- Service account configuration. See: https://kubernetes.io/docs/concepts/security/service-accounts/
# host network in order to be useful - this can break things like ingress to the service serviceAccount:
# https://jellyfin.org/docs/general/networking/dlna.html # -- Specifies whether to create a service account.
enableDLNA: false 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: service:
name: http # -- Service type (ClusterIP, NodePort, or LoadBalancer).
type: ClusterIP 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 port: 8096
## Specify the nodePort value for the LoadBalancer and NodePort service types. # -- Name of the port in the service.
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport portName: service
## # -- Annotations for the service.
# 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
##
annotations: {} annotations: {}
# -- Labels for the service.
labels: {} labels: {}
## Use loadBalancerIP to request a specific static IP, # -- External traffic policy (Cluster or Local).
## otherwise leave blank
##
loadBalancerIP:
# loadBalancerSourceRanges: []
## Set the externalTrafficPolicy in the Service to either Cluster or Local
# externalTrafficPolicy: Cluster # 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 # -- Configuration for metrics collection and monitoring
metrics: metrics:
@@ -74,137 +220,8 @@ metrics:
# -- Target labels to add to the scraped metrics # -- Target labels to add to the scraped metrics
targetLabels: [] 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. # -- additional init containers to run inside the pod.
extraInitContainers: [] extraInitContainers: []
# -- additional sidecar containers to run inside the pod. # -- additional sidecar containers to run inside the pod.
extraContainers: [] 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