Skip to content

Commit

Permalink
Merge pull request #10565 from govargo/doc-snapshot-restore-pv
Browse files Browse the repository at this point in the history
Add tutorial for VolumeSnapshot to docs
  • Loading branch information
medyagh authored Feb 22, 2021
2 parents 70ece52 + ae9f050 commit 3913b1b
Showing 1 changed file with 134 additions and 1 deletion.
135 changes: 134 additions & 1 deletion site/content/en/docs/tutorials/volume_snapshots_and_csi.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This tutorial explains how to set up the CSI Hostpath Driver in minikube and cre

- latest version of minikube

## Tutorial
## What you’ll need

Support for volume snapshots in minikube is provided through the `volumesnapshots` addon. This addon provisions the required
CRDs and deploys the Volume Snapshot Controller. It is <b>disabled by default</b>.
Expand Down Expand Up @@ -44,3 +44,136 @@ name `hostpath.csi.k8s.io`. Use this wherever necessary (e.g. snapshot class def
Once both addons are enabled, you can create persistent volumes and snapshots using standard ways (for a quick test of
volume snapshots, you can find some example yaml files along with a step-by-step [here](https://kubernetes-csi.github.io/docs/snapshot-restore-feature.html)).
The driver stores all persistent volumes in the `/var/lib/csi-hostpath-data/` directory of minikube's host.

## Tutorial

In this tutorial, you use `volumesnapshots` addon(1) and `csi-hostpath-driver` addon(2a).

<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">1</strong></span>Start your cluster</h2>

```shell
minikube start
```

<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">2</strong></span>Enable addons</h2>

Enable `volumesnapshots` and `csi-hostpath-driver` addons:

```shell
minikube addons enable volumesnapshots
minikube addons enable csi-hostpath-driver
```

<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">3</strong></span>Register volume snapshot class</h2>

Before creating volume snapshot, you have to register [Volume Snapshot Classes](https://kubernetes.io/docs/concepts/storage/volume-snapshot-classes/) to your cluster.
Here is an example `VolumeSnapshotClass` config to register:

```yaml
# snapshotclass.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: csi-hostpath-snapclass
driver: hostpath.csi.k8s.io #csi-hostpath
deletionPolicy: Delete
```
```shell
kubectl apply -f snapshotclass.yaml
```

<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">4</strong></span>Prepare persistent volume</h2>

Create persistent volume claim to create persistent volume dynamically:

```yaml
# example-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-hostpath-sc
```
```shell
kubectl apply -f example-pvc.yaml
```

You can confirm that persistent volume is created by the following command:

```shell
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-388c33e2-de56-475c-8dfd-4990d5f7a640 1Gi RWO Delete Bound default/csi-pvc csi-hostpath-sc 60s
```

<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">5</strong></span>Take a volume snapshot</h2>

You can take a volume snapshot for persistent volume claim:

```yaml
# example-csi-snapshot.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
name: snapshot-demo
spec:
volumeSnapshotClassName: csi-hostpath-snapclass
source:
persistentVolumeClaimName: csi-pvc
```
```shell
kubectl apply -f example-csi-snapshot.yaml
```

You could get volume snapshot. You can confirm your volume snapshot by the following command:

```shell
kubectl get volumesnapshot
NAME AGE
snapshot-demo 2m19s
```

<h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">6</strong></span>Restore from volume snapshot</h2>

You can restore persistent volume from your volume snapshot:

```yaml
# example-csi-restore.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc-restore
spec:
storageClassName: csi-hostpath-sc
dataSource:
name: snapshot-demo
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```
```shell
kubectl apply -f example-csi-restore.yaml
```

You can confirm that persistent volume claim is created from `VolumeSnapshot`:

```shell
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
csi-pvc Bound pvc-388c33e2-de56-475c-8dfd-4990d5f7a640 1Gi RWO csi-hostpath-sc 23m
csi-pvc-restore Bound pvc-496bab30-9bd6-4abb-94e9-d2e9e1c8f210 1Gi RWO csi-hostpath-sc 26s
```

0 comments on commit 3913b1b

Please sign in to comment.