@@ -268,31 +268,32 @@ that is used
268268to retrieve metadata on the allocated blocks of a single snapshot,
269269or the changed blocks between a pair of snapshots of the same volume.
270270A number of custom resources are proposed to enable a Kubernetes backup application
271- to create a ** snapshot session** with which to * directly connect* to such a service.
271+ to create a ** snapshot session** with which to *** directly connect***
272+ to such a service.
272273This direct connection results in a minimal load on the Kubernetes API server,
273274one that is definitely not proportional to the amount of metadata transferred
274275or the sizes of the volumes and snapshots involved.
275276
276- A Kubernetes backup application obtains a snapshot session by
277+ A Kubernetes backup application establishes a snapshot session by
277278creating an instance of a [ CSISnapshotSessionAccess] ( #csisnapshotsessionaccess )
278279custom resource, specifying a set of VolumeSnapshot objects in some Namespace.
279- The application will poll the CR until it reaches a
280- terminal state ( ` Ready ` or ` Failed ` ) .
280+ The application must poll the CR until it reaches a terminal state of
281+ ` Ready ` or ` Failed ` .
281282
282283The [ CSISnapshotSessionAccess] ( #csisnapshotsessionaccess ) CR
283284will validate its creator's authority to create the CR and to access the set
284285of VolumeSnapshots. It will then
285- search for the [ SnapshotMetadata] ( #the-snapshotmetadata-service-api ) service
286- of the CSI driver for these VolumeSnapshots.
287- On success, the TCP endpoint and CA certificate of a
286+ search for a [ SnapshotMetadata] ( #the-snapshotmetadata-service-api ) service
287+ in the CSI driver for these VolumeSnapshots.
288+ On success, the TCP endpoint and CA certificate of the
288289[ SnapshotMetadata] ( #the-snapshotmetadata-service-api )
289290service and an opaque ** snapshot session token** is set in its result.
290291
291292The backup application will establish trust with the specified CA, and
292293then use the specified TCP endpoint to directly make TLS gRPC calls to the CSI
293294[ SnapshotMetadata] ( #the-snapshotmetadata-service-api ) service.
294- The service RPC calls all require the the snapshot session token and the
295- names of the Kubernetes VolumeSnapshot objects involved
295+ All RPC calls in the service require that the snapshot session token and the
296+ names of the Kubernetes VolumeSnapshot objects involved be specified,
296297along with other optional parameters.
297298The RPC calls each return a gRPC stream through which the metadata can be recovered.
298299
@@ -316,11 +317,11 @@ by a
316317which provides a validating webhook
317318for authorization and a controller to set up the snapshot session
318319and manage the lifecycle of the CR, including deleting it when it expires.
319- Additional simple CRs are used to advertise the existence of a proxy
320- sidecar to the manager ( [ CSISnapshotSessionService] ( #csisnapshotsessionservice ) CR),
321- and to track the opaque snapshot session token and the snapshot objects
322- authorized for use in the snapshot session
323- ( [ CSISnapshotSessionData ] ( #csisnapshotsessiondata ) CR) .
320+ Additional simple CRs that do not involve a controller are also used:
321+ the [ CSISnapshotSessionService] ( #csisnapshotsessionservice ) CR is used to advertise the
322+ existence of a [ external- snapshot- session sidecar ] ( # the-external- snapshot-session-sidecar ) ,
323+ and the [ CSISnapshotSessionData ] ( #csisnapshotsessiondata ) CR is created for each
324+ active snapshot session and is used for validation .
324325
325326[ Kubernetes Role-Based Access Control] ( https://kubernetes.io/docs/reference/access-authn-authz/rbac/ )
326327is used to secure access to the custom resources, restricting visibility to authorized
@@ -357,15 +358,28 @@ This might be a good place to talk about core concepts and how they relate.
357358
358359- This proposal requires a backup application to directly use the CSI
359360[ SnapshotMetadata] ( #the-snapshotmetadata-service-api )
360- gRPC service.
361+ service.
361362This was necessary to not place a load on the Kubernetes API server
362363that would be proportional to the number of allocated blocks in a volume
363364snapshot.
364365
366+ - The CSI
367+ [ SnapshotMetadata] ( #the-snapshotmetadata-service-api )
368+ service RPC calls allow an application to *** continue*** an interrupted
369+ stream by reissuing the RPC call with starting byte offset.
370+
371+ - The CSI
372+ [ SnapshotMetadata] ( #the-snapshotmetadata-service-api )
373+ service permits metadata to be returned in either an *** extent-based***
374+ format or a *** block*** based format, at the discretion of the CSI driver.
375+ A portable backup application is expected to handle both such formats.
376+
365377- All the volumes in a given snapshot session must have the same CSI provisioner.
366378 The backup application must create separate snapshot sessions for volumes
367379 from different CSI provisioners.
368380
381+ - A snapshot session has a finite lifetime and will expire eventually.
382+
369383- The CSI driver's [ Snapshot Session Service] ( #the-sp-snapshot-session-service )
370384must be capable of serving metadata on a VolumeSnapshot
371385concurrently with the backup application's use of a PersistentVolume
0 commit comments