diff --git a/kubernetes/apps/jellyfin/app/ingress.yaml b/kubernetes/apps/jellyfin/app/ingress.yaml new file mode 100644 index 0000000..4393b1b --- /dev/null +++ b/kubernetes/apps/jellyfin/app/ingress.yaml @@ -0,0 +1,21 @@ +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.edward.sydney" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: jellyfin + port: + number: 8096 \ No newline at end of file diff --git a/kubernetes/apps/jellyfin/app/pv.yaml b/kubernetes/apps/jellyfin/app/pv.yaml new file mode 100644 index 0000000..66d8db5 --- /dev/null +++ b/kubernetes/apps/jellyfin/app/pv.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-config-pv + 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/hostname + operator: In + values: + - rpi5-cluster-node-3 +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-data-pv + 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/hostname + operator: In + values: + - rpi5-cluster-node-3 \ No newline at end of file diff --git a/kubernetes/apps/jellyfin/app/release.yaml b/kubernetes/apps/jellyfin/app/release.yaml new file mode 100644 index 0000000..780d316 --- /dev/null +++ b/kubernetes/apps/jellyfin/app/release.yaml @@ -0,0 +1,117 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: jellyfin + namespace: jellyfin +spec: + releaseName: jellyfin + targetNamespace: jellyfin + chart: + spec: + chart: jellyfin + sourceRef: + kind: HelmRepository + name: beluga-cloud + namespace: flux-system + interval: 1h + install: + remediation: + retries: 3 + values: + persistence: + config: + enabled: true + volumeClaimSpec: + accessModes: + - ReadWriteOnce + volumeName: jellyfin-config-pv + data: + enabled: true + volumeClaimSpec: + accessModes: + - ReadWriteOnce + volumeName: jellyfin-data-pv + jellyfin: + mediaVolumes: + - name: movies + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 8Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + local: + path: "/mnt/nfs/AppData/jellyfin/media/movies" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - rpi5-cluster-node-3 + - name: series + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 8Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + local: + path: "/mnt/nfs/AppData/jellyfin/media/series" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - rpi5-cluster-node-3 + - name: music + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 8Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + local: + path: "/mnt/nfs/AppData/jellyfin/media/music" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - rpi5-cluster-node-3 + - name: gv + readOnly: false + volumeSpec: + storageClassName: local-path + volumeMode: Filesystem + capacity: + storage: 8Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + local: + path: "/mnt/nfs/AppData/jellyfin/media/gv" + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - rpi5-cluster-node-3 + persistentTranscodes: true + diff --git a/kubernetes/apps/jellyfin/jellyfin.yaml b/kubernetes/apps/jellyfin/jellyfin.yaml new file mode 100644 index 0000000..c56770d --- /dev/null +++ b/kubernetes/apps/jellyfin/jellyfin.yaml @@ -0,0 +1,16 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: jellyfin + namespace: jellyfin +spec: + interval: 10m + timeout: 1m30s + retryInterval: 30s + path: ./kubernetes/apps/jellyfin/app + prune: true + sourceRef: + kind: GitRepository + namespace: flux-system + name: flux-system + diff --git a/kubernetes/infrastructure/repositories/repos/beluga-cloud.yaml b/kubernetes/infrastructure/repositories/repos/beluga-cloud.yaml new file mode 100644 index 0000000..b676748 --- /dev/null +++ b/kubernetes/infrastructure/repositories/repos/beluga-cloud.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: beluga-cloud + namespace: flux-system +spec: + interval: 6h + url: https://beluga-cloud.github.io/charts