Skip to content
Example project for plugins for Velero, a Kubernetes disaster recovery utility
Go Makefile Shell Dockerfile
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE ark -> velero name changes Feb 5, 2019
examples Updates for org move to vmware-tanzu Oct 7, 2019
hack Add `make local` target for building a local binary (#18) Mar 28, 2019
velero-examples Updates for org move to vmware-tanzu Oct 7, 2019
vendor Update vendor Oct 7, 2019
.gitignore Initial import Nov 30, 2017
.travis.yml Initial import Nov 30, 2017
CODE_OF_CONDUCT.md ark -> velero name changes Feb 5, 2019
CONTRIBUTING.md Updates for org move to vmware-tanzu Oct 7, 2019
Dockerfile bug fix: change container group to nogroup Jan 30, 2020
Gopkg.lock Update vendor Oct 7, 2019
Gopkg.toml Update vendor Oct 7, 2019
LICENSE Initial import Nov 30, 2017
Makefile Update documentation Nov 5, 2019
README.md Update documentation Nov 5, 2019

README.md

Velero Example Plugins

Build Status

This repository contains example plugins for Velero.

Kinds of Plugins

Velero currently supports the following kinds of plugins:

  • Object Store - persists and retrieves backups, backup log files, restore warning/error files, restore logs.
  • Volume Snapshotter - creates snapshots from volumes (during a backup) and volumes from snapshots (during a restore).
  • Backup Item Action - performs arbitrary logic on individual items prior to storing them in the backup file.
  • Restore Item Action - performs arbitrary logic on individual items prior to restoring them in the Kubernetes cluster.

Velero can host multiple plugins inside of a single, resumable process. The plugins can be of any supported type. See velero-examples/main.go

For more information, please see the full plugin documentation.

Building the plugins

To build the plugins, run

$ make

To build the image, run

$ make container

This builds an image tagged as velero/velero-plugin-example:latest. If you want to specify a different name, run

$ make container IMAGE=your-repo/your-name:here

Deploying the plugins

To deploy your plugin image to an Velero server:

  1. Make sure your image is pushed to a registry that is accessible to your cluster's nodes.
  2. Run velero plugin add <registry/image:version>. Example with a dockerhub image: velero plugin add velero/velero-plugin-example.

Using the plugins

When the plugin is deployed, it is only made available to use. To make the plugin effective, you must modify your configuration:

Backup storage:

  1. Run kubectl edit backupstoragelocation <location-name> -n <velero-namespace> e.g. kubectl edit backupstoragelocation default -n velero OR velero backup-location create <location-name> --provider <provider-name>
  2. Change the value of spec.provider to enable an Object Store plugin
  3. Save and quit. The plugin will be used for the next backup/restore

Volume snapshot storage:

  1. Run kubectl edit volumesnapshotlocation <location-name> -n <velero-namespace> e.g. kubectl edit volumesnapshotlocation default -n velero OR velero snapshot-location create <location-name> --provider <provider-name>
  2. Change the value of spec.provider to enable a Volume Snapshotter plugin
  3. Save and quit. The plugin will be used for the next backup/restore

Examples

To run with the example plugins, do the following:

  1. Run velero backup-location create default --provider file Optional: --config bucket:<your-bucket>,prefix:<your-prefix> to configure a bucket and/or prefix directories.
  2. Run velero snapshot-location create example-default --provider example-volume-snapshotter
  3. Run kubectl edit deployment/velero -n <velero-namespace>
  4. Change the value of spec.template.spec.args to look like the following:
      - args:
        - server
        - --default-volume-snapshot-locations
        - example-volume-snapshotter:example-default
  1. Run kubectl create -f examples/with-pv.yaml to apply a sample nginx application that uses the example block store plugin. Note: This example works best on a virtual machine, as it uses the host's /tmp directory for data storage.
  2. Save and quit. The plugins will be used for the next backup/restore

Creating your own plugin project

  1. Create a new directory in your $GOPATH, e.g. $GOPATH/src/github.com/someuser/velero-plugins
  2. Copy everything from this project into your new project
$ cp -a $GOPATH/src/github.com/vmware-tanzu/velero-plugin-example/* $GOPATH/src/github.com/someuser/velero-plugins/.
  1. Remove the git history
$ cd $GOPATH/src/github.com/someuser/velero-plugins
$ rm -rf .git
  1. Adjust the existing plugin directories and source code as needed.

The Makefile is configured to automatically build all directories starting with the prefix velero-. You most likely won't need to edit this file, as long as you follow this convention.

If you need to pull in additional dependencies to your vendor directory, just run

$ dep ensure
You can’t perform that action at this time.