Kopiur¶
Kopiur, from Kopia plus 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 it splits a backup into three resources: the recipe, its invocation, and its schedule. That is what lets a backup be triggered by cron, by kubectl create, by Argo Events, or by a Helm hook. A kopia snapshot's lifecycle is tied to its Snapshot object through a finalizer and a deletionPolicy.
The whole CRD surface is modeled as Rust enums, so invalid states cannot be expressed 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 9 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, into one repository or a 1–8 multi-repository fan-out. 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). |
SnapshotReplication |
Namespaced | Durability | Copy selected snapshots from one repository into another on a schedule (kopia snapshot migrate). |
Where to next¶
- How Kopia works covers content-addressable dedup, snapshots, the
username@hostname:pathidentity model, encryption and maintenance, plus why one shared repository is the recommended layout. - Why Kopiur is designed this way covers the recipe, invocation and schedule split, repository-as-resource, the type-safety argument, and tying a snapshot's lifecycle to its object.
- Getting started is the end-to-end walkthrough: install, first backup, and a verified restore in about 15 minutes.
- Scenarios are problem-driven, end-to-end walkthroughs: protect a database, recover deleted data, disaster recovery, migration, adopting an existing repository, verification drills.
- Installation covers prerequisites, install modes, and the CRD-lifecycle caveat.
- Repositories & backends points Kopiur at S3, Azure, GCS, B2, a NAS, or rclone.
- Backups & schedules and Restores cover the recipe, invocation and schedule model, and reading data back.
- Troubleshooting is for when something does not go green.
- GitOps (Flux / Argo) covers kstatus health,
kubectl wait, managed-by and ownerRefs, and drift-free applies. - Field reference lists every field of all 9 CRDs, with type, default and immutability.
- API reference (rustdoc) is the generated Rust API docs for every crate in the workspace.
- API conventions and Observability are developer notes.