Skip to content
Dump, or continuously backup Kubernetes objets as yaml files in git
Go Smarty Makefile Dockerfile
Branch: master
Clone or download
Latest commit d0a1ad8 Jan 19, 2020


Build Status Coverage Status Go Report Card

katafygio discovers Kubernetes objects (deployments, services, ...), and continuously save them as yaml files in a git repository. This provides real time, continuous backups, and keeps detailled changes history.


To dump the cluster content once and exit:

katafygio --no-git --dump-only --local-dir /tmp/clusterdump/

To create a local git repository and continuously save the cluster content:

katafygio --local-dir /tmp/kfdump

To continuously push changes to a remote git repository:

katafygio --git-url --local-dir /tmp/kfdump

Filtering out irrelevant objects (esp. ReplicaSets and Pods) with -x or -y will help to keep resources usage low, and a concise git history. Eg.:

# Filtering out replicasets and pods since they are generated by Deployments
# (already archived), endpoints (managed by Services), secrets (to keep them
# confidential), events and node (irrelevant), and the leader-elector
# configmap that has low value and changes a lot, causing commits churn.

katafygio -e /tmp/kfdump \
  -g \
  -x secret,pod,event,replicaset,node,endpoint \
  -y configmap:kube-system/leader-elector

You can also use the docker image.

CLI options

Backup Kubernetes cluster as yaml files in a git repository.
--exclude-kind (-x) and --exclude-object (-y) may be specified several times,
or once with several comma separated values.

  katafygio [flags]
  katafygio [command]

Available Commands:
  help        Help about any command
  version     Print the version number

  -s, --api-server string        Kubernetes api-server url
  -c, --config string            Configuration file (default "/etc/katafygio/katafygio.yaml")
  -q, --context string           Kubernetes configuration context
  -d, --dry-run                  Dry-run mode: don't store anything
  -m, --dump-only                Dump mode: dump everything once and exit
  -x, --exclude-kind strings     Ressource kind to exclude. Eg. 'deployment'
  -y, --exclude-object strings   Object to exclude. Eg. 'configmap:kube-system/kube-dns'
  -l, --filter string            Label filter. Select only objects matching the label
  -t, --git-timeout duration     Git operations timeout (default 5m0s)
  -g, --git-url string           Git repository URL
  -p, --healthcheck-port int     Port for answering healthchecks on /health url
  -h, --help                     help for katafygio
  -k, --kube-config string       Kubernetes configuration path
  -e, --local-dir string         Where to dump yaml files (default "./kubernetes-backup")
  -v, --log-level string         Log level (default "info")
  -o, --log-output string        Log output (default "stderr")
  -r, --log-server string        Log server (if using syslog)
  -a, --namespace string         Only dump objects from this namespace
  -n, --no-git                   Don't version with git
  -i, --resync-interval int      Full resync interval in seconds (0 to disable) (default 900)

Configuration file and env variables

All settings can be passed by command line options, or environment variable, or in a yaml configuration file The environment are the same as command line options, in uppercase, prefixed by "KF_", and with underscore instead of dashs. ie.:

export KF_GIT_URL=
export KF_LOCAL_DIR=/tmp/kfdump
export KF_LOG_LEVEL=info
export KF_EXCLUDE_KIND="pod ep rs clusterrole"

# non-prefixed KUBECONFIG works the same as for kubectl
export KUBECONFIG=/tmp/kconfig


You can find pre-built binaries in the releases page, ready to run on your desktop or in a Kubernetes cluster.

We also provide a docker image.

On MacOS, you can use the brew formula:

brew install bpineau/tap/katafygio

You can also deploy with the provided helm chart:

helm install --name kf-backups assets/helm-chart/katafygio/

See Also

You can’t perform that action at this time.