Need help with k8up?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

133 Stars 11 Forks BSD 3-Clause "New" or "Revised" License 751 Commits 36 Opened issues


Kubernetes and OpenShift Backup Operator

Services available


Need anything else?

Contributors list

Build Go version Kubernetes version Version Maintainability GitHub downloads Docker image License

K8up logo

K8up Backup Operator

K8up is a Kubernetes backup operator based on Restic that will handle PVC and application backups on a Kubernetes or OpenShift cluster.

Just create a

and a
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.


The documentation is written in AsciiDoc and published with Antora to It's source is available in the



K8up is written using the Operator SDK.

You'll need:

  • A running Kubernetes cluster (minishift, minikube, k3s, ... you name it)
  • kubectl and kustomize
  • Go development environment
  • Your favorite IDE (with a Go plugin)
  • Docker
  • make

To run the end-to-end test (e.g.

make e2e-test
), you additionally need:
  • helm
    (version 3)
  • jq
  • node
  • bash
    (installed, doesn't have to be your default shell)
  • shasum
  • base64
  • find

These are the most common make targets:

. Run
make help
to get an overview over the relevant targets and their intentions.

Generate Kubernetes code

If you make changes to the CRD structs you'll need to run code generation. This can be done with make:

make generate

Install CRDs

CRDs can be either installed on the cluster by running

make install
or using
kubectl apply -k config/crd/

Currently there's an issue using

make install
related to how the CRDs are specified. Therefore settle to the second approach for now.

Run the operator

You can run the operator in different ways:

  1. as a container image (see quickstart)
  2. using
    make run
    (provide your own kubeconfig)
  3. using
    make kind-run
    (uses KIND to install a cluster in docker and provides its own kubeconfig in
  4. using a configuration of your favorite IDE

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.

Run E2E tests

K8up supports both OpenShift 3.11 clusters and newer Kubernetes clusters 1.16+. However, to support OpenShift 3.11 a legacy CRD definition with
is needed, while K8s 1.22+ only supports
. You need
to run the tests, as it runs with DETIK.

To run e2e tests, execute:

make e2e-test

To test compatibility of k8up with OpenShift 3.11 (or any other specific K8s version), you can run end-to-end tests like this:

make e2e-test -e CRD_SPEC_VERSION=v1beta1 -e KIND_NODE_VERSION=v1.13.12 -e KIND_KUBECTL_ARGS=--validate=false -e BACKUP_ENABLE_LEADER_ELECTION=false

To test just a specific e2e test, run:

make e2e-test -e BATS_FILES=test-00-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

Example configurations

There are a number of example configurations in

. Apply them using

kubectl apply -f config/samples/somesample.yaml

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.