diff --git a/apps/jellyfin/base/kustomization.yaml b/apps/jellyfin/base/kustomization.yaml new file mode 100644 index 0000000..bef5627 --- /dev/null +++ b/apps/jellyfin/base/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +helmCharts: + - name: jellyfin + repo: https://beluga-cloud.github.io/charts + version: 2.3.0 + releaseName: jellyfin + valuesFile: values.yaml \ No newline at end of file diff --git a/apps/jellyfin/base/values.yaml b/apps/jellyfin/base/values.yaml new file mode 100644 index 0000000..9a96575 --- /dev/null +++ b/apps/jellyfin/base/values.yaml @@ -0,0 +1,148 @@ +persistence: + config: + enabled: true + volumeClaimSpec: + accessModes: + - ReadWriteOnce + volumeName: jellyfin-config + storageClassName: local-path + data: + enabled: true + volumeClaimSpec: + accessModes: + - ReadWriteOnce + volumeName: jellyfin-data + storageClassName: local-path +jellyfin: + mediaVolumes: + - name: movies + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 256Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: jellyfin-mediavol-movies + namespace: jellyfin + hostPath: + path: "/mnt/nfs/AppData/jellyfin/media/movies" + type: "Directory" + - name: series + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 256Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: jellyfin-mediavol-series + namespace: jellyfin + hostPath: + path: "/mnt/nfs/AppData/jellyfin/media/series" + type: "Directory" + - name: music-videos + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 128Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: jellyfin-mediavol-music-videos + namespace: jellyfin + hostPath: + path: "/mnt/nfs/AppData/jellyfin/media/music-videos" + type: "Directory" + - name: short-videos + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 32Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: jellyfin-mediavol-short-videos + namespace: jellyfin + hostPath: + path: "/mnt/nfs/AppData/jellyfin/media/short-videos" + type: "Directory" + - name: gv + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 64Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: jellyfin-mediavol-gv + namespace: jellyfin + hostPath: + path: "/mnt/nfs/AppData/jellyfin/media/gv" + type: "Directory" + persistentTranscodes: true \ No newline at end of file diff --git a/apps/jellyfin/env/k3s-cluster/config.json b/apps/jellyfin/env/k3s-cluster/config.json new file mode 100644 index 0000000..cf1f2c3 --- /dev/null +++ b/apps/jellyfin/env/k3s-cluster/config.json @@ -0,0 +1,12 @@ +{ + "appName": "jellyfin", + "userGivenName": "jellyfin", + "namespace": "jellyfin", + "destNamespace": "jellyfin", + "destServer": "https://kubernetes.default.svc", + "srcPath": "apps/jellyfin/env/k3s-cluster", + "srcRepoURL": "https://github.com/3dwardch3ng/home-cluster-ops.git", + "srcTargetRevision": "", + "labels": null, + "annotations": null +} \ No newline at end of file diff --git a/apps/jellyfin/env/k3s-cluster/ingress.yaml b/apps/jellyfin/env/k3s-cluster/ingress.yaml new file mode 100644 index 0000000..a14ec80 --- /dev/null +++ b/apps/jellyfin/env/k3s-cluster/ingress.yaml @@ -0,0 +1,31 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: jellyfin-ingress + namespace: jellyfin + annotations: + nginx.ingress.kubernetes.io/ssl-redirect: "false" + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + rules: + - host: "jellyfin.cluster.local" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: jellyfin + port: + number: 8096 + - host: "jellyfin.cluster.edward.sydney" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: jellyfin + port: + number: 8096 \ No newline at end of file diff --git a/apps/jellyfin/env/k3s-cluster/kustomization.yaml b/apps/jellyfin/env/k3s-cluster/kustomization.yaml new file mode 100644 index 0000000..3ea3085 --- /dev/null +++ b/apps/jellyfin/env/k3s-cluster/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../../base + - ./ingress.yaml \ No newline at end of file diff --git a/resources/app-volumes/env/k3s-cluster/templates/jellyfin-config-pv.yaml b/resources/app-volumes/env/k3s-cluster/templates/jellyfin-config-pv.yaml new file mode 100644 index 0000000..7584d77 --- /dev/null +++ b/resources/app-volumes/env/k3s-cluster/templates/jellyfin-config-pv.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-config + namespace: jellyfin + labels: + type: local +spec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 250Mi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + local: + path: "/mnt/nfs/AppData/jellyfin/config" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux \ No newline at end of file diff --git a/resources/app-volumes/env/k3s-cluster/templates/jellyfin-data-pv.yaml b/resources/app-volumes/env/k3s-cluster/templates/jellyfin-data-pv.yaml new file mode 100644 index 0000000..d4659a7 --- /dev/null +++ b/resources/app-volumes/env/k3s-cluster/templates/jellyfin-data-pv.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-data + namespace: jellyfin + labels: + type: local +spec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 2Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + local: + path: "/mnt/nfs/AppData/jellyfin/data" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux \ No newline at end of file diff --git a/resources/namespaces/env/k3s-cluster/templates/jellyfin.yaml b/resources/namespaces/env/k3s-cluster/templates/jellyfin.yaml new file mode 100644 index 0000000..6329022 --- /dev/null +++ b/resources/namespaces/env/k3s-cluster/templates/jellyfin.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Namespace +metadata: + annotations: + argocd.argoproj.io/sync-options: Prune=false + creationTimestamp: null + name: jellyfin +spec: {} +status: {}