Kubernetes and OpenShift Backup Operator
See the codeK8up is a Kubernetes backup operator based on Restic that will handle PVC and application backups on a Kubernetes or OpenShift cluster.
Just create a schedule and a credentials object in the namespace you’d like to backup.
It’s that easy. K8up takes care of the rest. It also provides a Prometheus endpoint for monitoring.
K8up is production ready. It is used in production deployments since 2019.
The documentation is written in AsciiDoc and published with Antora to k8up.io.
It's source is available in the docs/ directory.
Run make docs-preview to build the docs and preview changes.
K8up is written using Kubebuilder.
You'll need:
makesed (or gsed for MacOS)To run the end-to-end test (e.g. make e2e-test), you additionally need:
helm (version 3)jqyq (make sure to use mikefarah/yq and not kislyuk/yq)node and npmbash (installed, doesn't have to be your default shell)base64findThese are the most common make targets: build, test, docker-build, run, kind-run.
Run make help to get an overview over the relevant targets and their intentions.
You can find the project roadmap here.
We use Snyk to test the code regularly for vulnerabilities and other security issues.
If you find any security issue, please follow our Vulnerability Reporting process.
K8s consists of two main modules:
restic binary and is invoked whenever a Backup or Restore (or similar) custom resource is instantiated.
If it's job (like doing a backup or a restore) is done, the process ends./
- api Go Types for the Custom Resource Definitions (CRDs) [o]
- cmd CLI definition and entrypoints
- common Code that is not specific to either
- config Various configuration files for the Operator SDK [o]
- controllers The reconciliation loops of the operator module [o]
- docs Out ASCIIdoc code as published on https://k8up.io
- e2e The Bats-based End-To-End tests
- envtest Infrastructure code for the integration tests
- operator Code that is otherwise related to the _operator module_,
but not part of the recommended Operator SDK structure.
- restic Code that makes up the _restic module_.
[o]: this is part of the recommended Operator SDK structure
If you make changes to the CRD structs you'll need to run code generation. This can be done with make:
make generate
CRDs can be either installed on the cluster by running make install or using kubectl apply -f config/crd/apiextensions.k8s.io/v1.
Currently there's an issue using make install related to how the CRDs are specified.
Therefore settle to the second approach for now.
You can run the operator in different ways:
make run-operator (provide your own kubeconfig)make kind-run (uses KIND to install a cluster in docker and provides its own kubeconfig in testbin/)Best is if you have minio installed somewhere to be able to setup the needed env values. It needs to be reachable from within your dev cluster.
You need node and npm to run the tests, as it runs with DETIK.
To run e2e tests, execute:
make e2e-test
To test just a specific e2e test, run:
make e2e-test -e BATS_FILES=test-02-deployment.bats
To remove the local KIND cluster and other e2e resources, run:
make e2e-clean
To cleanup all created artifacts, there's always:
make clean
There are a number of example configurations in config/samples.
Apply them using kubectl apply -f config/samples/somesample.yaml
Read more about our community in the documentation.
The K8up project is present in the CNCF Slack Workspace in the #k8up channel.
We host a monthly community meeting. For more information, head over to the community documentation.
Our code of conduct can be read at k8up.io.
Overall
Maintained
Code review
Contributors
Go module
Latest release
Releases this year
70 followers · starred Mar 2026
114 followers · starred May 2021
247 followers · starred Jun 2020
338 followers · starred Nov 2020
Kubernetes and OpenShift Backup Operator
See the codeK8up is a Kubernetes backup operator based on Restic that will handle PVC and application backups on a Kubernetes or OpenShift cluster.
Just create a schedule and a credentials object in the namespace you’d like to backup.
It’s that easy. K8up takes care of the rest. It also provides a Prometheus endpoint for monitoring.
K8up is production ready. It is used in production deployments since 2019.
The documentation is written in AsciiDoc and published with Antora to k8up.io.
It's source is available in the docs/ directory.
Run make docs-preview to build the docs and preview changes.
K8up is written using Kubebuilder.
You'll need:
makesed (or gsed for MacOS)To run the end-to-end test (e.g. make e2e-test), you additionally need:
helm (version 3)jqyq (make sure to use mikefarah/yq and not kislyuk/yq)node and npmbash (installed, doesn't have to be your default shell)base64findThese are the most common make targets: build, test, docker-build, run, kind-run.
Run make help to get an overview over the relevant targets and their intentions.
You can find the project roadmap here.
We use Snyk to test the code regularly for vulnerabilities and other security issues.
If you find any security issue, please follow our Vulnerability Reporting process.
K8s consists of two main modules:
restic binary and is invoked whenever a Backup or Restore (or similar) custom resource is instantiated.
If it's job (like doing a backup or a restore) is done, the process ends./
- api Go Types for the Custom Resource Definitions (CRDs) [o]
- cmd CLI definition and entrypoints
- common Code that is not specific to either
- config Various configuration files for the Operator SDK [o]
- controllers The reconciliation loops of the operator module [o]
- docs Out ASCIIdoc code as published on https://k8up.io
- e2e The Bats-based End-To-End tests
- envtest Infrastructure code for the integration tests
- operator Code that is otherwise related to the _operator module_,
but not part of the recommended Operator SDK structure.
- restic Code that makes up the _restic module_.
[o]: this is part of the recommended Operator SDK structure
If you make changes to the CRD structs you'll need to run code generation. This can be done with make:
make generate
CRDs can be either installed on the cluster by running make install or using kubectl apply -f config/crd/apiextensions.k8s.io/v1.
Currently there's an issue using make install related to how the CRDs are specified.
Therefore settle to the second approach for now.
You can run the operator in different ways:
make run-operator (provide your own kubeconfig)make kind-run (uses KIND to install a cluster in docker and provides its own kubeconfig in testbin/)Best is if you have minio installed somewhere to be able to setup the needed env values. It needs to be reachable from within your dev cluster.
You need node and npm to run the tests, as it runs with DETIK.
To run e2e tests, execute:
make e2e-test
To test just a specific e2e test, run:
make e2e-test -e BATS_FILES=test-02-deployment.bats
To remove the local KIND cluster and other e2e resources, run:
make e2e-clean
To cleanup all created artifacts, there's always:
make clean
There are a number of example configurations in config/samples.
Apply them using kubectl apply -f config/samples/somesample.yaml
Read more about our community in the documentation.
The K8up project is present in the CNCF Slack Workspace in the #k8up channel.
We host a monthly community meeting. For more information, head over to the community documentation.
Our code of conduct can be read at k8up.io.
Overall
Maintained
Code review
Contributors
Go module
Latest release
Releases this year
70 followers · starred Mar 2026
114 followers · starred May 2021
247 followers · starred Jun 2020
338 followers · starred Nov 2020