Ir al contenido principal
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Implementación en Kubernetes

Esta guía cubre la implementación de Jellyfin en Kubernetes usando el gráfico Helm oficial.

Requisitos previos

  • Clúster de Kubernetes (v1.19+)

  • Helm 3.x instalado

  • kubectl configurado para tu clúster

  • Almacenamiento suficiente para contenido multimedia y configuración

  • Controlador de Ingress (ej. traefik) para acceso externo (requerido para este tutorial, consulta la documentación oficial para alternativas)

Instalación

1. Añadir el repositorio de Helm

helm repo add jellyfin https://jellyfin.github.io/jellyfin-helm
helm repo update

2. Instalación personalizada

Para instrucciones completas de instalación y opciones de configuración, consulta el repositorio oficial del gráfico Helm de Jellyfin.

Crea un archivo values.yaml para personalización:

# values.yaml
replicaCount: 1

image:
pullPolicy: IfNotPresent

persistence:
config:
enabled: true
size: 5Gi
storageClass: ''
media:
enabled: true
size: 100Gi
storageClass: ''

ingress:
enabled: true
className: 'traefik'
hosts:
- host: jellyfin.example.com
paths:
- path: /
pathType: Prefix

resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 500m
memory: 1Gi

nodeSelector: {}
tolerations: []
affinity: {}

Instala con valores personalizados:

helm install jellyfin jellyfin/jellyfin -f values.yaml

Opciones de configuración

Tipos de servicio

Esta guía cubre el tipo de servicio ClusterIP (predeterminado) solo para acceso interno, con acceso externo mediante controlador de Ingress. Las alternativas incluyen servicios LoadBalancer y NodePort.

Persistencia

Usar reclamaciones de volumen persistente (PVC) existentes

persistence:
config:
enabled: true
existingClaim: 'jellyfin-config-pvc'
media:
enabled: true
existingClaim: 'jellyfin-media-pvc'

Crear nuevos PVC mediante Helm

persistence:
config:
enabled: true
size: 5Gi
storageClass: 'fast-ssd'
media:
enabled: true
size: 100Gi
storageClass: 'slow-hdd'

Ingress

Configuración básica de Ingress

ingress:
enabled: true
className: 'traefik'
hosts:
- host: jellyfin.example.com
paths:
- path: /
pathType: Prefix

Ingress avanzado con TLS

ingress:
enabled: true
className: 'traefik'
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.middlewares: default-jellyfin-buffering@kubernetescrd
hosts:
- host: jellyfin.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: jellyfin-tls
hosts:
- jellyfin.example.com

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: jellyfin-buffering
namespace: default
spec:
buffering:
maxRequestBodyBytes: 0

Acceder a Jellyfin

Reenvío de puertos (desarrollo)

kubectl port-forward svc/jellyfin 8096:8096

Accede en: http://localhost:8096

Acceso externo

Una vez configurado el Ingress, accede a Jellyfin en tu dominio configurado (ej. https://jellyfin.example.com).

Monitorización

Comprobaciones de estado

El gráfico incluye pruebas de preparación (readiness) y actividad (liveness):

livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 30
periodSeconds: 10

readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 5

Métricas

Habilita las métricas de Prometheus si están disponibles:

metrics:
enabled: true
serviceMonitor:
enabled: true

Solución de problemas

Problemas comunes

  1. Permiso denegado: Asegúrate de que el contexto de seguridad sea el adecuado para acceder al contenido multimedia

  2. Problemas de almacenamiento: Verifica que las reclamaciones de volumen persistente (PVC) estén vinculadas

  3. Acceso a la red: Comprueba el tipo de servicio y la configuración del Ingress

Comandos de depuración

# Check pod status
kubectl get pods -l app.kubernetes.io/name=jellyfin

# View logs
kubectl logs -f deployment/jellyfin

# Check service
kubectl get svc jellyfin

# Describe pod for events
kubectl describe pod -l app.kubernetes.io/name=jellyfin

Actualización

# Update repository
helm repo update

# Upgrade installation
helm upgrade jellyfin jellyfin/jellyfin

# Check upgrade status
helm status jellyfin

Desinstalación

# Remove Helm release
helm uninstall jellyfin

# Clean up persistent volumes (if needed)
kubectl delete pvc -l app.kubernetes.io/name=jellyfin

Configuración avanzada

Aceleración por hardware

Para aceleración por GPU, añade acceso al dispositivo y contexto de seguridad:

securityContext:
privileged: true

resources:
limits:
gpu.intel.com/i915: 1
# or nvidia.com/gpu: 1

extraVolumes:
- name: dri
hostPath:
path: /dev/dri

extraVolumeMounts:
- name: dri
mountPath: /dev/dri

Múltiples fuentes de contenido multimedia

Monta múltiples fuentes de contenido multimedia usando volúmenes adicionales:

volumes:
- name: movies
persistentVolumeClaim:
claimName: movies-pvc
- name: tv
persistentVolumeClaim:
claimName: tv-pvc

volumeMounts:
- name: movies
mountPath: /movies
- name: tv
mountPath: /tv

Variables de entorno personalizadas

extraEnvVars:
- name: JELLYFIN_PublishedServerUrl
value: 'https://jellyfin.example.com'
- name: JELLYFIN_CACHE_DIR
value: '/cache'

Para más opciones de configuración, consulta la documentación del gráfico Helm de Jellyfin.