jellyfin.yaml 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. # prep:
  2. # Also run:
  3. # ansible microk8s --become -a 'chmod g+rw,o+rw /dev/vchiq'
  4. # ansible microk8s --become -a 'chmod g+rw,o+rw /dev/video*'
  5. # ansible microk8s --become -a 'chmod -R g+rw,o+rw /dev/dri'
  6. apiVersion: v1
  7. kind: Service
  8. metadata:
  9. name: jellyfin
  10. labels:
  11. run: jellyfin
  12. spec:
  13. ports:
  14. - name: http
  15. port: 80
  16. targetPort: 8096
  17. selector:
  18. run: jellyfin
  19. # type: LoadBalancer
  20. #status:
  21. # loadBalancer: {}
  22. ---
  23. apiVersion: v1
  24. kind: PersistentVolume
  25. metadata:
  26. name: jellyfin-tv
  27. spec:
  28. capacity:
  29. storage: 10Ti
  30. volumeMode: Filesystem
  31. accessModes:
  32. - ReadWriteMany
  33. persistentVolumeReclaimPolicy: Retain # Keep 4eva
  34. storageClassName: default
  35. mountOptions:
  36. - hard
  37. - nfsvers=3
  38. nfs:
  39. path: /mnt/DroboFS/Shares/Public/media/tv
  40. server: 10.42.42.10
  41. claimRef:
  42. name: jellyfin-tv
  43. namespace: default
  44. ---
  45. apiVersion: v1
  46. kind: PersistentVolume
  47. metadata:
  48. name: jellyfin-movies
  49. spec:
  50. capacity:
  51. storage: 10Ti
  52. volumeMode: Filesystem
  53. accessModes:
  54. - ReadWriteMany
  55. persistentVolumeReclaimPolicy: Retain # Keep 4eva
  56. storageClassName: default
  57. mountOptions:
  58. - hard
  59. - nfsvers=3
  60. nfs:
  61. path: /mnt/DroboFS/Shares/Public/media/movies
  62. server: 10.42.42.10
  63. claimRef:
  64. name: jellyfin-movies
  65. namespace: default
  66. ---
  67. apiVersion: v1
  68. kind: PersistentVolumeClaim
  69. metadata:
  70. name: jellyfin-tv
  71. spec:
  72. storageClassName: standard
  73. accessModes:
  74. - ReadWriteMany
  75. resources:
  76. requests:
  77. storage: 10Ti
  78. status: {}
  79. ---
  80. apiVersion: v1
  81. kind: PersistentVolumeClaim
  82. metadata:
  83. name: jellyfin-movies
  84. spec:
  85. storageClassName: standard
  86. accessModes:
  87. - ReadWriteMany
  88. resources:
  89. requests:
  90. storage: 10Ti
  91. status: {}
  92. ---
  93. apiVersion: v1
  94. kind: PersistentVolume
  95. metadata:
  96. name: jellyfin-config
  97. spec:
  98. capacity:
  99. storage: 5Mi
  100. volumeMode: Filesystem
  101. accessModes:
  102. - ReadWriteMany
  103. persistentVolumeReclaimPolicy: Retain # Keep 4eva
  104. storageClassName: default
  105. mountOptions:
  106. - hard
  107. - nfsvers=3
  108. nfs:
  109. path: /mnt/DroboFS/Shares/Kubernetes/volumes/static/jellyfin-config
  110. server: 10.42.42.10
  111. claimRef:
  112. name: jellyfin-config
  113. namespace: default
  114. ---
  115. apiVersion: v1
  116. kind: PersistentVolumeClaim
  117. metadata:
  118. name: jellyfin-config
  119. annotations:
  120. nfs.io/storage-path: "jellyfin-config"
  121. spec:
  122. storageClassName: default
  123. accessModes:
  124. - ReadWriteMany
  125. resources:
  126. requests:
  127. storage: 5Mi
  128. status: {}
  129. ---
  130. apiVersion: v1
  131. kind: PersistentVolumeClaim
  132. metadata:
  133. name: jellyfin-downloads
  134. annotations:
  135. nfs.io/storage-path: "jellyfin-downloads"
  136. spec:
  137. storageClassName: default
  138. accessModes:
  139. - ReadWriteMany
  140. resources:
  141. requests:
  142. storage: 5Mi
  143. status: {}
  144. ---
  145. apiVersion: apps/v1
  146. kind: Deployment
  147. metadata:
  148. name: jellyfin
  149. spec:
  150. replicas: 1
  151. selector:
  152. matchLabels:
  153. run: jellyfin
  154. strategy:
  155. type: Recreate
  156. template:
  157. metadata:
  158. labels:
  159. run: jellyfin
  160. spec:
  161. terminationGracePeriodSeconds: 30
  162. containers:
  163. - image: linuxserver/jellyfin:latest
  164. imagePullPolicy: "Always"
  165. name: jellyfin
  166. env:
  167. - name: PUID
  168. value: "1001"
  169. - name: GUID
  170. value: "1001"
  171. - name: TZ
  172. value: US/Michigan
  173. # - name: JELLYFIN_PublishedServerUrl
  174. # value: jellyfin.monkeybox.org
  175. ports:
  176. - containerPort: 8096
  177. resources: {}
  178. volumeMounts:
  179. - mountPath: /config
  180. name: jellyfin-config
  181. - mountPath: /data/tvshows
  182. name: jellyfin-tv
  183. - mountPath: /data/movies
  184. name: jellyfin-movies
  185. # - mountPath: /opt/vc/lib
  186. # name: vc-lib
  187. - mountPath: /dev/vcsm-cma
  188. name: vcsm-cma
  189. - mountPath: /dev/vchiq
  190. name: vchiq
  191. - mountPath: /dev/video10
  192. name: video10
  193. - mountPath: /dev/video11
  194. name: video11
  195. - mountPath: /dev/video12
  196. name: video12
  197. - mountPath: /dev/video13
  198. name: video13
  199. - mountPath: /dev/video14
  200. name: video14
  201. - mountPath: /dev/video15
  202. name: video15
  203. - mountPath: /dev/video16
  204. name: video16
  205. - mountPath: /dev/dri
  206. name: dri
  207. restartPolicy: Always
  208. volumes:
  209. - name: jellyfin-config
  210. persistentVolumeClaim:
  211. claimName: jellyfin-config
  212. - name: jellyfin-tv
  213. persistentVolumeClaim:
  214. claimName: jellyfin-tv
  215. - name: jellyfin-movies
  216. persistentVolumeClaim:
  217. claimName: jellyfin-movies
  218. # - name: vc-lib
  219. # hostPath:
  220. # path: /opt/vc/lib
  221. - name: vcsm-cma
  222. hostPath:
  223. path: /dev/vcsm-cma
  224. - name: vchiq
  225. hostPath:
  226. path: /dev/vchiq
  227. - name: video10
  228. hostPath:
  229. path: /dev/video10
  230. - name: video11
  231. hostPath:
  232. path: /dev/video11
  233. - name: video12
  234. hostPath:
  235. path: /dev/video12
  236. - name: video13
  237. hostPath:
  238. path: /dev/video13
  239. - name: video14
  240. hostPath:
  241. path: /dev/video14
  242. - name: video15
  243. hostPath:
  244. path: /dev/video15
  245. - name: video16
  246. hostPath:
  247. path: /dev/video16
  248. - name: dri
  249. hostPath:
  250. path: /dev/dri
  251. dnsPolicy: "None"
  252. dnsConfig:
  253. nameservers:
  254. - 10.42.42.239
  255. - 10.42.42.1
  256. searches:
  257. - default.svc.cluster.local
  258. - svc.cluster.local
  259. - cluster.local
  260. options:
  261. - name: ndots
  262. value: "2"
  263. - name: edns0
  264. - name: trust-ad
  265. status: {}
  266. ---
  267. # Hosting
  268. apiVersion: networking.k8s.io/v1
  269. kind: Ingress
  270. metadata:
  271. name: jellyfin-ingress
  272. annotations:
  273. cert-manager.io/cluster-issuer: "letsencrypt-prod"
  274. ## No basic auth for jellyfin
  275. ## type of authentication
  276. #nginx.ingress.kubernetes.io/auth-type: basic
  277. ## name of the secret that contains the user/password definitions
  278. #nginx.ingress.kubernetes.io/auth-secret: basic-auth
  279. ## message to display with an appropriate context why the authentication is required
  280. #nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Octoprint'
  281. spec:
  282. tls:
  283. - hosts:
  284. - jellyfin.monkeybox.org
  285. secretName: jellyfin-tls
  286. rules:
  287. - host: jellyfin.monkeybox.org
  288. http:
  289. paths:
  290. - path: /
  291. pathType: Prefix
  292. backend:
  293. service:
  294. name: jellyfin
  295. port:
  296. number: 8096