Skip to content

Commit a4864ea

Browse files
committed
Update documentation for Volume Group Snapshot
1 parent b4ba607 commit a4864ea

File tree

6 files changed

+95
-32
lines changed

6 files changed

+95
-32
lines changed

book/src/SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
- [Data Sources](volume-datasources.md)
3434
- [Cloning](volume-cloning.md)
3535
- [Volume Snapshot & Restore](snapshot-restore-feature.md)
36+
- [Volume Group Snapshot & Restore](group-snapshot.md)
3637
- [Ephemeral Local Volumes](ephemeral-local-volumes.md)
3738
- [Volume Limits](volume-limits.md)
3839
- [Storage Capacity Tracking](storage-capacity-tracking.md)
@@ -42,7 +43,6 @@
4243
- [CSI Windows](csi-windows.md)
4344
- [Volume Mode Conversion](prevent-volume-mode-conversion.md)
4445
- [Cross-Namespace Data Sources](cross-namespace-data-sources.md)
45-
- [Volume Group Snapshot](group-snapshot.md)
4646
- [Deploying a CSI Driver on Kubernetes](deploying.md)
4747
- [Example](example.md)
4848
- [Driver Testing](testing-drivers.md)

book/src/external-snapshotter.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,17 @@ To use the snapshot beta and GA feature, a snapshot controller is also required.
3434

3535
### Description
3636

37-
Starting with the Beta version, the snapshot controller will be watching the Kubernetes API server for `VolumeSnapshot` and `VolumeSnapshotContent` CRD objects. The CSI `external-snapshotter` sidecar only watches the Kubernetes API server for `VolumeSnapshotContent` CRD objects. The CSI `external-snapshotter` sidecar is also responsible for calling the CSI RPCs CreateSnapshot, DeleteSnapshot, and ListSnapshots.
37+
The CSI `external-snapshotter` sidecar watches the Kubernetes API server for `VolumeSnapshotContent` CRD objects. The CSI `external-snapshotter` sidecar is also responsible for calling the CSI RPCs `CreateSnapshot`, `DeleteSnapshot`, and `ListSnapshots`.
3838

39-
#### VolumeSnapshotClass Parameters
39+
Volume Group Snapshot support can be enabled with the `--enable-volume-group-snapshots` option. When enabled, the CSI `external-snapshotter` sidecar watches the API server for `VolumeGroupSnapshotContent` CRD object, and will be responsible for calling the CSI RPCs `CreateVolumeGroupSnapshot`, `DeleteVolumeGroupSnapshot` and `GetVolumeGroupSnapshot`.
40+
41+
#### VolumeSnapshotClass and VolumeGroupSnapshotClass Parameters
4042

4143
When provisioning a new volume snapshot, the CSI `external-snapshotter` sets the `map<string, string> parameters` field in the CSI `CreateSnapshotRequest` call to the key/values specified in the `VolumeSnapshotClass` it is handling.
4244

43-
The CSI `external-snapshotter` also reserves the parameter keys prefixed with `csi.storage.k8s.io/`. Any `VolumeSnapshotClass` keys prefixed with `csi.storage.k8s.io/` are not passed to the CSI driver as an opaque `parameter`.
45+
When volume group snapshot support is enabled, the `map<string, string> parameters` field is set in the CSI `CreateVolumeGroupSnapshotRequest` call to the key/values specified in the `VolumeGroupSnapshotClass` it is handling.
46+
47+
The CSI `external-snapshotter` also reserves the parameter keys prefixed with `csi.storage.k8s.io/`. Any `VolumeSnapshotClass` or `VolumeGroupSnapshotClass` keys prefixed with `csi.storage.k8s.io/` are not passed to the CSI driver as an opaque `parameter`.
4448

4549
The following reserved `VolumeSnapshotClass` parameter keys trigger behavior in the CSI `external-snapshotter`:
4650

@@ -51,9 +55,9 @@ The following reserved `VolumeSnapshotClass` parameter keys trigger behavior in
5155

5256
For more information on how secrets are handled see [Secrets & Credentials](secrets-and-credentials.md).
5357

54-
#### VolumeSnapshot and VolumeSnapshotContent Parameters
58+
#### VolumeSnapshot, VolumeSnapshotContent, VolumeGroupSnapshot and VolumeGroupSnapshotContent Parameters
5559

56-
The CSI `external-snapshotter` (v4.0.0+) introduces the `--extra-create-metadata` flag, which automatically sets the following `map<string, string> parameters` in the CSI `CreateSnapshotRequest`:
60+
The CSI `external-snapshotter` (v4.0.0+) introduces the `--extra-create-metadata` flag, which automatically sets the following `map<string, string> parameters` in the CSI `CreateSnapshotRequest` and `CreateVolumeGroupSnapshotRequest`:
5761

5862
* `csi.storage.k8s.io/volumesnapshot/name`
5963
* `csi.storage.k8s.io/volumesnapshot/namespace`
@@ -69,6 +73,8 @@ For detailed information about volume snapshot and restore functionality, see [V
6973

7074
CSI drivers that support provisioning volume snapshots and the ability to provision new volumes using those snapshots should use this sidecar container, and advertise the CSI `CREATE_DELETE_SNAPSHOT` controller capability.
7175

76+
CSI drivers that support provisioning volume group snapshots should use this side container too, and advertise the CSI `CREATE_DELETE_GET_VOLUME_GROUP_SNAPSHOT` controller capability.
77+
7278
For detailed information (binary parameters, RBAC rules, etc.), see [https://github.com/kubernetes-csi/external-snapshotter/blob/release-6.2/README.md](https://github.com/kubernetes-csi/external-snapshotter/blob/release-6.2/README.md).
7379

7480
### Deployment

book/src/group-snapshot.md

Lines changed: 69 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
Status | Min K8s Version | Max K8s Version | snapshot-controller Version | snapshot-validation-webhook Version | CSI external-snapshotter sidecar Version | external-provisioner Version
66
--|--|--|--|--|--|--
7-
Alpha | 1.27 | - | 7.0+ | 7.0+ | 7.0+ | 3.5+
7+
Alpha | 1.27 | - | 7.0+ | 7.0+ | 7.0+ | 4.0+
8+
9+
**IMPORTANT**: The validation logic for VolumeGroupSnapshots and VolumeGroupSnapshotContents has been replaced by CEL validation rules. The validating webhook is now only being used for VolumeGroupSnapshotClasses to ensure that there's at most one class per CSI Driver. The validation webhook is deprecated and will be removed in the next release
810

911
## Overview
1012

@@ -14,12 +16,16 @@ are taken at the same point-in-time. A group snapshot can be used either to rehy
1416
new volumes (pre-populated with the snapshot data) or to restore existing volumes to
1517
a previous state (represented by the snapshots).
1618

17-
Kubernetes CSI currently enables CSI Drivers to expose the following functionality via the Kubernetes API:
19+
Kubernetes CSI currently enables CSI Drivers to expose the following
20+
functionality via the Kubernetes API:
1821

19-
1. Creation and deletion of volume group snapshots via [Kubernetes native API](https://github.com/kubernetes-csi/external-snapshotter/tree/master/client/apis/volumegroupsnapshot/v1alpha1).
20-
2. Creation of new volumes pre-populated with the data from a snapshot that is part of the volume group snapshot via Kubernetes [dynamic volume provisioning](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/).
22+
1. Creation and deletion of volume group snapshots via [Kubernetes native
23+
API](https://github.com/kubernetes-csi/external-snapshotter/tree/master/client/apis/volumegroupsnapshot/v1alpha1).
24+
2. Creation of new volumes pre-populated with the data from a snapshot that is
25+
part of the volume group snapshot via Kubernetes [dynamic volume
26+
provisioning](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/).
2127

22-
## Implementing Volume Group Snapshot Functionality in Your CSI Driver
28+
## Implementing Volume Group Snapshot Functionality in your CSI Driver
2329

2430
To implement the volume group snapshot feature, a CSI driver MUST:
2531

@@ -31,13 +37,21 @@ For details, see the [CSI spec](https://github.com/container-storage-interface/
3137

3238
## Sidecar Deployment
3339

34-
The Kubernetes CSI development team maintains the [external-snapshotter](external-snapshotter.md) Kubernetes CSI [Sidecar Containers](sidecar-containers.md). This sidecar container implements the logic for watching the Kubernetes API objects and issuing the appropriate CSI volume group snapshot calls against a CSI endpoint. For more details, see [external-snapshotter documentation](external-snapshotter.md).
40+
The Kubernetes CSI development team maintains the
41+
[external-snapshotter](external-snapshotter.md) Kubernetes CSI [Sidecar
42+
Containers](sidecar-containers.md). This sidecar container implements the logic
43+
for watching the Kubernetes API objects and issuing the appropriate CSI volume
44+
group snapshot calls against a CSI endpoint. For more details, see
45+
[external-snapshotter documentation](external-snapshotter.md).
3546

3647
## Volume Group Snapshot APIs
3748

38-
With the introduction of Volume Group Snapshot, the user can create and delete a group snapshot using Kubernetes APIs.
49+
With the introduction of Volume Group Snapshot, the user can create and delete a
50+
group snapshot using Kubernetes APIs.
3951

40-
The schema definition for the custom resources (CRs) can be found [here](https://github.com/kubernetes-csi/external-snapshotter/tree/master/client/config/crd). The CRDs should be installed by the Kubernetes distributions.
52+
The schema definition for the custom resources (CRs) can be found
53+
[here](https://github.com/kubernetes-csi/external-snapshotter/tree/master/client/config/crd).
54+
The CRDs should be installed by the Kubernetes distributions.
4155

4256
There are 3 APIs:
4357

@@ -63,21 +77,34 @@ created. including the driver information, the deletion policy, etc.
6377

6478
## Controller
6579

66-
* The controller logic for volume group snapshot is added to the snapshot controller and the CSI external-snapshotter sidecar.
80+
* The controller logic for volume group snapshot is added to the snapshot
81+
controller and the CSI external-snapshotter sidecar.
6782

68-
The snapshot controller is deployed by the Kubernetes distributions and is responsible for watching the VolumeGroupSnapshot CRD objects and manges the creation and deletion lifecycle of volume group snapshots.
83+
The snapshot controller is deployed by the Kubernetes distributions and is
84+
responsible for watching the VolumeGroupSnapshot CRD objects and manges the
85+
creation and deletion lifecycle of volume group snapshots.
6986

70-
The CSI external-snapshotter sidecar watches Kubernetes VolumeGroupSnapshotContent CRD objects and triggers CreateVolumeGroupSnapshot/DeleteVolumeGroupSnapshot against a CSI endpoint.
87+
The CSI external-snapshotter sidecar watches Kubernetes
88+
VolumeGroupSnapshotContent CRD objects and triggers
89+
CreateVolumeGroupSnapshot/DeleteVolumeGroupSnapshot against a CSI endpoint.
7190

7291
## Snapshot Validation Webhook
7392

74-
The validating webhook server is updated to validate volume group snapshot objects. This SHOULD be installed by the Kubernetes distros along with the snapshot-controller, not end users. It SHOULD be installed in all Kubernetes clusters that has the volume group snapshot feature enabled. See [Snapshot Validation Webhook](snapshot-validation-webhook.md) for more details on how to use the webhook.
93+
The validating webhook server is updated to validate volume group snapshot
94+
objects. This SHOULD be installed by the Kubernetes distros along with the
95+
snapshot-controller, not end users. It SHOULD be installed in all Kubernetes
96+
clusters that has the volume group snapshot feature enabled. See [Snapshot
97+
Validation Webhook](snapshot-validation-webhook.md) for more details on how to
98+
use the webhook.
7599

76100
## Kubernetes Cluster Setup
77101

78-
See the Deployment section of [Snapshot Controller](snapshot-controller.md) on how to set up the snapshot controller and CRDs.
102+
See the Deployment section of [Snapshot Controller](snapshot-controller.md) on
103+
how to set up the snapshot controller and CRDs.
79104

80-
See the Deployment section of [Snapshot Validation Webhook](snapshot-validation-webhook.md) for more details on how to use the webhook.
105+
See the Deployment section of [Snapshot Validation
106+
Webhook](snapshot-validation-webhook.md) for more details on how to use the
107+
webhook.
81108

82109
## Test Volume Group Snapshot Feature
83110

@@ -88,32 +115,53 @@ Create a _StorageClass_:
88115
kubectl create -f storageclass.yaml
89116
```
90117

91-
Create _PVC_:
118+
Create _PVCs_:
92119
```
120+
# This will create a PVC named hpvc
93121
kubectl create -f pvc.yaml
94-
kubectl create -f pvc2.yaml
122+
123+
# This will create a PVC named hpvc-2
124+
sed "s/hpvc/hpvc-2/" pvc.yaml | kubectl create -f -
95125
```
96126

97127
Add a label to _PVC_:
98128
```
99-
kubectl label pvcs <your-pvc-name> group:my-apps
129+
kubectl label pvc hpvc hpvc-2 app.kubernetes.io/name=postgresql
100130
```
101131

102132
Create a _VolumeGroupSnapshotClass_:
103133
```
104-
kubectl create -f group-snapshot-class.yaml
134+
kubectl create -f groupsnapshotclass-v1alpha1.yaml
105135
```
106136

107137
Create a _VolumeGroupSnapshot_:
108138
```
109-
kubectl create -f group-snapshot.yaml
139+
kubectl create -f groupsnapshot-v1alpha1.yaml
140+
```
141+
142+
Once the _VolumeGroupSnapshot_ is ready, the `pvcVolumeSnapshotRefList` status field will contain the names of the generated _VolumeSnapshot_ objects:
143+
```
144+
kubectl get volumegroupsnapshot new-groupsnapshot-demo -o yaml | sed -n '/pvcVolumeSnapshotRefList/,$p'
145+
146+
pvcVolumeSnapshotRefList:
147+
- persistentVolumeClaimRef:
148+
name: hpvc
149+
volumeSnapshotRef:
150+
name: snapshot-4bcc4a322a473abf32babe3df5779d14349542b1f0eb6f9dab0466a85c59cd42-2024-06-19-12.35.17
151+
- persistentVolumeClaimRef:
152+
name: hpvc-2
153+
volumeSnapshotRef:
154+
name: snapshot-62bd0be591e1e10c22d51748cd4a53c0ae8bf52fabb482bee7bc51f8ff9d9589-2024-06-19-12.35.17
155+
readyToUse: true
110156
```
111157

112158
Create a _PVC_ from a _VolumeSnapshot_ that is part of the group snapshot:
113159
```
114-
kubectl create -f restore-from-snapshot-in-group.yaml
160+
# In the command below, the volume snapshot name should be chosen from
161+
# the ones listed in the output of the previous command
162+
sed 's/new-snapshot-demo-v1/snapshot-4bcc4a322a473abf32babe3df5779d14349542b1f0eb6f9dab0466a85c59cd42-2024-06-19-12.35.17/' restore.yaml | kubectl create -f -
115163
```
116164

117165
## Examples
118166

119-
See the [Drivers](drivers.md) for a list of CSI drivers that implement the snapshot feature.
167+
See the [Drivers](drivers.md) for a list of CSI drivers that implement the group snapshot feature.

book/src/sidecar-containers.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
# Kubernetes CSI Sidecar Containers
22

3-
Kubernetes CSI Sidecar Containers are a set of standard containers that aim to simplify the development and deployment of CSI Drivers on Kubernetes.
3+
Kubernetes CSI Sidecar Containers are a set of standard containers that aim to
4+
simplify the development and deployment of CSI Drivers on Kubernetes.
45

5-
These containers contain common logic to watch the Kubernetes API, trigger appropriate operations against the “CSI volume driver” container, and update the Kubernetes API as appropriate.
6+
These containers contain common logic to watch the Kubernetes API, trigger
7+
appropriate operations against the “CSI volume driver” container, and update the
8+
Kubernetes API as appropriate.
69

710
The containers are intended to be bundled with third-party CSI driver containers and deployed together as pods.
811

book/src/snapshot-controller.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@ For more information on the CSI external-snapshotter sidecar, see [this external
3434

3535
The snapshot controller will be watching the Kubernetes API server for `VolumeSnapshot` and `VolumeSnapshotContent` CRD objects. The CSI `external-snapshotter` sidecar only watches the Kubernetes API server for `VolumeSnapshotContent` CRD objects. The snapshot controller will be creating the `VolumeSnapshotContent` CRD object which triggers the CSI `external-snapshotter` sidecar to create a snapshot on the storage system.
3636

37+
The snapshot controller will be watching for `VolumeGroupSnapshot` and `VolumeGroupSnapshotContent` CRD objects when Volume Group Snapshot support is enabled via the `--enable-volume-group-snapshots` option.
38+
3739
For detailed snapshot beta design changes, see the design doc [here](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/177-volume-snapshot/README.md).
3840

3941
For detailed information about volume snapshot and restore functionality, see [Volume Snapshot & Restore](snapshot-restore-feature.md).
4042

43+
For detailed information about volume group snapshot and restore functionality, see [Volume Snapshot & Restore](group-snapshot.md).
44+
4145
For detailed information (binary parameters, RBAC rules, etc.), see [https://github.com/kubernetes-csi/external-snapshotter/blob/release-6.2/README.md](https://github.com/kubernetes-csi/external-snapshotter/blob/release-6.2/README.md).
4246

4347
## Deployment

book/src/snapshot-restore-feature.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Alpha | 1.12 | 1.12 | | | 0.4.0 <= version < 1.0 | 0.4.1 <= version < 1.0
88
Alpha | 1.13 | 1.16 | | | 1.0.1 <= version < 2.0 | 1.0.1 <= version < 1.5
99
Beta | 1.17 | - | 2.0+ | 3.0+ | 2.0+ | 1.5+
1010

11+
**IMPORTANT**: The validation logic for VolumeSnapshots and VolumeSnapshotContents has been replaced by CEL validation rules. The validating webhook is now only being used for VolumeSnapshotClasses to ensure that there's at most one class per CSI Driver. The validation webhook is deprecated and will be removed in the next release.
12+
1113
## Overview
1214

1315
Many storage systems provide the ability to create a "snapshot" of a persistent volume. A snapshot represents a point-in-time copy of a volume. A snapshot can be used either to provision a new volume (pre-populated with the snapshot data) or to restore the existing volume to a previous state (represented by the snapshot).
@@ -83,12 +85,12 @@ kubectl create -f pvc.yaml
8385

8486
Create a _VolumeSnapshotClass_:
8587
```
86-
kubectl create -f snapshotclass.yaml
88+
kubectl create -f snapshotclass-v1.yaml
8789
```
8890

8991
Create a _VolumeSnapshot_:
9092
```
91-
kubectl create -f snapshot.yaml
93+
kubectl create -f snapshot-v1.yaml
9294
```
9395

9496
Create a _PVC_ from a _VolumeSnapshot_:
@@ -143,7 +145,7 @@ kubectl create -f snapshot.yaml
143145

144146
Create a _PVC_ from a _VolumeSnapshot_:
145147
```
146-
kuberctl create -f restore.yaml
148+
kubectl create -f restore.yaml
147149
```
148150

149151
#### PersistentVolumeClaim not Bound

0 commit comments

Comments
 (0)