apiVersion: v1 kind: Namespace metadata: name: audiobookshelf --- apiVersion: apps/v1 kind: Deployment metadata: name: audiobookshelf namespace: audiobookshelf spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: audiobookshelf template: metadata: labels: app: audiobookshelf spec: containers: - name: audiobookshelf image: ghcr.io/advplyr/audiobookshelf:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 name: http protocol: TCP env: - name: TZ value: "America/Toronto" volumeMounts: - name: audiobooks-volume mountPath: /audiobooks - name: podcasts-volume mountPath: /podcasts - name: config-volume mountPath: /config - name: metadata-volume mountPath: /metadata volumes: - name: audiobooks-volume persistentVolumeClaim: claimName: audiobookshelf-audiobooks - name: podcasts-volume persistentVolumeClaim: claimName: audiobookshelf-podcasts - name: config-volume persistentVolumeClaim: claimName: audiobookshelf-config - name: metadata-volume persistentVolumeClaim: claimName: audiobookshelf-metadata --- apiVersion: v1 kind: Service metadata: name: audiobookshelf-svc namespace: audiobookshelf spec: type: ClusterIP ports: - name: http port: 8080 targetPort: http # References the named string 'http' from the containerPort map protocol: TCP selector: app: audiobookshelf