Skip to content

Commit d97f3cf

Browse files
nixpanicmergify[bot]
authored andcommitted
doc: clarifiy NVMe-oF design a little more
After collecting feedback, it has been confirmed that the Ceph-CSI/RBD component can be used to create the RBD-images. The NVMe Subsystems may not have been pre-created, so Ceph-CSI should verify if the subsystem exists, and create it if needed. Note: also corrected some of the markdown-linter complaints. Signed-off-by: Niels de Vos <ndevos@ibm.com>
1 parent 4870de1 commit d97f3cf

File tree

1 file changed

+22
-40
lines changed

1 file changed

+22
-40
lines changed

docs/design/proposals/nvme-of.md

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ functionality in the future.
6464
The Controller-plugin should implement the following CSI procedures:
6565

6666
- `CreateVolume` / `DeleteVolume`
67-
1. Create RBD-image on the Ceph cluster (see Considerations)
68-
1. Create the NVMe-subsystem (see Considerations)
69-
1. Expose the RBD-image through the NVMe-oF Gateway
67+
1. Create RBD-image on the Ceph cluster through Ceph-CSI/RBD
68+
1. Create the NVMe-subsystem (if it does not exist yet)
69+
1. Expose the RBD-image through the NVMe-oF Gateway
7070

7171
- `ControllerPublishVolume` / `ControllerUnpublishVolume`
72-
1. Allow access to the subsystem from the host where the Node-plugin will
73-
attach the volume
72+
1. Allow access to the subsystem from the host where the Node-plugin will
73+
attach the volume
7474

7575
There are several parameters that can be configurable when a user creates a
7676
volume. Some of these parameters are set by the Container Platform
@@ -80,8 +80,10 @@ Administrator settable parameters, this extends the parameters that can be set
8080
for RBD volumes (set in a StorageClass):
8181

8282
- _all parameters for the Ceph-CSI RBD driver_
83-
- NVMe-oF Gateway (or gateway group?)
84-
- NVMe subsystem (or possibly detected based on Kubernetes Namespace?)
83+
- NVMe-oF Gateway Group (hostname, could be a Kubernetes Service)
84+
- NVMe subsystem name
85+
- if given, the name for the subsystem should be used
86+
- if not given, base the name on the owner (Kubernetes Namespace)
8587

8688
User controlled parameters (set in a PersistentVolumeClaim):
8789

@@ -93,11 +95,11 @@ User controlled parameters (set in a PersistentVolumeClaim):
9395
The Node-plugin should implement the following CSI procedures:
9496

9597
- `NodeStageVolume` / `NodeUnstageVolume`
96-
1. attach the NVMe-oF namespace from the NVMe-oF Gateway
97-
1. (Filesystem-mode only) mount the filesystem of the block-device
98+
1. attach the NVMe-oF namespace from the NVMe-oF Gateway
99+
1. (Filesystem-mode only) mount the filesystem of the block-device
98100

99101
- `NodePublishVolume` / `NodeUnpublishVolume`
100-
1. bind mount the block-device or filesystem in the target location
102+
1. bind mount the block-device or filesystem in the target location
101103

102104
There are likely additional requirements for attaching the NVMe-oF namespace,
103105
including loading of kernel modules and access to nvme-tools in the
@@ -216,20 +218,12 @@ NVMe-oF initiator.
216218
> [!WARNING]
217219
> Details that are under discussion and/or investigation are listed here.
218220
219-
- Which component should create RBD-images?
220-
221-
1. the `ceph-nvmeof` gateway with `ns add --rbd-create-image`
222-
1. Ceph-CSI RBD so that all Ceph-CSI procedures work 'normally'
223-
224-
The preference goes to Ceph-CSI RBD creating the RBD-images. It will make it
225-
easier to do other CSI procedures for resizing, snapshotting and cloning.
226-
227221
- Are credentials required for attaching a NVMe namespace on a host?
228222

229-
1. Can these credentials be stored in the VolumeContext of a
230-
PersistentVolume? (Probably they should not.)
231-
1. Are the credentials unique per NVMe namespace?
232-
1. Can these credentials be obtained from the NVMe Gateway?
223+
1. Can these credentials be stored in the VolumeContext of a
224+
PersistentVolume? (Probably they should not.)
225+
1. Are the credentials unique per NVMe namespace?
226+
1. Can these credentials be obtained from the NVMe Gateway?
233227

234228
Credentials are optional, some access permissions are in place through the
235229
ControllerPublishVolume CSI procedure where the worker node that attaches the
@@ -239,26 +233,14 @@ NVMe-oF initiator.
239233

240234
- What is the difference for using a single NVMe-oF Gateway vs a Gateway Group?
241235

242-
1. Is there a single address for a group that can be used (like a
243-
Kubernetes Service, redirecting to one of the gateways)?
244-
1. Are gRPC API calls for configuring subsystems/namespaces different?
245-
1. A Gateway or Gateway Group should probably be configured by the admin in
246-
the StorageClass (different StorageClasses for different Gateway
247-
Groups).
236+
1. Is there a single address for a group that can be used (like a
237+
Kubernetes Service, redirecting to one of the gateways)?
238+
1. Are gRPC API calls for configuring subsystems/namespaces different?
239+
1. A Gateway or Gateway Group should probably be configured by the admin in
240+
the StorageClass (different StorageClasses for different Gateway
241+
Groups).
248242

249243
Gateway groups are recommended to use, it provides high-availability. This
250244
means that the Node-plugin should use `nvme connect-all` and only call `nvme
251245
disconnect` when the last volume is detached from the host in
252246
NodeUnstageVolume.
253-
254-
- What component should create the NVMe-subsystem(s)?
255-
256-
There are two options for creating a subsystem:
257-
258-
1. Should be created in advance while deploying the NVMe-oF Gateway (would be
259-
empty). The subsystem should be included in the parameters of the
260-
StorageClass. All NVMe-namespaces would be added to a the single subsystem.
261-
262-
1. The Controller-plugin creates the namespace during CreateVolume. This
263-
would allow additional logic for placing namespaces in different
264-
subsystems (based on Kubernetes namespaces aka tenants).

0 commit comments

Comments
 (0)