Skip to content

Commit bc71039

Browse files
committed
Add description on Conflict on installing VolumePopulator CR for VolumeSnapshotLink across CSI drivers
1 parent 602e9af commit bc71039

File tree

1 file changed

+12
-2
lines changed
  • keps/sig-storage/3294-provision-volumes-from-cross-namespace-snapshots

1 file changed

+12
-2
lines changed

keps/sig-storage/3294-provision-volumes-from-cross-namespace-snapshots/README.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ tags, and then generate with `hack/update-toc.sh`.
9191
- [Risks and Mitigations](#risks-and-mitigations)
9292
- [Secret Handling](#secret-handling)
9393
- [Security](#security)
94+
- [Conflict on installing <code>VolumePopulator</code> CR for <code>VolumeSnapshotLink</code> across CSI drivers](#conflict-on-installing--cr-for--across-csi-drivers)
9495
- [Design Details](#design-details)
9596
- [Example flow of how this proposal works](#example-flow-of-how-this-proposal-works)
9697
- [API](#api)
@@ -239,7 +240,7 @@ Define an API to specify a cross-namespace `VolumeSnapshot` as a `DataSourceRef`
239240

240241
- To specify a non-standard API as a `DataSourceRef` of a PVC, [AnyVolumeDataSource feature](https://kubernetes.io/blog/2021/08/30/volume-populators-redesigned/) is used,
241242
- To specify a cross-namespace `VolumeSnapshot`, a new `VolumeSnapshotLink` CRD is introduced (Please also see [API](#api)),
242-
- To restrict only allowed `VolumeSnapshot` to be consumed from other namespaces, [`ReferenceGrant` CRD (formerly `ReferenceGrant`)](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io%2fv1alpha2.ReferenceGrant) is used,
243+
- To restrict only allowed `VolumeSnapshot` to be consumed from other namespaces, [`ReferenceGrant` CRD (formerly `ReferencePolicy`)](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io%2fv1alpha2.ReferenceGrant) is used,
243244
- To actually populate a PV from a `VolumeSnapshot` referenced from `VolumeSnapshotLink` CRD, a populator for each CSI driver is used,
244245
- As a reference populator implementation, [CSI external provisioner](https://github.com/kubernetes-csi/external-provisioner) is extended to handle the `VolumeSnapshotLink` CRD (Please also see [Populator implementation](#populator-implementation)).
245246

@@ -310,6 +311,15 @@ In addition, there will be cases that `ReferenceGrant` may be created/deleted/re
310311
If all the processes succeed without any error, it succeeds even the `ReferenceGrant` is deleted in the middle of the processes.
311312
If any errors happened in the processes and the controller retries, it may detect that there is no `ReferenceGrant` . Then, it won't use the `VolumeSnapshot` until the `ReferenceGrant` that allows the access is re-created.
312313

314+
#### Conflict on installing `VolumePopulator` CR for `VolumeSnapshotLink` across CSI drivers
315+
316+
This feature requires installing VolumePopulator` CR for `VolumeSnapshotLink` and is enabled per CSI driver basis.
317+
Therefore, on enabling this feature for each CSI driver, it is expected that `VolumePopulator` CR for `VolumeSnapshotLink` is created before each CSI driver installation.
318+
As a result, there may be a conflict in creating it for each driver, if there are any differences in their definitions, like alpha API and beta API.
319+
320+
To avoid this issue, it should be avoided to manage VolumePopulator` CR for `VolumeSnapshotLink` in each CSI driver's repository.
321+
It should be managed in another single repository and the same CR should be used per cluster basis.
322+
313323
## Design Details
314324

315325
<!--
@@ -424,7 +434,7 @@ As a reference implementation, only (a) will be implemented in the community.
424434

425435
Regardless of the implementation,
426436
- `VolumeSnapshotLink` CRD and `ReferenceGrant` CRD must exist in the cluster before the populator is deployed.
427-
- `VolumePopulator` CRD to allow popluating from `VolumeSnapshotLink` CRD needs to be created to enable this feature, as AnyVolumeDataSource feature defines. The `VolumePopulator` CRD needed for this feature will be as follows:
437+
- `VolumePopulator` CR to allow popluating from `VolumeSnapshotLink` CRD needs to be created to enable this feature, as AnyVolumeDataSource feature defines. The `VolumePopulator` CR needed for this feature will be as follows:
428438
```yaml
429439
kind: VolumePopulator
430440
apiVersion: populator.storage.k8s.io/v1beta1

0 commit comments

Comments
 (0)