- Access to a Kubernetes cluster, version 1.7 or later.
- A DNS server on the cluster
kubectl
installed- Go installed (minimum version 1.8)
mkdir $HOME/go
export GOPATH=$HOME/go
go get github.com/vmware-tanzu/velero
Where go
is your import path for Go.
For Go development, it is recommended to add the Go import path ($HOME/go
in this example) to your path.
Download the archive named Source code
from the release page and extract it in your Go import path as src/github.com/vmware-tanzu/velero
.
Note that the Makefile targets assume building from a git repository. When building from an archive, you will be limited to the go build
commands described below.
There are a number of different ways to build velero
depending on your needs. This section outlines the main possibilities.
When building by using make
, it will place the binaries under _output/bin/$GOOS/$GOARCH
. For example, you will find the binary for darwin here: _output/bin/darwin/amd64/velero
, and the binary for linux here: _output/bin/linux/amd64/velero
. make
will also splice version and git commit information in so that velero version
displays proper output.
Note: velero install
will also use the version information to determine which tagged image to deploy. If you would like to overwrite what image gets deployed, use the image
flag (see below for instructions on how to build images).
To build the velero
binary on your local machine, compiled for your OS and architecture, run one of these two commands:
go build ./cmd/velero
make local
To build the velero binary targeting linux/amd64 within a build container on your local machine, run:
make build
For any specific platform, run make build-<GOOS>-<GOARCH>
.
For example, to build for the Mac, run make build-darwin-amd64
.
Velero's Makefile
has a convenience target, all-build
, that builds the following platforms:
- linux-amd64
- linux-arm
- linux-arm64
- linux-ppc64le
- darwin-amd64
- windows-amd64
If after installing Velero you would like to change the image used by its deployment to one that contains your code changes, you may do so by updating the image:
kubectl -n velero set image deploy/velero velero=myimagerepo/velero:$VERSION
To build a Velero container image, first set the $REGISTRY
environment variable. For example, if you want to build the gcr.io/my-registry/velero-amd64:master
image, set $REGISTRY
to gcr.io/my-registry
. If this variable is not set, the default is velero
.
Optionally, set the $VERSION
environment variable to change the image tag. Then, run:
make container
For any specific platform, run ARCH=<GOOS>-<GOARCH> make container
For example, to build an image for the Power (ppc64le), run
ARCH=linux-ppc64le make container
Note: By default, ARCH is set to linux-amd64
To push your image to the registry, first set the $REGISTRY
environment variable. For example, if you want to push the gcr.io/my-registry/velero-amd64:master
image, set $REGISTRY
to gcr.io/my-registry
. If this variable is not set, the default is velero
.
Optionally, set the $VERSION
environment variable to change the image tag. Then, run:
make push
For any specific platform, run ARCH=<GOOS>-<GOARCH> make push
For example, to push image for the Power (ppc64le), run
ARCH=linux-ppc64le make push
Note: By default, ARCH is set to linux-amd64
To create your manifest and push to the registry, first set the $REGISTRY
environment variable. For example, if you want to create and push the gcr.io/my-registry/velero:master
manifest, set $REGISTRY
to gcr.io/my-registry
. If this variable is not set, the default is velero
.
Optionally, set the $VERSION
environment variable to change the manifest tag. Then, run:
make manifest
For any specific platform, run MANIFEST_PLATFORMS=<GOARCH> make manifest
For example, to create and push manifest only for amd64, run
MANIFEST_PLATFORMS=amd64 make manifest
Note: By default, MANIFEST_PLATFORMS is set to amd64, ppc64le
To run the entire workflow, run:
REGISTRY=<$REGISTRY> VERSION=<$VERSION> ARCH=<GOOS>-<GOARCH> MANIFEST_PLATFORMS=<GOARCH> make container push manifest
For example, to run the workflow only for amd64
REGISTRY=myrepo VERSION=foo MANIFEST_PLATFORMS=amd64 make container push manifest
Note: By default, ARCH is set to linux-amd64
For example, to run the workflow only for ppc64le
REGISTRY=myrepo VERSION=foo ARCH=linux-ppc64le MANIFEST_PLATFORMS=ppc64le make container push manifest
For example, to run the workflow for all supported platforms
REGISTRY=myrepo VERSION=foo make all-containers all-push all-manifests
Note: By default, MANIFEST_PLATFORMS is set to amd64, ppc64le
Note: if you want to update the image but not change its name, you will have to trigger Kubernetes to pick up the new image. One way of doing so is by deleting the Velero deployment pod:
kubectl -n velero delete pods -l deploy=velero