// the find
k8up-io/k8up
Kubernetes and OpenShift Backup Operator
K8up is a Kubernetes operator that wraps Restic to handle scheduled backups of PVCs and application-aware backups via pre-backup pods. It's been running in production since 2019 and covers the full backup lifecycle: schedule, backup, restore, archive, prune, and integrity checks. The target user is anyone running stateful workloads on Kubernetes or OpenShift who wants something more than a cron job calling restic directly.
The PreBackupPod concept is genuinely useful — you annotate a deployment and K8up spins up a sidecar pod that runs a dump command before the backup, which is the right way to handle databases without quiescing the main container. The operator splits into two binaries cleanly: a long-running reconciliation loop and a short-lived restic executor, so a crashing backup job doesn't destabilize the controller. The e2e test suite covers TLS, mTLS, annotated backups, PVC RWO edge cases, and restore verification using real KIND clusters — not mocks. Prometheus metrics and a bundled Grafana dashboard are included in the Helm chart, so you get backup success/failure visibility without extra plumbing.
The CRD count (Archive, Backup, Check, PreBackupPod, Prune, Restore, Schedule, Snapshot) is high for what is essentially a cron-plus-restic wrapper, and operators new to it will spend time understanding the relationships before getting a working schedule. There is no built-in cross-namespace backup policy — each namespace needs its own Schedule CR, which becomes painful at scale across dozens of tenant namespaces. The project is VSHN-backed and community activity outside that org is thin (1002 stars, 110 forks after years of production use), which is a real bus-factor concern if VSHN deprioritizes it. Snapshot restoration targeting a specific point-in-time across multiple PVCs is not atomic — you coordinate this yourself, which is fine for simple cases but breaks down for anything requiring consistency across volumes.