Files
jellyfin-helm/charts/jellyfin/values.yaml
T
Aleksei SviridkinandClaude df3e66c5f9 feat(probes): add startup probe for handling slow initial startup
Add startupProbe to give Jellyfin sufficient time to start, especially
with large media libraries or slow storage. This prevents Kubernetes
from killing the pod during initial startup phase.

Changes:
- Add startupProbe configuration in values.yaml with sensible defaults
  - failureThreshold: 30 (allows up to 5 minutes for startup)
  - periodSeconds: 10
  - Uses tcpSocket check on http port
- Update deployment.yaml to include startupProbe from values
- Bump chart version 2.5.0 -> 2.5.1
- Add changelog annotation for Artifact Hub

Benefits:
- Prevents pod restarts during slow initial startup (large media libraries)
- Liveness and readiness probes remain responsive after successful startup
- Fully configurable and can be disabled by setting startupProbe: null
- No breaking changes, backward compatible

The startup probe gives Jellyfin up to 5 minutes (30 attempts * 10 seconds)
to complete initialization. After the first success, liveness and readiness
probes take over with their normal timing.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
2025-11-06 00:04:39 +03:00

276 lines
8.4 KiB
YAML

# 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:
# -- Container image repository for Jellyfin.
repository: docker.io/jellyfin/jellyfin
# -- 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: ""
# -- 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: ''
# -- Define a priorityClassName for the pod.
priorityClassName: ""
# -- Define a dnsConfig. See https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config
# Use this to provide a custom DNS resolver configuration
dnsConfig: {}
# nameservers:
# - 192.0.2.1
# searches:
# - ns1.svc.cluster-domain.example
# - my.dns.search.suffix
# options:
# - name: ndots
# value: "2"
# - name: edns0
# -- Define a dnsPolicy. See https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy
dnsPolicy: ""
# -- Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`.
deploymentStrategy:
type: RollingUpdate
# -- Annotations to add to the deployment.
deploymentAnnotations: {}
service:
# # -- Custom name for the service port
# 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
# -- Name of the port in the service.
portName: service
# -- Annotations for the service.
annotations: {}
# -- Labels for the service.
labels: {}
# -- 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 startup probe for Jellyfin.
# This probe gives Jellyfin enough time to start, especially with large media libraries.
# After the startup probe succeeds once, liveness and readiness probes take over.
startupProbe:
tcpSocket:
port: http
initialDelaySeconds: 0
periodSeconds: 10
failureThreshold: 30
# With these defaults, Jellyfin has up to 5 minutes (30 * 10s) to start.
# Adjust failureThreshold if you have very large media libraries or slow storage.
# -- Configure liveness probe for Jellyfin.
# This probe is disabled during startup (startup probe handles initial checks).
livenessProbe:
initialDelaySeconds: 10
tcpSocket:
port: http
# successThreshold: 1
# failureThreshold: 3
# timeoutSeconds: 1
# periodSeconds: 10
# -- Configure readiness probe for Jellyfin.
# This probe is disabled during startup (startup probe handles initial checks).
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: {}
# -- Privileged pod settings for advanced use cases
podPrivileges:
# -- Enable hostIPC namespace. Required for NVIDIA MPS (Multi-Process Service) GPU sharing. See: https://docs.nvidia.com/deploy/mps/index.html
hostIPC: false
# -- Enable hostNetwork. Allows pod to use the host's network namespace.
hostNetwork: false
# -- Enable hostPID namespace. Allows pod to see processes on the host.
hostPID: false
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
# -- Type of volume for media storage (pvc, hostPath, emptyDir). If 'enabled' is false, 'emptyDir' is used regardless of this setting.
type: pvc
# -- Path on the host node for media storage, only used if type is 'hostPath'.
hostPath: ""
# -- PVC specific settings, only used if type is 'pvc'.
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:
# -- Enable or disable metrics collection
enabled: false
# -- Configuration for the Prometheus ServiceMonitor
serviceMonitor:
# -- Enable or disable the creation of a ServiceMonitor resource
enabled: false
# -- Namespace where the ServiceMonitor resource should be created. Defaults to Release.Namespace
namespace: ''
# -- Labels to add to the ServiceMonitor resource
labels: {}
# -- Interval at which metrics should be scraped
interval: 30s
# -- Timeout for scraping metrics
scrapeTimeout: 30s
# -- Path to scrape for metrics
path: /metrics
# -- Port to scrape for metrics
port: 8096
# -- Scheme to use for scraping metrics (http or https)
scheme: http
# -- TLS configuration for scraping metrics
tlsConfig: {}
# -- Relabeling rules for the scraped metrics
relabelings: []
# -- Relabeling rules for the metrics before ingestion
metricRelabelings: []
# -- Target labels to add to the scraped metrics
targetLabels: []
# -- additional init containers to run inside the pod.
extraInitContainers: []
# -- additional sidecar containers to run inside the pod.
extraContainers: []