Learn Velero - Plugin Ecosystem
Episode 18 of 23

Learn Velero - Plugin Ecosystem

Velero's power actually lies in its plugin ecosystem: the core doesn't write vendor code, plugins add the support. This episode covers the plugin types (object store, volume snapshot, item action, custom in Go), how to add them via velero plugin add, and examples of AWS/Azure/GCP provider plugins plus the CSI plugin.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Introduction

In episode 2 you met plugins as Velero's bridge to external providers. Episode 18 expands that picture: plugins aren't an accessory — they're the soul of Velero's architecture. The Velero core doesn't know what an "EBS snapshot" or "S3 bucket" is — the plugins do. The result: one core, hundreds of integrations.

Think of an operating system and printer drivers: the OS doesn't need to know how every printer works — the manufacturer writes the driver. Once the driver is installed, any printer works. Velero plugins are exactly like those drivers, and adding one is just as easy.

Plugin Types

Object Store Plugin

Connects Velero to object storage for storing manifests and data files. At least one is required (except when installing without a BSL). Examples: velero/velero-plugin-for-aws (S3 + MinIO), velero/velero-plugin-for-gcp, velero/velero-plugin-for-microsoft-azure.

Volume Snapshotter Plugin

Creates and restores cloud snapshots for persistent volumes. Handles EBS (AWS), Persistent Disk (GCP), Azure Disk, and others. Without this plugin, volume snapshots fail (episode 16).

Backup/Restore Item Action Plugin

Transforms resources during backup or restore. A real example: the OpenStack plugin adds/changes specific fields on cloud resources; the CSI plugin processes VolumeSnapshots. This is the plugin type that makes deep integrations possible without touching the core code.

Custom Plugin

Velero has a Go plugin framework — anyone can write their own plugin for specific needs: custom resource transformation, backup storage that isn't supported, or business logic on certain items. The entry points are the BackupItemAction and RestoreItemAction interfaces in the Velero SDK.

How to Add Plugins

At Install Time

Install with multiple plugins
velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.14.0,velero/velero-plugin-for-csi:v0.10.0 \
  --bucket velero \
  --secret-file ./credentials-velero \
  --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://minio:9000

After Installation

Without reinstalling, add plugins to the Velero deployment:

Add a plugin to a running installation
velero plugin add velero/velero-plugin-for-aws:v1.14.0
Remove a plugin
velero plugin remove velero/velero-plugin-for-aws:v1.14.0

velero plugin add adds an init container to the velero deployment — plugins are loaded as binaries before the server starts. Verify:

KubernetesView plugin init containers
kubectl get deploy velero -n velero -o jsonpath='{.spec.template.spec.initContainers[*].name}'
PluginImageFunction
AWSvelero/velero-plugin-for-awsS3, EBS snapshot, MinIO (S3 API)
Azurevelero/velero-plugin-for-microsoft-azureBlob storage, Azure Disk snapshot
GCPvelero/velero-plugin-for-gcpGCS, Persistent Disk snapshot
OpenStackvelero/velero-plugin-for-openstackSwift/Cinder
CSIvelero/velero-plugin-for-csiVolume backup via CSI VolumeSnapshot

Plugin versions follow Velero's major releases — make sure the plugin version matches the server version (e.g. v1.14.x for Velero 1.14+, adjust to the latest release).

Example: The CSI Plugin

The CSI plugin (stable since Velero 1.14) enables backup of volumes provisioned via CSI drivers — including third-party drivers that aren't owned by a cloud provider (e.g. Rook Ceph, Portworx, or NFS CSI storage). Without this plugin, CSI volumes are only backed up as manifests.

Install the CSI plugin
velero plugin add velero/velero-plugin-for-csi:v0.10.0

With this plugin, every PVC with an available VolumeSnapshotClass is automatically backed up via CSI snapshots. We fully dissect this in episode 19.

Tip

Plugin debugging pattern: a failing plugin almost always shows up as an error in the server logs (kubectl logs -n velero deploy/velero). Typical messages: "plugin process exited", "no object store plugin registered", or "volume snapshotter plugin not found". Check the plugin vs server version before looking for other causes.

Writing a Custom Plugin (Overview)

For those needing special integrations, the short flow:

  1. Create a Go module with the Velero SDK dependency.
  2. Implement the Plugin interface (e.g. BackupItemAction).
  3. Build as a binary, wrap it in a container image that copies the binary to /plugins.
  4. Add the image as a plugin init container (velero plugin add <image>).

The SDK and examples are available in the velero-io/velero repository (the pkg/plugin folder) and the custom plugin documentation. We don't write a full custom plugin in this series, but the framework above is enough to get started.

Closing

Key takeaways:

  • Plugins separate vendor code from the core: object store, volume snapshotter, and item action.
  • Add plugins at install (--plugins) or afterward (velero plugin add).
  • Real examples: aws-plugin, azure-plugin, gcp-plugin, OpenStack, and the CSI plugin (stable since 1.14).
  • Match plugin versions to the server version; plugin errors appear in the server logs.
  • Custom Go plugins use the BackupItemAction/RestoreItemAction framework in the Velero SDK.

In episode 19 next, we dive deep into CSI Snapshot & Cross-provider — backing up CSI volumes via VolumeSnapshotClass, full CSI provider support, and moving volumes between clouds via file-level backup or snapshot conversion.