Kubernetes cluster state management

View the Project on GitHub mhausenblas/reshifter

Kubernetes cluster state management

Go Report Card godoc Docker Repository on Quay Swagger API definition Proudly packaged with Golang dep

ReShifter is a Kubernetes cluster state management library and tool. You can use it on the command line for one-off tasks, as a Web app with an UI, or in a cron job. It uses the etcd API to query and manipulate the state of Kubernetes-related objects, supporting legacy (v2, /registry), modern (v2/v3, / as well as distro-specific keys such as the ones used in the enterprise Kubernetes distro OpenShift.

Screen cast: Introducing ReShifter

Use Cases

There are many cases where ReShifter can be useful for you, for example:

Status and roadmap

See the Trello board for the current status of the work and roadmap items. You can also check out the design philosophy and architecture of ReShifter, if you want to learn more about why it works the way it does.

CLI tool

You can use ReShifter from the CLI via the rcli binaries. Get binary releases for Linux and macOS via the GitHub release page.

$ rcli -h
A CLI for ReShifter, supports backing up and restoring Kubernetes clusters.

  rcli [command]

Available Commands:
  backup      Creates a backup of a Kubernetes cluster
  explore     Probes an etcd endpoint
  help        Help about any command
  restore     Performs a restore of a Kubernetes cluster
  stats       Collects stats about Kubernetes-related keys from an etcd endpoint
  version     Displays the ReShifter version


Here’s a simple usage example which assumes that you’ve got a Kubernetes cluster with an etcd on http://localhost:4001 running:

# back up Kubernetes cluster to Minio playground:
  SECRET_ACCESS_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG \
  rcli backup create --endpoint http://localhost:4001 \
                     --remote \
                     --bucket mh9-test

# restore cluster from Minio playground, using backup ID 1498815551:
  SECRET_ACCESS_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG \
  rcli restore --endpoint http://localhost:4001 \
               --remote \
               --bucket mh9-test \
               --backupid 1498815551

OK, now that you know about the basic usage, why not learn more by checking out the CLI walkthrough? You can also have a look at the backup strategies as well as the configuration options for more ways to use the ReShifter CLI most effectively.

Web app

If you want to see the app in action, have a look at the app walkthrough.

Deploy app locally

If you want to use the ReShifter app, that is the Web UI, you need to use the Docker image since it bundles the static assets such as HTML, CSS, and JS and the Go binary. For example, to launch the ReShifter app locally, do:

$ docker run --rm -p 8080:8080

If you want to use the ReShifter API, for example as a head-less service, you can simply use the binary, no other dependencies required:

$ curl -s -L -o reshifter
$ chmod +x reshifter
$ ./reshifter

The ReShifter HTTP API is defined in and available via Swagger:

Deploy app in OpenShift

To install the ReShifter app on OpenShift, we use a Makefile that creates a new project called reshifter, launches the app from the Docker image, and finally exposes the service via a route so that you can access the app from outside of the cluster. The following requires access to an OpenShift Origin 1.5 (or OpenShift Container Platform 3.5) cluster and also the oc CLI tool locally installed:

$ make init
$ make build
$ make publish

Deploy app in Kubernetes

To install the ReShifter app in a portable way, use kubectl and the YAML files provided. The following requires access to a vanilla Kubernetes 1.5 or above cluster and also the kubectl CLI tool locally installed:

$ kubectl create -f

Note: the above YAML file defines both a Deployment as well as a Service object for ReShifter. It does, however, not expose the ReShifter service to the outside world. If you want to access the app from outside the cluster, you’ll have to use Ingress or adapt the YAML file yourself.

Backup strategies

ReShifter supports different backup strategies.


ReShifter takes throughout the deployments (app, HTTP API, CLI) the following configuration parameters, supplied as environment variables. Currently all of them are optional, but may be required depending on the etcd setup in use or what you want to achieve, for example, backing up to an S3-compatible storage.

env var meaning set for
ACCESS_KEY_ID S3 access key ID when backing up to remote S3-compatible storage
SECRET_ACCESS_KEY S3 secret access key when backing up to remote S3-compatible storage
RS_ETCD_CLIENT_CERT path to etcd client cert file when using a secure etcd
RS_ETCD_CLIENT_KEY path to etcd client key file when using a secure etcd
RS_ETCD_CA_CERT path to etcd CA cert file when using a secure etcd
RS_BACKUP_STRATEGY if present, selects backup strategy for backup
RS_ETCD_API_VERSION if present, overwrites auto-discovery and forces ReShifter to use the specified etcd API version; allowed values are v2 or v3 for backup, restore, and stats


Test and development

See the pages for testbed and development.