Wie können wir helfen?
Kubernetes Volume Snapshots
Was sind Volume Snapshots?
Komponenten von Volume Snapshots
Damit Sie einen Volume Snapshot erstellen können, benötigt es in Kubernetes verschiedene Ressourcen. Sie können in der folgenden Gegenüberstellung sehen was von uns, von Kubernetes und von Ihnen erstellt wird.
| Klassischer Storage in Kubernetes | Snapshots in Kubernetes |
| StorageClass (werden von uns bereitgestellt: rook-ceph-block, rook-cephfs, local-path) | VolumeSnapshotClass (werden von uns bereitgestellt: csi-rbdplugin-snapclass, csi-cephfsplugin-snapclass) |
| PersistentVolume (wird von Kubernetes verwaltet) | volumesnapshot.snapshot.storage.k8s.io (wird von Ihnen erstellt) |
| PersistentVolumeClaim (wird von Ihnen erstellt) | volumesnapshotcontents.snapshot.storage.k8s.io (wird von Kubernetes verwaltet) |
Snapshots werden aktuell nur von sogenannten CSI Drivern unterstützt, deshalb können wir diese nur für Ceph anbieten.
Wie erstellen Sie einen Volume Snapshot?
Abhängig von der StorageClass des originalen PVCs muss der Snapshot mit einer anderen volumeSnapshotClass erstellt werden. Hier gilt bei uns:
- rook-ceph-block --> csi-rbdplugin-snapclass
- rook-cephfs --> csi-cephfsplugin-snapclass
Um einen Snapshot von einem fiktiven PVC mit dem Namen "test1" im Namespace "snapshot-testing" zu erstellen legen Sie eine Datei (snapshot.yaml) mit dem folgenden Inhalt an
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: test1-snapshot
namespace: snapshot-testing
spec:
volumeSnapshotClassName: csi-rbdplugin-snapclass
source:
persistentVolumeClaimName: test1
Den Volume Snapshot erstellen Sie dann mit dem folgenden Befehl:
kubectl apply -f snapshot.yaml
Kubernetes erzeugt nun die dazugehörigen Inhalt (VolumeSnapshotContent). Sie können den Snapshot erst verwenden sobald dieser als "ReadyToUse" markiert ist. Sie können dies überprüfen indem Sie den folgenden Befehl nutzen:
kubectl get volumesnapshot.snapshot.storage.k8s.io -n snapshot-testing
NAMESPACE NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS ...
snapshot-testing test1-snapshot true test1 8Gi csi-rbdplugin-snapclass ...
Verwendung eines Volume Snapshot
Um einen von Ihnen erstellten Snapshot (test1-snapshot) in ein neues PVC (test1-restore) wiederherzustellen legen Sie folgende Datei (snapshot-restore.yaml) an:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test1-restore
namespace: snapshot-testing
spec:
storageClassName: rook-ceph-block
dataSource:
name: test1-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
Und wie bereits zuvor legen Sie die Ressource auf dem Cluster an:
kubectl apply -f snapshot-restore.yaml
Um ein PVC "test2" im Namespace "test" in ein neues PVC "test2-clone" zu klonen können Sie die folgende Datei (pvc-clone.yaml) anlegen:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test2-clone
namespace: test
spec:
storageClassName: rook-ceph-block
dataSource:
name: test2
kind: PersistentVolumeClaim
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Nun legen Sie die Ressource auf dem Kubernetes Cluster an:
kubectl apply -f pvc-clone.yaml
Das geklonte oder wiederhergestellte PVC können Sie nun wie gewohnt in Ihren Deployments verwenden.
