apiVersion: batch/v1 kind: CronJob metadata: name: backups-nfs namespace: backups spec: schedule: "0 2 * * *" # Runs daily at 2 AM successfulJobsHistoryLimit: 1 failedJobsHistoryLimit: 1 jobTemplate: spec: template: spec: containers: - name: nfs-backup image: alpine:3.18 command: - /bin/sh - -c - | apk add --no-cache rsync # Backup /SSD/configs/ to backups/alaskartv rsync -av --delete /configs/ /backups/alaskartv/ # Backup Forgejo instance and DB mkdir /backups/git rsync -av --delete /git/forgejo-instance/ /backups/git/forgejo-instance/ rsync -av --delete /git/forgejo-db/ /backups/git/forgejo-db/ volumeMounts: - name: nfs-configs mountPath: /configs - name: nfs-git mountPath: /git - name: nfs-backups mountPath: /backups securityContext: runAsUser: 0 runAsGroup: 0 privileged: true restartPolicy: OnFailure volumes: - name: nfs-configs persistentVolumeClaim: claimName: nfs-ssd-configs-pvc - name: nfs-git persistentVolumeClaim: claimName: nfs-nas-git-pvc - name: nfs-backups persistentVolumeClaim: claimName: nfs-nas-backups-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-ssd-configs-pvc namespace: backups spec: accessModes: - ReadWriteMany resources: requests: storage: 3Ti storageClassName: "" volumeName: nfs-ssd-configs --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-nas-git-pvc namespace: backups spec: accessModes: - ReadWriteMany resources: requests: storage: 3Ti storageClassName: "" volumeName: nfs-nas-git --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-nas-backups-pvc namespace: backups spec: accessModes: - ReadWriteMany resources: requests: storage: 3Ti storageClassName: "" volumeName: nfs-nas-backups