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.