From 4c1ad3e2236274b46cc1a69db4a910dbaa27f0b0 Mon Sep 17 00:00:00 2001 From: Vegard Hagen Date: Tue, 29 Apr 2025 20:53:21 +0200 Subject: [PATCH] feat(app): add audiobookshelf application Signed-off-by: Vegard Hagen --- k8s/apps/media/audiobookshelf/deployment.yaml | 79 +++++++++++++++++++ k8s/apps/media/audiobookshelf/http-route.yaml | 20 +++++ .../media/audiobookshelf/kustomization.yaml | 15 ++++ k8s/apps/media/audiobookshelf/ns.yaml | 4 + k8s/apps/media/audiobookshelf/pvc.yaml | 13 +++ k8s/apps/media/audiobookshelf/svc.yaml | 13 +++ k8s/apps/media/project.yaml | 2 + .../kubernetes/kubernetes_volumes.auto.tfvars | 4 + 8 files changed, 150 insertions(+) create mode 100644 k8s/apps/media/audiobookshelf/deployment.yaml create mode 100644 k8s/apps/media/audiobookshelf/http-route.yaml create mode 100644 k8s/apps/media/audiobookshelf/kustomization.yaml create mode 100644 k8s/apps/media/audiobookshelf/ns.yaml create mode 100644 k8s/apps/media/audiobookshelf/pvc.yaml create mode 100644 k8s/apps/media/audiobookshelf/svc.yaml diff --git a/k8s/apps/media/audiobookshelf/deployment.yaml b/k8s/apps/media/audiobookshelf/deployment.yaml new file mode 100644 index 0000000..f2dc622 --- /dev/null +++ b/k8s/apps/media/audiobookshelf/deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: audiobookshelf + namespace: audiobookshelf + labels: + app: audiobookshelf +spec: + replicas: 1 + selector: + matchLabels: + app: audiobookshelf + strategy: + type: Recreate + template: + metadata: + namespace: audiobookshelf + labels: + app: audiobookshelf + spec: + nodeSelector: + topology.kubernetes.io/zone: euclid + securityContext: + runAsNonRoot: true + runAsUser: 2501 + runAsGroup: 2501 + fsGroup: 2501 + fsGroupChangePolicy: OnRootMismatch + seccompProfile: + type: RuntimeDefault + containers: + - name: audiobookshelf + image: ghcr.io/advplyr/audiobookshelf:2.21.0 # renovate: docker=ghcr.io/advplyr/audiobookshelf + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: [ "ALL" ] + ports: + - name: http + containerPort: 80 + envFrom: + - configMapRef: + name: common-env + optional: true + volumeMounts: + - name: audiobookshelf + mountPath: /config + subPath: config + - name: audiobookshelf + mountPath: /metadata + subPath: metadata + - name: audiobooks + mountPath: /audiobooks + - name: podcasts + mountPath: /podcasts + - name: tmp + mountPath: /tmp + resources: + requests: + cpu: 50m + memory: 384Mi + limits: + cpu: 1000m + memory: 512Mi + volumes: + - name: audiobookshelf + persistentVolumeClaim: + claimName: audiobookshelf + - name: audiobooks + nfs: + server: 192.168.1.117 + path: /mnt/pool-0/data/media/audiobooks + - name: podcasts + nfs: + server: 192.168.1.117 + path: /mnt/pool-0/data/media/podcasts + - name: tmp + emptyDir: { } diff --git a/k8s/apps/media/audiobookshelf/http-route.yaml b/k8s/apps/media/audiobookshelf/http-route.yaml new file mode 100644 index 0000000..2b61a43 --- /dev/null +++ b/k8s/apps/media/audiobookshelf/http-route.yaml @@ -0,0 +1,20 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: audiobookshelf + namespace: audiobookshelf +spec: + parentRefs: + - name: internal + namespace: gateway + hostnames: + - "audiobookshelf.stonegarden.dev" + - "abs.stonegarden.dev" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: audiobookshelf + port: 80 diff --git a/k8s/apps/media/audiobookshelf/kustomization.yaml b/k8s/apps/media/audiobookshelf/kustomization.yaml new file mode 100644 index 0000000..13152df --- /dev/null +++ b/k8s/apps/media/audiobookshelf/kustomization.yaml @@ -0,0 +1,15 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +configMapGenerator: + - name: common-env + namespace: audiobookshelf + literals: + - TZ=Europe/Oslo + +resources: + - ns.yaml + - pvc.yaml + - svc.yaml + - http-route.yaml + - deployment.yaml diff --git a/k8s/apps/media/audiobookshelf/ns.yaml b/k8s/apps/media/audiobookshelf/ns.yaml new file mode 100644 index 0000000..9c35c7b --- /dev/null +++ b/k8s/apps/media/audiobookshelf/ns.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: audiobookshelf diff --git a/k8s/apps/media/audiobookshelf/pvc.yaml b/k8s/apps/media/audiobookshelf/pvc.yaml new file mode 100644 index 0000000..f82e9ee --- /dev/null +++ b/k8s/apps/media/audiobookshelf/pvc.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: audiobookshelf + namespace: audiobookshelf +spec: + storageClassName: proxmox-csi + volumeName: pv-audiobookshelf + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 4G diff --git a/k8s/apps/media/audiobookshelf/svc.yaml b/k8s/apps/media/audiobookshelf/svc.yaml new file mode 100644 index 0000000..b2d17dd --- /dev/null +++ b/k8s/apps/media/audiobookshelf/svc.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: audiobookshelf + namespace: audiobookshelf +spec: + type: ClusterIP + selector: + app: audiobookshelf + ports: + - name: web + port: 80 + targetPort: http diff --git a/k8s/apps/media/project.yaml b/k8s/apps/media/project.yaml index edd742e..e656c8c 100644 --- a/k8s/apps/media/project.yaml +++ b/k8s/apps/media/project.yaml @@ -11,6 +11,8 @@ spec: server: '*' - namespace: 'arr' server: '*' + - namespace: 'audiobookshelf' + server: '*' - namespace: 'plex' server: '*' - namespace: 'jellyfin' diff --git a/tofu/kubernetes/kubernetes_volumes.auto.tfvars b/tofu/kubernetes/kubernetes_volumes.auto.tfvars index c683b19..0dec447 100644 --- a/tofu/kubernetes/kubernetes_volumes.auto.tfvars +++ b/tofu/kubernetes/kubernetes_volumes.auto.tfvars @@ -19,6 +19,10 @@ kubernetes_volumes = { node = "euclid" size = "1G" } + pv-audiobookshelf = { + node = "euclid" + size = "4G" + } pv-remark42 = { node = "euclid" size = "1G"