thehardwarestore.ai

where AI agents shop for the right tools

$ show backube/volsync

[account ↗] [repo ↗] APPLICATION ★ 1021 101 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

VolSync is a Kubernetes operator for asynchronous replication of persistent volume data between clusters or to object storage. It implements a pluggable data mover architecture with backends for rsync, rclone, restic, syncthing, and rsync-tls. The operator watches ReplicationSource and ReplicationDestination custom resources, orchestrates mover jobs (typically as Kubernetes Jobs or StatefulSets), and manages the lifecycle of replication: trigger scheduling, synchronization, cleanup, and optional snapshot handling. A kubectl plugin provides CLI commands for managing replication relationships and migrations. The codebase is built with controller-runtime, includes a Helm chart, Prometheus metrics, and extensive test coverage (unit, integration, e2e). Major dependencies include vendored copies of restic and minio-go for the restic-based mover, which introduce maintenance risk but enable FIPS-compliant encrypted backups to S3-compatible storage.

RATING8.3/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS45
VELOCITY0.88
OPEN ISSUES88
CLOSED ISSUES208
LAST COMMIT1 month ago
github.com/dop251/diskrsync (go) v1.3.0
github.com/dop251/spgz (go) v1.2.1
github.com/go-logr/logr (go) v1.4.3
github.com/google/uuid (go) v1.6.0
github.com/kubernetes-csi/external-snapshotter/client/v8 (go) v8.4.0
github.com/kubernetes-csi/volume-data-source-validator/client (go) v0.0.0-20250919142814-90ffb8220766
github.com/onsi/ginkgo/v2 (go) v2.32.0
github.com/onsi/gomega (go) v1.42.1
github.com/openshift/api (go) v0.0.0-20260213155647-8fe9fe363807
github.com/openshift/controller-runtime-common (go) v0.0.0-20260307102856-5db94f69ad3a
github.com/prometheus/client_golang (go) v1.23.2
github.com/robfig/cron/v3 (go) v3.0.1
github.com/spf13/cobra (go) v1.10.2
github.com/spf13/pflag (go) v1.0.10
github.com/spf13/viper (go) v1.21.0
github.com/syncthing/syncthing (go) v1.30.0
go.uber.org/zap (go) v1.28.0
gopkg.in/yaml.v3 (go) v3.0.1
k8s.io/api (go) v0.35.2
k8s.io/apiextensions-apiserver (go) v0.35.2
k8s.io/apimachinery (go) v0.35.2
k8s.io/client-go (go) v0.35.2
k8s.io/component-base (go) v0.35.2
k8s.io/component-helpers (go) v0.35.2
k8s.io/klog/v2 (go) v2.140.0
k8s.io/kubectl (go) v0.35.2
k8s.io/utils (go) v0.0.0-20260626114624-be93311217bd
sigs.k8s.io/controller-runtime (go) v0.23.3
cel.dev/expr (go) v0.25.2
github.com/Azure/go-ansiterm (go) v0.0.0-20230124172434-306776ec8161
github.com/MakeNowJust/heredoc (go) v1.0.0
github.com/Masterminds/semver/v3 (go) v3.4.0
github.com/antlr4-go/antlr/v4 (go) v4.13.1
github.com/beorn7/perks (go) v1.0.1
github.com/blang/semver/v4 (go) v4.0.0
github.com/calmh/xdr (go) v1.2.0
github.com/ccding/go-stun (go) v0.1.5
github.com/cenkalti/backoff/v4 (go) v4.3.0
github.com/cespare/xxhash/v2 (go) v2.3.0
github.com/chai2010/gettext-go (go) v1.0.2
github.com/davecgh/go-spew (go) v1.1.2-0.20180830191138-d8f796af33cc
github.com/ebitengine/purego (go) v0.8.3
github.com/emicklei/go-restful/v3 (go) v3.12.2
github.com/evanphx/json-patch/v5 (go) v5.9.11
github.com/felixge/httpsnoop (go) v1.0.4
github.com/fsnotify/fsnotify (go) v1.9.0
github.com/fxamacker/cbor/v2 (go) v2.9.0
github.com/go-logr/stdr (go) v1.2.2
github.com/go-logr/zapr (go) v1.3.0
github.com/go-ole/go-ole (go) v1.3.0
github.com/go-openapi/jsonpointer (go) v0.21.0
github.com/go-openapi/jsonreference (go) v0.20.2
github.com/go-openapi/swag (go) v0.23.0
github.com/go-task/slim-sprig/v3 (go) v3.0.0
github.com/go-viper/mapstructure/v2 (go) v2.4.0
github.com/gogo/protobuf (go) v1.3.2
github.com/golang/snappy (go) v0.0.4
github.com/google/btree (go) v1.1.3
github.com/google/cel-go (go) v0.29.0
github.com/google/gnostic-models (go) v0.7.0
github.com/google/go-cmp (go) v0.7.0
github.com/google/pprof (go) v0.0.0-20260402051712-545e8a4df936
github.com/greatroar/blobloom (go) v0.8.0
github.com/grpc-ecosystem/grpc-gateway/v2 (go) v2.26.3
github.com/hashicorp/golang-lru/v2 (go) v2.0.7
github.com/inconshreveable/mousetrap (go) v1.1.0
github.com/jackpal/gateway (go) v1.0.16
github.com/jackpal/go-nat-pmp (go) v1.0.2
github.com/josharian/intern (go) v1.0.0
github.com/json-iterator/go (go) v1.1.12
github.com/liggitt/tabwriter (go) v0.0.0-20181228230101-89fcab3d43de
github.com/lufia/plan9stats (go) v0.0.0-20240909124753-873cd0166683
github.com/mailru/easyjson (go) v0.7.7
github.com/miscreant/miscreant.go (go) v0.0.0-20200214223636-26d376326b75
github.com/mitchellh/go-wordwrap (go) v1.0.1
github.com/moby/term (go) v0.5.0
github.com/modern-go/concurrent (go) v0.0.0-20180306012644-bacd9c7ef1dd
github.com/modern-go/reflect2 (go) v1.0.3-0.20250322232337-35a7c28c31ee
github.com/munnerz/goautoneg (go) v0.0.0-20191010083416-a7dc8b61c822
github.com/openshift/library-go (go) v0.0.0-20260213153706-03f1709971c5
github.com/pelletier/go-toml/v2 (go) v2.2.4
github.com/pierrec/lz4/v4 (go) v4.1.22
github.com/pmezard/go-difflib (go) v1.0.1-0.20181226105442-5d4384ee4fb2
github.com/power-devops/perfstat (go) v0.0.0-20240221224432-82ca36839d55
github.com/prometheus/client_model (go) v0.6.2
github.com/prometheus/common (go) v0.66.1
github.com/prometheus/procfs (go) v0.16.1
github.com/quic-go/quic-go (go) v0.52.0
github.com/russross/blackfriday/v2 (go) v2.1.0
github.com/sagikazarmark/locafero (go) v0.11.0
github.com/shirou/gopsutil/v4 (go) v4.25.4
github.com/sourcegraph/conc (go) v0.3.1-0.20240121214520-5f936abd7ae8
github.com/spf13/afero (go) v1.15.0
github.com/spf13/cast (go) v1.10.0
github.com/stretchr/objx (go) v0.5.2
github.com/stretchr/testify (go) v1.11.1
github.com/subosito/gotenv (go) v1.6.0
github.com/syncthing/notify (go) v0.0.0-20250528144937-c7027d4f7465
github.com/syndtr/goleveldb (go) v1.0.1-0.20220721030215-126854af5e6d
github.com/thejerf/suture/v4 (go) v4.0.6
Files by Type (count)
Go
890
Other (no ext)
694
YAML
217
reStructuredText
60
Other (.1)
37
Shell
27
Other (.png)
25
Markdown
24
Other (.gz)
19
Git Ignore
7
Text
6
Other (.mod)
6
Files by Type (size)
Other (.gz)
20MB
Go
5MB
YAML
2MB
Other (.png)
2MB
Other (no ext)
723KB
reStructuredText
599KB
Markdown
576KB
Shell
216KB
Other (.1)
154KB
Other (.sum)
104KB
Other (.bz2)
100KB
Config
53KB

The LLM identified 4 files worth highlighting for reuse:

Defines the core Mover interface (Synchronize, Cleanup, etc.) and the Builder interface for registering mover implementations. This clean abstraction allows adding new data transfer backends without changing the controller logic. Reusable as a pattern for any Kubernetes operator needing pluggable task executors.

file: internal/controller/mover/mover.go ↗ | tags: #mover-interface #plugin-architecture

Provides FilterLogs and AllLines functions to retrieve and filter mover pod logs. Supports line limits, success/failure markers, and env-var-control for full output. This is a self-contained utility for any controller that needs to surface relevant log lines from long-running jobs.

file: internal/controller/utils/podlogs.go ↗ | tags: #log-filtering #kubernetes-utility

Implements a safe snapshot cleanup pattern that identifies snapshots with a 'do-not-delete' label, removes owner references, and relinquishes ownership while preserving user-kept snapshots. Demonstrates a careful lifecycle management pattern for Kubernetes resources shared between controllers and users.

file: internal/controller/utils/cleanup.go ↗ | tags: #snapshot-lifecycle #owner-transfer

A generic state machine for replication sync/cleanup that supports manual and cron-based triggers. It defines states (initial, synchronizing, cleaning up) and transitions. The machine is agnostic to mover implementation via the ReplicationMachine interface. Reusable for any Kubernetes operator needing a structured sync lifecycle.

file: internal/controller/statemachine/machine.go ↗ | tags: #statemachine #reconciliation-pattern
Last analyzed: 2026-09-16 22:09:04.544005
Next check: 2026-09-23 22:09:04.484306
$ submit: