jellyfin.yaml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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. limits:
  179. memory: "2Gi"
  180. cpu: "1500m"
  181. requests:
  182. memory: "2Gi"
  183. cpu: "1500m"
  184. volumeMounts:
  185. - mountPath: /config
  186. name: jellyfin-config
  187. - mountPath: /data/tvshows
  188. name: jellyfin-tv
  189. - mountPath: /data/movies
  190. name: jellyfin-movies
  191. # - mountPath: /opt/vc/lib
  192. # name: vc-lib
  193. - mountPath: /dev/vcsm-cma
  194. name: vcsm-cma
  195. - mountPath: /dev/vchiq
  196. name: vchiq
  197. - mountPath: /dev/video10
  198. name: video10
  199. - mountPath: /dev/video11
  200. name: video11
  201. - mountPath: /dev/video12
  202. name: video12
  203. - mountPath: /dev/video13
  204. name: video13
  205. - mountPath: /dev/video14
  206. name: video14
  207. - mountPath: /dev/video15
  208. name: video15
  209. - mountPath: /dev/video16
  210. name: video16
  211. - mountPath: /dev/dri
  212. name: dri
  213. restartPolicy: Always
  214. volumes:
  215. - name: jellyfin-config
  216. persistentVolumeClaim:
  217. claimName: jellyfin-config
  218. - name: jellyfin-tv
  219. persistentVolumeClaim:
  220. claimName: jellyfin-tv
  221. - name: jellyfin-movies
  222. persistentVolumeClaim:
  223. claimName: jellyfin-movies
  224. # - name: vc-lib
  225. # hostPath:
  226. # path: /opt/vc/lib
  227. - name: vcsm-cma
  228. hostPath:
  229. path: /dev/vcsm-cma
  230. - name: vchiq
  231. hostPath:
  232. path: /dev/vchiq
  233. - name: video10
  234. hostPath:
  235. path: /dev/video10
  236. - name: video11
  237. hostPath:
  238. path: /dev/video11
  239. - name: video12
  240. hostPath:
  241. path: /dev/video12
  242. - name: video13
  243. hostPath:
  244. path: /dev/video13
  245. - name: video14
  246. hostPath:
  247. path: /dev/video14
  248. - name: video15
  249. hostPath:
  250. path: /dev/video15
  251. - name: video16
  252. hostPath:
  253. path: /dev/video16
  254. - name: dri
  255. hostPath:
  256. path: /dev/dri
  257. dnsPolicy: "None"
  258. dnsConfig:
  259. nameservers:
  260. - 10.42.42.239
  261. - 10.42.42.1
  262. searches:
  263. - default.svc.cluster.local
  264. - svc.cluster.local
  265. - cluster.local
  266. options:
  267. - name: ndots
  268. value: "2"
  269. - name: edns0
  270. - name: trust-ad
  271. status: {}
  272. ---
  273. # Hosting
  274. apiVersion: networking.k8s.io/v1
  275. kind: Ingress
  276. metadata:
  277. name: jellyfin-ingress
  278. annotations:
  279. cert-manager.io/cluster-issuer: "letsencrypt-prod"
  280. ## No basic auth for jellyfin
  281. ## type of authentication
  282. #nginx.ingress.kubernetes.io/auth-type: basic
  283. ## name of the secret that contains the user/password definitions
  284. #nginx.ingress.kubernetes.io/auth-secret: basic-auth
  285. ## message to display with an appropriate context why the authentication is required
  286. #nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Octoprint'
  287. spec:
  288. tls:
  289. - hosts:
  290. - jellyfin.monkeybox.org
  291. secretName: jellyfin-tls
  292. rules:
  293. - host: jellyfin.monkeybox.org
  294. http:
  295. paths:
  296. - path: /
  297. pathType: Prefix
  298. backend:
  299. service:
  300. name: jellyfin
  301. port:
  302. number: 8096