--- apiVersion: apps/v1 kind: Deployment metadata: name: jellyfin namespace: media labels: app: jellyfin app.kubernetes.io/name: jellyfin app.kubernetes.io/component: media-server spec: replicas: 1 strategy: type: Recreate # Required for single-instance apps with persistent storage selector: matchLabels: app: jellyfin template: metadata: labels: app: jellyfin spec: containers: - name: jellyfin image: jellyfin/jellyfin:10.11.5 ports: - name: http containerPort: 8096 protocol: TCP - name: discovery containerPort: 7359 protocol: UDP - name: dlna containerPort: 1900 protocol: UDP env: - name: JELLYFIN_PublishedServerUrl value: "http://jellyfin:8096" envFrom: - configMapRef: name: media-config volumeMounts: - name: config mountPath: /config subPath: jellyfin - name: media mountPath: /media readOnly: true - name: transcode mountPath: /config/transcodes resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "4Gi" cpu: "4000m" livenessProbe: httpGet: path: /health port: http initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 10 readinessProbe: httpGet: path: /health port: http initialDelaySeconds: 15 periodSeconds: 10 timeoutSeconds: 5 volumes: - name: config persistentVolumeClaim: claimName: media-config - name: media persistentVolumeClaim: claimName: media-library - name: transcode persistentVolumeClaim: claimName: media-transcode --- apiVersion: v1 kind: Service metadata: name: jellyfin namespace: media labels: app: jellyfin spec: type: NodePort selector: app: jellyfin ports: - name: http port: 8096 targetPort: 8096 nodePort: 30096 protocol: TCP - name: discovery port: 7359 targetPort: 7359 nodePort: 30359 protocol: UDP