pv-migrate
pv-migrate
is a CLI tool/kubectl plugin to easily migrate
the contents of one Kubernetes PersistentVolumeClaim
to another.
Demo
Introduction
On Kubernetes, if you need to rename a resource (like a Deployment
) or to move it to a different namespace,
you can simply create a copy of its manifest with the new namespace and/or name and apply it.
However, it is not as simple with PersistentVolumeClaim
resources: They are not only metadata,
but they also store data in the underlying storage backend.
In these cases, moving the data stored in the PVC can become a problem, making migrations more difficult.
Use Cases
db-data
of size 50Gi
.
Your DB grew over time, and you need more space for it.
You cannot resize the PVC because it doesn't support volume expansion.
Simply create a new, bigger PVC db-data-v2
and use pv-migrate
to copy data from db-data
to db-data-v2
.
my-pvc
from namespace ns-a
to namespace ns-b
.
Simply create the PVC with the same name and manifest in ns-b
and use pv-migrate
to copy its content.
Just use pv-migrate
to copy the data securely over the internet.
Highlights
- Supports in-namespace, in-cluster as well as cross-cluster migrations
- Uses rsync over SSH with a freshly generated Ed25519 or RSA keys each time to securely migrate the files
- Allows full customization of the manifests (e.g. specifying your own docker images for rsync and sshd, configuring affinity etc.)
- Supports multiple migration strategies to do the migration efficiently and fallback to other strategies when needed
- Customizable strategy order
- Supports arm32v7 (Raspberry Pi etc.) and arm64 architectures as well as amd64
- Supports completion for popular shells: bash, zsh, fish, powershell
Installation
See INSTALL.md for various installation methods and shell completion configuration.
Usage
See USAGE.md for the CLI reference and examples.
Stargazers over time
Contributing
See CONTRIBUTING for details.