How to Import a DigitalOcean Snapshot into a Kubernetes Cluster
Validated on 24 Apr 2023 • Last edited on 17 Apr 2025
DigitalOcean Kubernetes (DOKS) is a Kubernetes service with a fully managed control plane, high availability, and autoscaling. DOKS integrates with standard Kubernetes toolchains and DigitalOcean’s load balancers, volumes, CPU and GPU Droplets, API, and CLI.
You can import an existing DigitalOcean volume snapshot into a Kubernetes cluster by applying three new YAML files that link your existing snapshot, create a local snapshot, and request for space on your Kubernetes cluster.
Find the Snapshot ID
First, find the existing snapshot’s ID by making a request to our API or running the following command:
doctl compute snapshot list
Create a Volume Snapshot Content
Create a VolumeSnapshotContent
spec called snapshotcontent.yaml
. This file specifies your existing snapshot as the source of data to be imported. Write the following content, replacing <your-snapshot-ID>
with your snapshot ID:
snapshotcontent.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
name: manually-created-snapshot-content
spec:
deletionPolicy: Retain
driver: dobs.csi.digitalocean.com
source:
snapshotHandle: your-snapshot-ID
volumeSnapshotRef:
name: test-snapshot
namespace: default
The name
field for VolumeSnapshotContent
is the name of the volume snapshot content and the name
field for volumeSnapshotRef
is the reference of the corresponding volume snapshot. You can pick any name you want for them, but the names must match in the VolumeSnapshot
spec you are going to create later.
The deletionPolicy
is set to Retain
. This setting preserves the VolumeSnapshotContent
and the DigitalOcean snapshot resource when you delete the VolumeSnapshot
, instead of automatically deleting them. To delete all three files together when deleting VolumeSnapshot
, change this value to Delete
.
Save and exit the file, then use kubectl apply
to create the volume snapshot content:
kubectl apply -f snapshotcontent.yaml
Create a Volume Snapshot
Create a VolumeSnapshot
spec called snapshot.yml
. This file creates a request local snapshot using the name
of the VolumeSnapshotContent
as the source for the snapshot. Write the following content, ensuring that the name
used matches with the previously-created VolumeSnapshotContent
:
snapshot.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: test-snapshot
spec:
source:
volumeSnapshotContentName: manually-created-snapshot-content
Save and exit the file, then use kubectl apply
to create the volume snapshot:
kubectl apply -f snapshot.yaml
Wait for the snapshot to be imported successfully.
Import the Volume
Lastly, once the snapshot is ready, source the snapshot from a PersistentVolumeClaim
(PVC). The file requests space for the new data on the Kubernetes cluster. Create a file called pvc.yaml
and write the following content, ensuring that the name
of the VolumeSnapshot
matches with the previous file:
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-restore
spec:
dataSource:
name: test-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Save and exit the file, then kubectl apply
to create the persistent volume claim:
kubectl apply -f pvc.yaml
This command causes the PersistentVolumeClaim
to dynamically create a PersistentVolume
.
You have now imported a DigitalOcean snapshot into a Kubernetes cluster and can use it as a volume in your workload.