436 lines
12 KiB
YAML
436 lines
12 KiB
YAML
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: config
|
|
namespace: jellyfin
|
|
data:
|
|
# file-like keys
|
|
system.xml: |
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<ServerConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
<LogFileRetentionDays>3</LogFileRetentionDays>
|
|
<IsStartupWizardCompleted>false</IsStartupWizardCompleted>
|
|
<EnableMetrics>true</EnableMetrics>
|
|
<EnableNormalizedItemByNameIds>true</EnableNormalizedItemByNameIds>
|
|
<IsPortAuthorized>true</IsPortAuthorized>
|
|
<QuickConnectAvailable>true</QuickConnectAvailable>
|
|
<EnableCaseSensitiveItemIds>true</EnableCaseSensitiveItemIds>
|
|
<DisableLiveTvChannelUserDataName>true</DisableLiveTvChannelUserDataName>
|
|
<MetadataPath />
|
|
<MetadataNetworkPath />
|
|
<PreferredMetadataLanguage>en</PreferredMetadataLanguage>
|
|
<MetadataCountryCode>US</MetadataCountryCode>
|
|
<SortReplaceCharacters>
|
|
<string>.</string>
|
|
<string>+</string>
|
|
<string>%</string>
|
|
</SortReplaceCharacters>
|
|
<SortRemoveCharacters>
|
|
<string>,</string>
|
|
<string>&</string>
|
|
<string>-</string>
|
|
<string>{</string>
|
|
<string>}</string>
|
|
<string>'</string>
|
|
</SortRemoveCharacters>
|
|
<SortRemoveWords>
|
|
<string>the</string>
|
|
<string>a</string>
|
|
<string>an</string>
|
|
</SortRemoveWords>
|
|
<MinResumePct>5</MinResumePct>
|
|
<MaxResumePct>90</MaxResumePct>
|
|
<MinResumeDurationSeconds>300</MinResumeDurationSeconds>
|
|
<MinAudiobookResume>5</MinAudiobookResume>
|
|
<MaxAudiobookResume>5</MaxAudiobookResume>
|
|
<LibraryMonitorDelay>60</LibraryMonitorDelay>
|
|
<ImageSavingConvention>Legacy</ImageSavingConvention>
|
|
<MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>Book</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers />
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>Movie</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers />
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>MusicVideo</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers>
|
|
<string>The Open Movie Database</string>
|
|
</DisabledMetadataFetchers>
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers>
|
|
<string>The Open Movie Database</string>
|
|
</DisabledImageFetchers>
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>Series</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers />
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>MusicAlbum</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers>
|
|
<string>TheAudioDB</string>
|
|
</DisabledMetadataFetchers>
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>MusicArtist</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers>
|
|
<string>TheAudioDB</string>
|
|
</DisabledMetadataFetchers>
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>BoxSet</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers />
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>Season</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers />
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
<MetadataOptions>
|
|
<ItemType>Episode</ItemType>
|
|
<DisabledMetadataSavers />
|
|
<LocalMetadataReaderOrder />
|
|
<DisabledMetadataFetchers />
|
|
<MetadataFetcherOrder />
|
|
<DisabledImageFetchers />
|
|
<ImageFetcherOrder />
|
|
</MetadataOptions>
|
|
</MetadataOptions>
|
|
<SkipDeserializationForBasicTypes>true</SkipDeserializationForBasicTypes>
|
|
<ServerName />
|
|
<UICulture>en-US</UICulture>
|
|
<SaveMetadataHidden>false</SaveMetadataHidden>
|
|
<ContentTypes />
|
|
<RemoteClientBitrateLimit>0</RemoteClientBitrateLimit>
|
|
<EnableFolderView>false</EnableFolderView>
|
|
<EnableGroupingIntoCollections>false</EnableGroupingIntoCollections>
|
|
<DisplaySpecialsWithinSeasons>true</DisplaySpecialsWithinSeasons>
|
|
<CodecsUsed />
|
|
<PluginRepositories>
|
|
<RepositoryInfo>
|
|
<Name>Jellyfin Stable</Name>
|
|
<Url>https://repo.jellyfin.org/releases/plugin/manifest-stable.json</Url>
|
|
<Enabled>true</Enabled>
|
|
</RepositoryInfo>
|
|
</PluginRepositories>
|
|
<EnableExternalContentInSuggestions>true</EnableExternalContentInSuggestions>
|
|
<ImageExtractionTimeoutMs>0</ImageExtractionTimeoutMs>
|
|
<PathSubstitutions />
|
|
<EnableSlowResponseWarning>true</EnableSlowResponseWarning>
|
|
<SlowResponseThresholdMs>500</SlowResponseThresholdMs>
|
|
<CorsHosts>
|
|
<string>*</string>
|
|
</CorsHosts>
|
|
<ActivityLogRetentionDays>30</ActivityLogRetentionDays>
|
|
<LibraryScanFanoutConcurrency>0</LibraryScanFanoutConcurrency>
|
|
<LibraryMetadataRefreshConcurrency>0</LibraryMetadataRefreshConcurrency>
|
|
<RemoveOldPlugins>false</RemoveOldPlugins>
|
|
<AllowClientLogUpload>true</AllowClientLogUpload>
|
|
</ServerConfiguration>
|
|
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: jellyfin
|
|
# Change "rook-ceph" provisioner prefix to match the operator namespace if needed
|
|
provisioner: rook-ceph.cephfs.csi.ceph.com
|
|
parameters:
|
|
# clusterID is the namespace where the rook cluster is running
|
|
# If you change this namespace, also change the namespace below where the secret namespaces are defined
|
|
clusterID: rook-ceph
|
|
|
|
# CephFS filesystem name into which the volume shall be created
|
|
fsName: jellyfin
|
|
|
|
# Ceph pool into which the volume shall be created
|
|
# Required for provisionVolume: "true"
|
|
pool: jellyfin-replicated
|
|
|
|
# The secrets contain Ceph admin credentials. These are generated automatically by the operator
|
|
# in the same namespace as the cluster.
|
|
csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
|
|
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
|
|
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
|
|
csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
|
|
csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
|
|
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
|
|
|
|
reclaimPolicy: Delete
|
|
---
|
|
apiVersion: v1
|
|
kind: PersistentVolumeClaim
|
|
metadata:
|
|
name: config
|
|
namespace: jellyfin
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteMany
|
|
resources:
|
|
requests:
|
|
storage: 2Gi
|
|
storageClassName: jellyfin
|
|
---
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: music-jelly
|
|
namespace: jellyfin
|
|
spec:
|
|
storageClassName: ""
|
|
capacity:
|
|
storage: 32Gi
|
|
accessModes:
|
|
- ReadWriteMany
|
|
persistentVolumeReclaimPolicy: Retain
|
|
mountOptions:
|
|
- dir_mode=0777
|
|
- file_mode=0777
|
|
- vers=3.0
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
readOnly: false
|
|
volumeHandle: "music" # make sure it's a unique id in the cluster
|
|
volumeAttributes:
|
|
source: "//samba.fileserver.svc.k8aux.undercloud.cf./music"
|
|
nodeStageSecretRef:
|
|
name: fileserver-smb-account
|
|
namespace: jellyfin
|
|
---
|
|
kind: PersistentVolumeClaim
|
|
apiVersion: v1
|
|
metadata:
|
|
name: music
|
|
namespace: jellyfin
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteMany
|
|
resources:
|
|
requests:
|
|
storage: 30Gi
|
|
volumeName: music-jelly
|
|
storageClassName: ""
|
|
---
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: movies
|
|
namespace: jellyfin
|
|
spec:
|
|
storageClassName: ""
|
|
capacity:
|
|
storage: 32Gi
|
|
accessModes:
|
|
- ReadWriteMany
|
|
persistentVolumeReclaimPolicy: Retain
|
|
mountOptions:
|
|
- dir_mode=0777
|
|
- file_mode=0777
|
|
- vers=3.0
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
readOnly: false
|
|
volumeHandle: "movies" # make sure it's a unique id in the cluster
|
|
volumeAttributes:
|
|
source: "//samba.fileserver.svc.k8aux.undercloud.cf./movies"
|
|
nodeStageSecretRef:
|
|
name: fileserver-smb-account
|
|
namespace: jellyfin
|
|
---
|
|
kind: PersistentVolumeClaim
|
|
apiVersion: v1
|
|
metadata:
|
|
name: tvshows
|
|
namespace: jellyfin
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteMany
|
|
resources:
|
|
requests:
|
|
storage: 30Gi
|
|
volumeName: tvshows
|
|
storageClassName: ""
|
|
---
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: tvshows
|
|
namespace: jellyfin
|
|
spec:
|
|
storageClassName: ""
|
|
capacity:
|
|
storage: 32Gi
|
|
accessModes:
|
|
- ReadWriteMany
|
|
persistentVolumeReclaimPolicy: Retain
|
|
mountOptions:
|
|
- dir_mode=0777
|
|
- file_mode=0777
|
|
- vers=3.0
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
readOnly: false
|
|
volumeHandle: "tvshows" # make sure it's a unique id in the cluster
|
|
volumeAttributes:
|
|
source: "//samba.fileserver.svc.k8aux.undercloud.cf./tvshows"
|
|
nodeStageSecretRef:
|
|
name: fileserver-smb-account
|
|
namespace: jellyfin
|
|
---
|
|
kind: PersistentVolumeClaim
|
|
apiVersion: v1
|
|
metadata:
|
|
name: movies
|
|
namespace: jellyfin
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteMany
|
|
resources:
|
|
requests:
|
|
storage: 30Gi
|
|
volumeName: movies
|
|
storageClassName: ""
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: jellyfin
|
|
namespace: jellyfin
|
|
labels:
|
|
app: jellyfin
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: jellyfin
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: jellyfin
|
|
spec:
|
|
dnsConfig:
|
|
options:
|
|
- name: ndots
|
|
value: "1"
|
|
#securityContext:
|
|
# runAsUser: 1000
|
|
# runAsGroup: 1000
|
|
# fsGroup: 1000
|
|
containers:
|
|
- name: jellyfin
|
|
image: linuxserver/jellyfin
|
|
imagePullPolicy: IfNotPresent
|
|
ports:
|
|
- containerPort: 8096
|
|
- containerPort: 8920
|
|
- containerPort: 7359 #udp
|
|
- containerPort: 1900 #udp
|
|
#livenessProbe:
|
|
# httpGet:
|
|
# path: /health
|
|
# port: 8096
|
|
# #httpHeaders:
|
|
# #- name: Custom-Header
|
|
# # value: Awesome
|
|
# initialDelaySeconds: 30
|
|
# periodSeconds: 5
|
|
env:
|
|
- name: PUID
|
|
value: "1000"
|
|
- name: PGID
|
|
value: "1000"
|
|
volumeMounts:
|
|
- mountPath: /config
|
|
name: config
|
|
- mountPath: /data/movies
|
|
name: movies
|
|
#- mountPath: "/config/system.xml"
|
|
# name: config-cm
|
|
# subPath: system.xml
|
|
volumes:
|
|
- name: config
|
|
persistentVolumeClaim:
|
|
claimName: config
|
|
readOnly: false
|
|
- name: movies
|
|
persistentVolumeClaim:
|
|
claimName: movies
|
|
readOnly: false
|
|
- name: config-cm
|
|
configMap:
|
|
name: config
|
|
items:
|
|
- key: "system.xml"
|
|
path: "system.xml"
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: jellyfin
|
|
namespace: jellyfin
|
|
spec:
|
|
ipFamilies:
|
|
- IPv6
|
|
- IPv4
|
|
ipFamilyPolicy: PreferDualStack
|
|
ports:
|
|
- name: http
|
|
port: 80
|
|
protocol: TCP
|
|
targetPort: 8096
|
|
- name: jelly1
|
|
port: 8920
|
|
protocol: TCP
|
|
targetPort: 8920
|
|
- name: jelly2
|
|
port: 7359
|
|
protocol: UDP
|
|
targetPort: 7359
|
|
- name: jelly3
|
|
port: 1900
|
|
protocol: UDP
|
|
targetPort: 1900
|
|
selector:
|
|
app: jellyfin
|
|
sessionAffinity: None
|
|
type: ClusterIP
|