# Kavita: self-hosted library for EPUB novels (LNReader "Kavita" plugin) and # CBZ manga (Mihon Kavita extension). Storage decision: see README.md. apiVersion: v1 kind: Namespace metadata: name: kavita --- # Kavita database, covers, logs and settings. apiVersion: v1 kind: PersistentVolume metadata: name: pv-hdd-kavita-config labels: app.kubernetes.io/part-of: kavita spec: capacity: storage: 5Gi accessModes: [ReadWriteOnce] persistentVolumeReclaimPolicy: Retain storageClassName: hdd-storage volumeMode: Filesystem local: path: /srv/hdd/kavita-config nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: [kubernets] --- # Book files. Lives inside the Filebrowser tree so uploads go through # Filebrowser; Kavita mounts it read-only. apiVersion: v1 kind: PersistentVolume metadata: name: pv-hdd-kavita-library labels: app.kubernetes.io/part-of: kavita spec: capacity: storage: 200Gi accessModes: [ReadOnlyMany] persistentVolumeReclaimPolicy: Retain storageClassName: hdd-storage volumeMode: Filesystem local: path: /srv/hdd/filebrowser/data/library nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: [kubernets] --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: kavita-config namespace: kavita spec: storageClassName: hdd-storage volumeName: pv-hdd-kavita-config accessModes: [ReadWriteOnce] resources: requests: storage: 5Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: kavita-library namespace: kavita spec: storageClassName: hdd-storage volumeName: pv-hdd-kavita-library accessModes: [ReadOnlyMany] resources: requests: storage: 200Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: kavita namespace: kavita spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: kavita template: metadata: labels: app: kavita spec: securityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 runAsNonRoot: true containers: - name: kavita image: jvmilazz0/kavita:0.9.1 ports: - containerPort: 5000 name: http securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] resources: requests: cpu: 250m memory: 512Mi limits: cpu: "2" memory: 1536Mi volumeMounts: - name: config mountPath: /kavita/config - name: library mountPath: /library readOnly: true readinessProbe: httpGet: path: / port: http initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 6 livenessProbe: tcpSocket: port: http initialDelaySeconds: 60 periodSeconds: 30 volumes: - name: config persistentVolumeClaim: claimName: kavita-config - name: library persistentVolumeClaim: claimName: kavita-library readOnly: true --- apiVersion: v1 kind: Service metadata: name: kavita namespace: kavita spec: type: ClusterIP selector: app: kavita ports: - name: http port: 5000 targetPort: http