Files
jellyfin-helm/charts/jellyfin/values.yaml
T
Aleksei SviridkinandClaude 68125eb3ea fix(ci): resolve yamllint errors and regenerate helm-docs
Fixed yamllint configuration and values.yaml issues:
- Added ignore patterns for templates/ and .github/ directories to yamllint config
  (Helm templates contain Go template syntax that conflicts with YAML syntax)
- Removed trailing spaces from values.yaml:123 (nodePort comment)
- Regenerated README.md with helm-docs to sync with values.yaml changes

yamllint now passes without errors (only warnings remain for long lines in docs).

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

507 lines
18 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
# -- Number of old ReplicaSets to retain for rollback history.
# Set to 0 to disable revision history (not recommended).
# If not specified, Kubernetes defaults to 10.
# See: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#revision-history-limit
revisionHistoryLimit: 3
# -- 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/
# Options: SingleStack, PreferDualStack, RequireDualStack
# For IPv6-only clusters, use "SingleStack" with ipFamilies: ["IPv6"]
# For dual-stack, use "PreferDualStack" or "RequireDualStack" with ipFamilies: ["IPv4", "IPv6"] or ["IPv6", "IPv4"]
ipFamilyPolicy: ""
# -- Supported IP families (IPv4, IPv6).
# Examples:
# IPv4 only: ["IPv4"]
# IPv6 only: ["IPv6"]
# Dual-stack (IPv4 primary): ["IPv4", "IPv6"]
# Dual-stack (IPv6 primary): ["IPv6", "IPv4"]
# Note: When using IPv6, ensure your health checks are compatible (consider using httpGet instead of tcpSocket)
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
# -- HTTPRoute configuration for Gateway API. See: https://gateway-api.sigs.k8s.io/
httpRoute:
enabled: false
annotations: {}
# -- Gateway references to attach this HTTPRoute to
parentRefs: []
# - name: my-gateway
# namespace: gateway-system
# sectionName: https
# -- Hostnames to match for this HTTPRoute
hostnames: []
# - jellyfin.example.com
# -- Rules for routing traffic
rules:
- matches:
- path:
type: PathPrefix
value: /
# -- 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).
# Uses httpGet for compatibility with both IPv4 and IPv6.
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
# successThreshold: 1
# failureThreshold: 3
# timeoutSeconds: 1
# periodSeconds: 10
# -- Configure readiness probe for Jellyfin.
# This probe is disabled during startup (startup probe handles initial checks).
# Uses httpGet for compatibility with both IPv4 and IPv6.
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
# 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: []
# -- Load environment variables from ConfigMap or Secret.
# See: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables
# Example:
# envFrom:
# - configMapRef:
# name: jellyfin-config
# - secretRef:
# name: jellyfin-secrets
envFrom: []
# -- Additional environment variables for the container.
# Example: Workaround for inotify limits (see Troubleshooting section in README)
# Example:
# env:
# - name: JELLYFIN_CACHE_DIR
# value: /cache
env: []
# - name: DOTNET_USE_POLLING_FILE_WATCHER
# value: "1"
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: ''
cache:
# -- set to false to use emptyDir
enabled: false
# -- Type of volume for cache storage (pvc, hostPath, emptyDir). If 'enabled' is false, 'emptyDir' is used regardless of this setting.
type: pvc
# -- Path on the host node for cache storage, only used if type is 'hostPath'.
hostPath: ""
# -- PVC specific settings, only used if type is 'pvc'.
accessMode: ReadWriteOnce
size: 10Gi
# -- 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: []
# -- DEPRECATED: Use extraInitContainers instead. Will be removed after 2030.
# @deprecated - This parameter is deprecated, use extraInitContainers instead
initContainers: []
# -- Additional init containers to run inside the pod.
# Init containers run before the main application container starts.
# See: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
# Example:
# extraInitContainers:
# - name: init-config
# image: busybox:1.35
# command: ['sh', '-c', 'echo "Initializing..." && sleep 5']
# volumeMounts:
# - name: config
# mountPath: /config
extraInitContainers: []
# -- additional sidecar containers to run inside the pod.
extraContainers: []
# -- Network Policy configuration for network isolation and security.
# Requires a CNI plugin that supports NetworkPolicy (Calico, Cilium, Weave, etc.).
# WARNING: NetworkPolicy cannot be enabled when hostNetwork is used (DLNA mode).
# The chart will fail with an error if both are enabled simultaneously.
networkPolicy:
# -- Enable NetworkPolicy for the Jellyfin pod.
# By default, this is disabled to maintain backward compatibility.
# When enabled, you can control which pods can access Jellyfin (ingress)
# and what external connections Jellyfin can make (egress).
enabled: false
# -- Policy types to enforce. Both ingress and egress policies can be enabled.
# See: https://kubernetes.io/docs/concepts/services-networking/network-policies/#policy-types
policyTypes:
- Ingress
- Egress
# -- Ingress rules configuration - controls which pods/namespaces can access Jellyfin.
ingress:
# -- Allow external access from any namespace and any pod.
# When true, any pod in the cluster can access Jellyfin (default behavior).
# When false, only pods matching podSelector/namespaceSelector can access.
# Set to false for production environments to restrict access.
allowExternal: true
# -- Custom pod selector for allowed ingress traffic.
# Only used when allowExternal is false.
# Allows you to specify which pods can access Jellyfin based on labels.
# Example - only allow pods with specific label:
# podSelector:
# matchLabels:
# jellyfin-client: "true"
podSelector: {}
# -- Namespace selector to allow cross-namespace ingress.
# Only used when allowExternal is false.
# Allows you to specify which namespaces can access Jellyfin.
# Example - only allow from ingress-nginx namespace:
# namespaceSelector:
# matchLabels:
# name: ingress-nginx
namespaceSelector: {}
# -- Additional custom ingress rules.
# Allows for complex scenarios not covered by the standard template.
# These rules are added as-is to the NetworkPolicy ingress section.
# Example - allow from monitoring namespace:
# customRules:
# - from:
# - namespaceSelector:
# matchLabels:
# name: monitoring
# ports:
# - protocol: TCP
# port: 8096
customRules: []
# -- Egress rules configuration - controls what external connections Jellyfin can make.
egress:
# -- Allow DNS resolution (required for Jellyfin to function).
# This adds an egress rule for kube-system namespace with kube-dns pods.
# DNS is required for resolving metadata provider domains and subtitle services.
# It is highly recommended to keep this enabled.
allowDNS: true
# -- DNS namespace where DNS service is running.
# Usually "kube-system" but can differ in some Kubernetes distributions.
dnsNamespace: kube-system
# -- DNS pod selector labels.
# Default selector is for kube-dns, but CoreDNS or other DNS providers
# may use different labels. Adjust if needed.
# Common alternatives:
# k8s-app: kube-dns (default)
# k8s-app: coredns
# app.kubernetes.io/name: coredns
dnsPodSelector:
k8s-app: kube-dns
# -- Allow all egress traffic (internet access for metadata, subtitles, images).
# When true, Jellyfin can connect to any external destination (0.0.0.0/0).
# This is the recommended default as Jellyfin needs internet access for:
# - Downloading movie/TV show metadata (TMDB, TheTVDB, OMDb)
# - Fetching poster images, fanart, and other artwork
# - Downloading subtitles (OpenSubtitles)
# - Updating plugins
# When false, you must configure restrictedEgress or customRules.
allowAllEgress: true
# -- Restricted egress mode for security-conscious deployments.
# Only used when allowAllEgress is false.
# Provides fine-grained control over outbound connections.
restrictedEgress:
# -- Allow HTTPS (443/TCP) for metadata providers.
# Most metadata providers (TMDB, TheTVDB, OpenSubtitles, Fanart.tv)
# use HTTPS, so this covers the majority of use cases.
# This allows connections to any IP on port 443.
allowMetadata: true
# -- Allow communication within the cluster (pod-to-pod).
# Useful if Jellyfin needs to connect to other services in the cluster.
# This allows connections to any pod in any namespace.
allowInCluster: true
# -- Additional IP CIDR blocks to allow egress.
# Useful for allowing specific IP ranges for metadata providers
# or other external services.
# Example - allow entire internet except private networks:
# allowedCIDRs:
# - 0.0.0.0/0
# Example - allow specific metadata provider IP ranges:
# allowedCIDRs:
# - 13.224.0.0/14 # CloudFront (used by many CDNs)
allowedCIDRs: []
# -- Additional custom egress rules.
# Allows for complex scenarios not covered by the standard template.
# These rules are added as-is to the NetworkPolicy egress section.
# Example - allow connections to specific database:
# customRules:
# - to:
# - podSelector:
# matchLabels:
# app: postgresql
# ports:
# - protocol: TCP
# port: 5432
customRules: []
# -- Prometheus metrics scraping configuration.
# Automatically allows ingress from Prometheus when metrics.serviceMonitor.enabled is true.
# This ensures Prometheus can scrape metrics without additional configuration.
metrics:
# -- Namespace where Prometheus is running.
# Leave empty to use the same namespace as Jellyfin.
# Set to the monitoring namespace if Prometheus is in a different namespace.
# Example: "monitoring" or "prometheus"
namespace: ""
# -- Pod selector for Prometheus pods.
# These labels must match your Prometheus deployment.
# The chart will automatically add an ingress rule for pods matching these labels.
# Default selector works with prometheus-operator and kube-prometheus-stack.
# Adjust if your Prometheus uses different labels.
podSelector:
app.kubernetes.io/name: prometheus