Skip to content

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:path identity 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.