123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- # prep:
- # Also run:
- # ansible microk8s --become -a 'chmod g+rw,o+rw /dev/vchiq'
- # ansible microk8s --become -a 'chmod g+rw,o+rw /dev/video*'
- # ansible microk8s --become -a 'chmod -R g+rw,o+rw /dev/dri'
- apiVersion: v1
- kind: Service
- metadata:
- name: jellyfin
- labels:
- run: jellyfin
- spec:
- ports:
- - name: http
- port: 80
- targetPort: 8096
- selector:
- run: jellyfin
- # type: LoadBalancer
- #status:
- # loadBalancer: {}
- ---
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: jellyfin-tv
- spec:
- capacity:
- storage: 10Ti
- volumeMode: Filesystem
- accessModes:
- - ReadWriteMany
- persistentVolumeReclaimPolicy: Retain # Keep 4eva
- storageClassName: default
- mountOptions:
- - hard
- - nfsvers=3
- nfs:
- path: /mnt/DroboFS/Shares/Public/media/tv
- server: 10.42.42.10
- claimRef:
- name: jellyfin-tv
- namespace: default
- ---
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: jellyfin-movies
- spec:
- capacity:
- storage: 10Ti
- volumeMode: Filesystem
- accessModes:
- - ReadWriteMany
- persistentVolumeReclaimPolicy: Retain # Keep 4eva
- storageClassName: default
- mountOptions:
- - hard
- - nfsvers=3
- nfs:
- path: /mnt/DroboFS/Shares/Public/media/movies
- server: 10.42.42.10
- claimRef:
- name: jellyfin-movies
- namespace: default
- ---
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: jellyfin-tv
- spec:
- storageClassName: standard
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 10Ti
- status: {}
- ---
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: jellyfin-movies
- spec:
- storageClassName: standard
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 10Ti
- status: {}
- ---
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: jellyfin-config
- spec:
- capacity:
- storage: 5Mi
- volumeMode: Filesystem
- accessModes:
- - ReadWriteMany
- persistentVolumeReclaimPolicy: Retain # Keep 4eva
- storageClassName: default
- mountOptions:
- - hard
- - nfsvers=3
- nfs:
- path: /mnt/DroboFS/Shares/Kubernetes/volumes/static/jellyfin-config
- server: 10.42.42.10
- claimRef:
- name: jellyfin-config
- namespace: default
- ---
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: jellyfin-config
- annotations:
- nfs.io/storage-path: "jellyfin-config"
- spec:
- storageClassName: default
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 5Mi
- status: {}
- ---
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: jellyfin-downloads
- annotations:
- nfs.io/storage-path: "jellyfin-downloads"
- spec:
- storageClassName: default
- accessModes:
- - ReadWriteMany
- resources:
- requests:
- storage: 5Mi
- status: {}
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: jellyfin
- spec:
- replicas: 1
- selector:
- matchLabels:
- run: jellyfin
- strategy:
- type: Recreate
- template:
- metadata:
- labels:
- run: jellyfin
- spec:
- terminationGracePeriodSeconds: 30
- containers:
- - image: linuxserver/jellyfin:latest
- imagePullPolicy: "Always"
- name: jellyfin
- env:
- - name: PUID
- value: "1001"
- - name: GUID
- value: "1001"
- - name: TZ
- value: US/Michigan
- # - name: JELLYFIN_PublishedServerUrl
- # value: jellyfin.monkeybox.org
- ports:
- - containerPort: 8096
- resources:
- limits:
- memory: "2Gi"
- cpu: "1500m"
- requests:
- memory: "2Gi"
- cpu: "1500m"
- volumeMounts:
- - mountPath: /config
- name: jellyfin-config
- - mountPath: /data/tvshows
- name: jellyfin-tv
- - mountPath: /data/movies
- name: jellyfin-movies
-
- # - mountPath: /opt/vc/lib
- # name: vc-lib
- - mountPath: /dev/vcsm-cma
- name: vcsm-cma
- - mountPath: /dev/vchiq
- name: vchiq
- - mountPath: /dev/video10
- name: video10
- - mountPath: /dev/video11
- name: video11
- - mountPath: /dev/video12
- name: video12
- - mountPath: /dev/video13
- name: video13
- - mountPath: /dev/video14
- name: video14
- - mountPath: /dev/video15
- name: video15
- - mountPath: /dev/video16
- name: video16
- - mountPath: /dev/dri
- name: dri
- restartPolicy: Always
- volumes:
- - name: jellyfin-config
- persistentVolumeClaim:
- claimName: jellyfin-config
- - name: jellyfin-tv
- persistentVolumeClaim:
- claimName: jellyfin-tv
- - name: jellyfin-movies
- persistentVolumeClaim:
- claimName: jellyfin-movies
- # - name: vc-lib
- # hostPath:
- # path: /opt/vc/lib
- - name: vcsm-cma
- hostPath:
- path: /dev/vcsm-cma
- - name: vchiq
- hostPath:
- path: /dev/vchiq
- - name: video10
- hostPath:
- path: /dev/video10
- - name: video11
- hostPath:
- path: /dev/video11
- - name: video12
- hostPath:
- path: /dev/video12
- - name: video13
- hostPath:
- path: /dev/video13
- - name: video14
- hostPath:
- path: /dev/video14
- - name: video15
- hostPath:
- path: /dev/video15
- - name: video16
- hostPath:
- path: /dev/video16
- - name: dri
- hostPath:
- path: /dev/dri
- dnsPolicy: "None"
- dnsConfig:
- nameservers:
- - 10.42.42.239
- - 10.42.42.1
- searches:
- - default.svc.cluster.local
- - svc.cluster.local
- - cluster.local
- options:
- - name: ndots
- value: "2"
- - name: edns0
- - name: trust-ad
- status: {}
- ---
- # Hosting
- apiVersion: networking.k8s.io/v1
- kind: Ingress
- metadata:
- name: jellyfin-ingress
- annotations:
- cert-manager.io/cluster-issuer: "letsencrypt-prod"
- ## No basic auth for jellyfin
- ## type of authentication
- #nginx.ingress.kubernetes.io/auth-type: basic
- ## name of the secret that contains the user/password definitions
- #nginx.ingress.kubernetes.io/auth-secret: basic-auth
- ## message to display with an appropriate context why the authentication is required
- #nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Octoprint'
- spec:
- tls:
- - hosts:
- - jellyfin.monkeybox.org
- secretName: jellyfin-tls
- rules:
- - host: jellyfin.monkeybox.org
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: jellyfin
- port:
- number: 8096
|