Skip to content

Commit 7b5403e

Browse files
committed
More caveats. Better grammar.
1 parent fdb94b1 commit 7b5403e

File tree

1 file changed

+29
-15
lines changed
  • keps/sig-storage/3314-csi-changed-block-tracking

1 file changed

+29
-15
lines changed

keps/sig-storage/3314-csi-changed-block-tracking/README.md

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -268,31 +268,32 @@ that is used
268268
to retrieve metadata on the allocated blocks of a single snapshot,
269269
or the changed blocks between a pair of snapshots of the same volume.
270270
A 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.
272273
This direct connection results in a minimal load on the Kubernetes API server,
273274
one that is definitely not proportional to the amount of metadata transferred
274275
or 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
277278
creating an instance of a [CSISnapshotSessionAccess](#csisnapshotsessionaccess)
278279
custom 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

282283
The [CSISnapshotSessionAccess](#csisnapshotsessionaccess) CR
283284
will validate its creator's authority to create the CR and to access the set
284285
of 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)
289290
service and an opaque **snapshot session token** is set in its result.
290291

291292
The backup application will establish trust with the specified CA, and
292293
then 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,
296297
along with other optional parameters.
297298
The RPC calls each return a gRPC stream through which the metadata can be recovered.
298299

@@ -316,11 +317,11 @@ by a
316317
which provides a validating webhook
317318
for authorization and a controller to set up the snapshot session
318319
and 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/)
326327
is 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.
361362
This was necessary to not place a load on the Kubernetes API server
362363
that would be proportional to the number of allocated blocks in a volume
363364
snapshot.
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)
370384
must be capable of serving metadata on a VolumeSnapshot
371385
concurrently with the backup application's use of a PersistentVolume

0 commit comments

Comments
 (0)