Kopiur¶
Kopiur (Kopia + Rust) is a Kopia-native Kubernetes backup operator written in Rust on kube-rs. It makes a kopia repository a first-class Kubernetes resource and separates the backup recipe from its invocation from its schedule, so backups can be triggered by cron, kubectl create, Argo Events, or a Helm hook — and a kopia snapshot's lifecycle is tied to its Snapshot CR by a finalizer + deletionPolicy.
The whole CRD surface is modeled as Rust enums so invalid states are unrepresentable and reconcilers handle every variant at compile time. For the high-level mental model start with Concepts.
Alpha
API group kopiur.home-operations.com, version v1alpha1. The CRD surface may still change between releases.
The 8 CRDs (kopiur.home-operations.com/v1alpha1)¶
| CRD | Scope | Layer | Purpose |
|---|---|---|---|
Repository |
Namespaced | Storage | A kopia repository owned by one namespace: backend, encryption, credentials. |
ClusterRepository |
Cluster | Storage | A shared repository for platform teams, gated by allowedNamespaces. |
SnapshotPolicy |
Namespaced | Recipe | What to back up: PVC sources, identity, retention, policy, hooks. Idempotent. |
Snapshot |
Namespaced | Invocation + Catalog | One kopia snapshot as a Kubernetes object. The universal trigger entry point. |
SnapshotSchedule |
Namespaced | Cron | When it runs: cron + jitter + timezone; creates Snapshot CRs. |
Restore |
Namespaced | Operation | Restore a snapshot to a PVC, or act as a passive volume-populator source. |
Maintenance |
Namespaced | Lifecycle | Schedules kopia maintenance quick + full with an ownership lease. |
RepositoryReplication |
Namespaced | Durability | Mirror a repository's blobs to a second backend on a schedule (the "2" in 3-2-1). |
Where to next¶
- How Kopia works — content-addressable dedup, snapshots, the
username@hostname:pathidentity model, encryption, maintenance — and why one shared repository is the recommended layout. - Why Kopiur is designed this way — the recipe/invocation/schedule split, repository-as-resource, the type-safety thesis, and snapshot-lifecycle-tied-to-CR.
- Getting started — the end-to-end walkthrough: install, first backup, and a verified restore in ~15 minutes.
- Scenarios — problem-driven, end-to-end walkthroughs: protect a database, recover deleted data, disaster recovery, migration, adopting an existing repo, verification drills.
- Installation — prerequisites, install modes, and the CRD-lifecycle caveat.
- Repositories & backends — point Kopiur at S3, Azure, GCS, B2, a NAS, or rclone.
- Backups & schedules and Restores — the recipe/invocation/schedule model and reading data back.
- Troubleshooting — when something doesn't go green.
- GitOps (Flux / Argo) — kstatus health,
kubectl wait, managed-by/ownerRefs, drift-free applies. - Field reference — every field of all 8 CRDs: type, default, immutability.
- API reference (rustdoc) — the generated Rust API docs for every crate in the workspace.
- API conventions and Observability — developer notes.